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

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

관련 글

지식 공유2분 읽기

[Docker] 컨테이너(Container)에 할당되는 CPU 제한하기

개요 이번 게시글에서는 도커 컨테이너에서 CPU를 최적으로 활용하는 방법에 대해서 기록해보려고 한다. 호스트 CPU Core 정보 확인 먼저 컨테이너에 CPU를 최적으로 할당하기 위해서는, 현재 호스트 시스템의 CPU 정보에 대해서...

도커
지식 공유1분 읽기

[Docker] 배그 최고급 꾸러기 시뮬레이터 배포

개요 최고급 꾸러미에 대한 확률 체감을 위한 시뮬레이터 프로그램을 구현하고 도커로 배포하였음. 배포 로직은 AWS EC2 인스턴스에 도커를 사용하여 nginx proxy manager를 배포하고 리버스 프록시로 홈 서버에 있는 시뮬레...

도커