Profile picture

[Docker] 도커 로그(log) 알아보기

JaehyoJJAng2023년 04월 06일

STDOUT / STDERR

Docker container log는 stdout, stderr, streams로 Log를 찍는다.

  • 기본적으로 이러한 log는 Docker host에 JSON file로 저장된다.
  • Default logging driver로 json-file logging driver를 사용하기 때문이다.

image


로그 확인

전체 로그 확인

$ docker logs [container]

마지막 로그 10줄 확인

$ docker logs --tail 10 [container]

실시간 로그 스트림 확인

$ docker logs -f [container]

로그마다 타임스탬프 표시

$ docker logs -f -t [container]

호스트 운영체제의 로그 저장 경로

  • log driver = json-file 인 경우에만 유효

로그 파일 경로

$ cat /var/lib/docker/containers/${CONTAINER_ID}/${CONTAINER_ID}-json.log

로그 파일 찾기

# 권한이 필요하기 때문에 슈퍼유저로 변경 후 진행
$ sudo su

$ find /var/lib/docker -name "*json.log" 2>/dev/null | xargs -I / cat /

OR

$ find /var/lib/docker -name "*json.log" 2>/dev/null -exec sh -c "cat {}" \;

... 생략 ...
{"log":"2023/05/08 08:51:21 [notice] 1#1: start worker process 19\r\n","stream":"stdout","time":"2023-05-08T08:51:21.969915631Z"}

실행 중인 특정 컨테이너의 log 위치를 알고싶다면, docker inspect 명령어를 사용하면 된다.

$ docker inspect <container_id> --format {% raw %} "{{.LogPath}}" {% endraw %}

일반 계정도 로그 파일 읽을 수 있도록 설정하기

도커 디렉토리(/var/lib/docker)의 경우 root 권한만 접근할 수 있도록 설정되어 있기 때문에,

일반 계정으로 접근하려면 root 계정으로 변경하거나 일반 계정에 sudo와 같은 권한이 부여되어 있어야 한다.



필자의 경우 컨테이너 데이터를 백업하기 위해서 /var/lib/docker 경로에 접근할 수가 있어야 하는데

여기서는 root 권한이 아닌 다른 방법을 사용하여 일반 계정도 해당 디렉토리에 접근할 수 있도록 해보려고 한다.


먼저 /var/lib/docker의 소유권을 확인해주자.

ls -ld /var/lib/docker

drwxr-x--- 12 root root 4096 Dec 24 14:13 /var/lib/docker

여기서 그룹 소유권이 root로 되어 있을거다.


아래 명령어를 실행해 그룹 소유권을 root가 아닌 docker로 변경해주자.

sudo chown -R :docker /var/lib/docker

그리고 현재 계정(유저)를 docker 그룹에 소속시켜주면 된다.

sudo usermod -aG docker $USER

그리고 보면 /var/lib/docker 디렉토리의 권한을 보면

drwx--x--- 12 root root 4096 Dec 24 14:13 /var/lib/docker

그룹 권한에서 x(실행) 권한만 들어가 있는데 여기에 r(읽기) 권한을 추가해주도록 하자.


sudo chmod -R g+r /var/lib/docker

이렇게 하면 docker 그룹에 속한 유저들도 /var/lib/docker 하위에 있는 파일, 디렉토리들에 정상 접근이 가능해질거다.



로그 용량 제한

  • 컨테이너 단위로 로그 용량 제한을 할 수 있지만, 도커 엔진에서 기본 설정을 진행할 수도 있다.
  • 운영환경(production)에서 필수 설정

한 로그 파일당 최대 크기를 3Mb로 제한하고, 최대 로그 파일 3개로 로테이팅

$ docker run -d -it --name nginx -p 80:80 --rm \
  --log-driver=json-file \
  --log-opt max-size=3m \
  --log-opt max-file=5 \
  nginx:latest

Loading script...