[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 컨테이너를 더욱 원활히 관리해 보세요...!
유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!
'Docker' 카테고리의 다른 글
[Docker] error: could not create a builder instance with TLS data loaded from environment 에러 해결 방법 (0) | 2023.06.15 |
---|---|
[Docker] Network 설정 (0) | 2022.12.01 |
[Docker] Syslog 서버 구축 (0) | 2022.11.01 |
[Docker] Healthcheck 설정을 통한 컨테이너 상태 점검 (0) | 2022.10.19 |
[Docker] Volumes 설정 (0) | 2022.10.11 |