구리의 창고

Docker 로그 관리 - logrotate 본문

DevOps

Docker 로그 관리 - logrotate

구리z 2017. 7. 19. 16:04

소개

docker를 신나게 사용하다보면 감당 할 수 없는 로그가 쌓이게된다. 기본적으로 STDOUT, STDERR는 전부 로그로 남기 때문에 하드디스크 용량부족 사태를 미연에 방지해야한다. docker container를 생성 할 때 logging driver를 지정 할 수 있는데 기본 값은 json-file이다.

로그보기

$ docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --help           Print usage
      --since string   Show logs since timestamp
      --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
기본적으로 명령어 사용법은 위와 같다. 옵션들이 몇 개 있는데, 사용하는데 꼭 필요한 것들이 몇 개 있다.

-f, --follow

로그를 계속 모니터링 할 때 사용한다. tail -f와 같은 기능이다.

--tail

이 옵션 없이 명령어를 실행하면 모든 로그를 한 번에 보여준다. 로그 크기가 너무 클 경우 쓸데 없는 시간만 낭비하게된다. 

예제

adminer container 로그를 최근 5개만 모니터링하는 예제이다.
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2006c3a3a8a3        postgres:9.6.3      "docker-entrypoint..."   45 hours ago        Up 45 hours         0.0.0.0:5432->5432/tcp   postgres_db_1
1f72794c4c51        adminer             "entrypoint.sh doc..."   45 hours ago        Up 45 hours         0.0.0.0:5050->8080/tcp   postgres_adminer_1
$ docker logs -f --tail=5 1f72
[Tue Jul 18 02:54:50 2017] ::ffff:10.3.22.35:49833 [200]: /?pgsql=db&username=root&db=dgoh&ns=public&script=db
[Tue Jul 18 03:08:47 2017] ::ffff:10.3.22.35:50102 [200]: /?pgsql=db&username=root&db=dgoh&ns=public&table=config
[Tue Jul 18 03:08:47 2017] ::ffff:10.3.22.35:50103 [200]: /adminer.css
[Tue Jul 18 03:08:48 2017] ::ffff:10.3.22.35:50104 [200]: /?pgsql=db&username=root&db=dgoh&ns=public&select=config
[Tue Jul 18 03:08:48 2017] ::ffff:10.3.22.35:50105 [200]: /adminer.css

로그관리

위에서도 말했듯이 기본 logging driver를 사용하면 로그가 계속 쌓이게된다. 간단하게 logrotate를 이용해서 오래된 로그를 관리 할 수 있다. 로그가 저장되는 위치는 /var/lib/docker/containers이다. 아래처럼 logrotate를 설정해준다.
# /etc/logrotate.d/docker-container
/var/lib/docker/containers/*/*.log {
  rotate 7
  daily
  compress
  size=1M
  missingok
  delaycompress
  copytruncate
}
좀 더 자세한 logrotate 설정은 직접 찾아보면서 설정하는 편이 좋다.


Comments