Post

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에 로그를 저장하는 컨테이너를 생성합니다.

This post is licensed under CC BY 4.0 by the author.