[Docker] Logging 설정

도커 컨테이너 실행 시 기본적으로 컨테이너에서 발생하는 로그를 저장하여 관리하고 있습니다.

발생되는 로그는 docker logs {Name} or {ID} 명령어를 통해 간단히 확인할 수 있습니다.

Logging 설정을 통해 로그를 남기는 형식을 변경하거나 로그 파일을 관리하는 정책을 설정할 수 있습니다.

 

기본 설정

도커 컨테이너에서 Logging 관련 설정 시 logging driver를 설정할 수 있으며 지원되는 여러가지 driver 중 3가지 설정을 확인해보겠습니다.

 

첫 번째로는 기본 설정인 json-file 설정으로 도커 컨테이너에 로그를 남기는 기능입니다.

driver: "json-file"

 

두 번째 설정은 syslog 설정으로 syslog 서버로 로그를 전송하여 syslog 서버에서도 로그를 관리하는 설정입니다.

driver: "syslog"

 

세 번째 설정은 none 설정으로 로그를 별도로 관리하지 않는 설정입니다.

driver: "none"

 

1. json-file 설정

json-file 설정은 Default 설정으로 별도로 logging을 설정하지 않아도 아래와 같이 적용되어 동작합니다.

아래 내용으로 도커 컨테이너 실행 및 웹 접속 후 로그를 확인해봅니다.

# cat docker-compose.yml
services:
  httpd:
    image: httpd:latest
    container_name: "my-web-server"
    ports:
      - "80:80"
    logging:
      driver: "json-file"

 

아래 형식으로 로그가 기록됩니다.

# docker logs my-web-server --tail 1
172.29.0.1 - - [21/Oct/2022:13:39:05 +0000] "GET / HTTP/1.1" 200 45

 

docker-compose 파일에서 아래 내용을 제거해도 Default 설정이므로 로그는 동일하게 기록됩니다.

logging:
  driver: "json-file"

 

json-file 옵션

json-file driver의 옵션을 통해 로그 파일의 사이즈와 갯수를 제한하거나 기타 옵션을 사용할 수 있습니다.

# cat docker-compose.yml
services:
  httpd:
    image: httpd:latest
    container_name: "my-web-server"
    ports:
      - "80:80"
    logging:
      driver: "json-file"
      options:
        max-size: "10k"
        max-file: "3"

로그 사이즈는 10k, 갯수는 3개로 설정하였고, 실제로 생성되는 로그 파일을 확인해봅니다.
(로그는 스크립트를 통해 접속 로그를 생성하였습니다)

 

docker inspect 명령어틑 통해 컨테이너 정보 중 로그 생성 경로를 확인합니다.

# docker inspect my-web-server | grep LogPath
  "LogPath": "/var/lib/docker/containers/98ffd3097dbf7c29aa19c5ccb54ad5e174841bd8472200828362668c058ccd31/98ffd3097dbf7c29aa19c5ccb54ad5e174841bd8472200828362668c058ccd31-json.log",

 

로그 생성 경로를 확인하여 10k 사이즈로 3개의 갯수로 로그가 생성된 것을 확인할 수 있습니다.

# ll /var/lib/docker/containers/98ffd3097dbf7c29aa19c5ccb54ad5e174841bd8472200828362668c058ccd31/
total 72
-rw-r----- 1 root root  7553 Oct 25 22:51 98ffd3097dbf7c29aa19c5ccb54ad5e174841bd8472200828362668c058ccd31-json.log
-rw-r----- 1 root root 10077 Oct 25 22:51 98ffd3097dbf7c29aa19c5ccb54ad5e174841bd8472200828362668c058ccd31-json.log.1
-rw-r----- 1 root root 10070 Oct 25 22:51 98ffd3097dbf7c29aa19c5ccb54ad5e174841bd8472200828362668c058ccd31-json.log.2

간단히 로그 사이즈와 갯수로 로그 파일을 관리하는 부분이지만,
서비스별 특성에 따라 생성되는 로그양과 관리 정책에 따라 해당 설정을 조정하여 사용해보시면 좋을 것 같습니다.

 

 

2. syslog 설정

syslog driver 옵션을 통해 로그를 syslog 서버에 저장할 수 있습니다.
syslog 서버 구축은 간단히 정리한 글이 있어 링크를 참고해주시면 될 것 같습니다. [syslog 서버 구축]

 

로그는 로컬에 구성한 syslog 서버에 로그를 저장하도록 설정하였습니다.

# cat docker-compose.yml
services:
  httpd:
    image: httpd:latest
    container_name: "my-web-server"
    ports:
      - "80:80"
    logging:
      driver: "syslog"
      options:
        syslog-address: "udp://localhost:514"

서비스 로그 생성 시 Docker 와 syslog 서버에서 모두 로그를 확인할 수 있습니다.
syslog 서버뿐만 아니라 Docker에도 로그가 생성된다는 점을 기억하시면 좋을 것 같습니다.

 

[ Docker 로그 ]

# docker logs my-web-server --tail 1
172.20.0.1 - - [07/Nov/2022:13:05:22 +0000] "GET / HTTP/1.1" 200 45

[ syslog 로그 ]

# cat messages | tail -1
Nov 7 22:05:22 172.19.0.1 c320e2a10055[172]: 172.20.0.1 - - [07/Nov/2022:13:05:22 +0000] "GET / HTTP/1.1" 200 45

 

중요도가 높은 서비스거나 별도로 로그를 관리하기 위해 syslog를 사용하면 좋을 것 같습니다.

 

 

3. none 설정

none driver 옵션은 로그를 생성하지 않겠다는 설정입니다.

# cat docker-compose.yml
services:
  httpd:
    image: httpd:latest
    container_name: "my-web-server"
    ports:
      - "80:80"
    logging:
      driver: "none"

 

네. 진짜 로그 저장안됩니다...

# docker logs my-web-server
Error response from daemon: configured logging driver does not support reading

서비스 특성에 따라 로그 확인이 필요 없을 경우 사용하거나,
테스트 용도로 로그 양이 많이 발생하는 경우 일시적으로 사용할 수 있을 것 같습니다.

 

 

logging 설정 중 간단히 3가지 설정을 확인해봤습니다.
각각의 서비스 특성에 따라 상황에 맞는 옵션을 사용하여 Docker 컨테이너를 더욱 원활히 관리해 보세요...!

+ Recent posts