Docker 에서는 실행 중인 컨테이너와 서비스로부터 정보를 가져오기 위한 다양한 logging mechanism
을 포함하고 있는 데,
이를 logging driver
라고 한다.
Docker 에서는 기본적인 logging drvier 로 컨테이너 log 를 JSON 으로 반환하는 json-file
을 사용하고 있다.
하지만 log-rotation
이 구현되어 있지 않기 때문에 json-file logging driver 로 인해 쌓인 log 들로 인하여
디스크 용량에 무리가 가게 된다.
log-rotation?
일정 단위의 log file 들을 일정한 주기로 백업 또는 별도 처리를 통해서 관리하는 작업을 말한다
[log-rotation] https://jins-dev.tistory.com/entry/Log-Rotation-Roll-the-log-%EB%A1%9C%EA%B7%B8-%EB%A1%A4%EB%A7%81%EB%A1%9C%ED%85%8C%EC%9D%B4%EC%85%98%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
이전 버전의 Docker 와의 호환성을 위해서 logging driver 로 json-file 을 사용하고 있지만,
보통의 경우 logging driver 로 local
을 사용하는 것이 권장된다. local
의 경우 log-ration 을 지원하고, 더 효율적인 파일 포멧을 사용한다.
이와 관련된 설정은 /etc/docker/daemon.json
에 저장하고 관리한다.
daemon.json
에 log-driver
에서 logging driver 를 지정하고 log-opts
에 이와 관련된 설정을 기입하면 된다.
// daemon.json
{
"log-driver": "local" [ DEFAULT: json-file ]
"log-opts": {
"max-size": "10m",
"max-file": "3",
"labels": "production_status",
"env": "os,customer"
}
}
수정 이후에는 docker service 를 재시작하고 docker info
명령어를 통해서 log driver 가 바뀐 것을 확인 할 수 있다.
[docker logging driver] https://docs.docker.com/config/containers/logging/configure/
추가적으로, mode
에 block
, non-blocking
이라는 개념이 있는데 이와 관련해서 차후에 정리해보도록하자.