Docker - 컨테이너 로깅
시작하세요! 도커/쿠버네티스 책 정리글입니다.
✍️ Json-file 로그 사용하기
도커는 컨테이너의 표준 출력(StdOut)과 에러(stdErr)로그를 별도의 메타데이터 파일로 저장하낟고 합니다.
간단한 로그를 남기기 위해
1
2
3
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=1234 \
mysql:5.7
해당 컨테이너는 백그라운드 모드로 실행되기에 실제로 mysql
이 잘 돌아가는지 알 수가 없습니다.
이를 확인하기 위해서는 docker logs <컨테이너명>
명령어를 통해 볼 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
docker logs mysql
# 응용
# 끝 두 줄만 출력
docker logs --tail 2 mysql
# 유닉스 시간을 입력해 특정 시간 이후의 로그 확인 가능
docker logs --since 1474765979 mysql
# -t 옵션을 통해 타임스탬프 표시가능
docker logs -t mysql
# -f 옵션을 통해 로그를 스트림으로 확인 가능
docker logs -f mysql
또한, 컨테이너 내부에서 bash 셸 등으로 입출력한 내용도 확인할 수 있습니다.
컨테이너 로그는 JSON 형태로 도커 내부에 저장되는데, 이 파일들은
1
/var/lib/docker/containers/${CONTaINER_ID}/${CONTAINER_ID}-json.log
에 저장이 됩니다. cat
, vi
와 같은 명령어로 확인이 가능합니다.
컨테이너의 출력이 너무 많아지면 호스트의 저장 공간을 많이 차지하게 되는데, 이를 방지하기 위해서 --log-opt
옵션으로 파일의 최대 크기를 지정할 수 있습니다.
1
2
3
docker run -it \
--log-opt max-size=10k --log-opt max-file=3 \
--name log-test ubuntu:14.04
max-size
: json 로그 파일의 최대 크기max-file
: 로그 파일의 최대 개수
위는 JSON 파일로 로그를 저장하지만 다른 방식들은 각종 로깅 드라이버를 사용하게 설정해 컨테이너 로그를 수집할 수 있게 도와줍니다.
애플리케이션의 특징에 적합하게 로깅 드라이버를 선택해야하기에, 그 특징을 파악해야합니다.
로깅드라이버는 기본적으로 json-file로 설정되지만 도커 데몬 시작옵션에서 바꿀 수 있다고 합니다.
✍️ syslog 로그
두 번째방법인 syslog
입니다.
syslog
란 유닉스 계열 대부분 운영체제에서 커널, 보안 등 로그를 수집하는 오래된 표준 중 하나라고 합니다. 인터페이스가 동일하기에 로그를 수집하고 분석하는데에 수월하다는 장점이 있습니다.
다음 명령어를 통해 syslog
에 로그를 저장하는 컨테이너를 생성합니다.