코알못

[Docker] 로그 본문

ETC

[Docker] 로그

코린이s 2022. 3. 26. 19:35
728x90

로그 확인 하는 방법은  'docker logs' 명령어를 이용하면 되며 옵션을 추가로 주어 원하는 대로 로그 확인이 가능하다.

우선 옵션 없이 로그를 확인해보자!

$ docker logs [container]
logger=sqlstore t=2022-03-26T09:13:48.34+0000 lvl=info msg="Created default organization"
logger=plugin.manager t=2022-03-26T09:13:48.38+0000 lvl=info msg="Plugin registered" pluginId=input
logger=query_data t=2022-03-26T09:13:48.38+0000 lvl=info msg="Query Service initialization"
...

전체 로그가 확인 되며 마지막 로그 10개만 확인하고 싶다면 --tail 옵션을 준다.

$ docker logs --tail 10 [container]
logger=migrator t=2022-03-26T09:13:48.33+0000 lvl=info msg="migrations completed" performed=385 skipped=0 duration=1.1487694s
logger=sqlstore t=2022-03-26T09:13:48.34+0000 lvl=info msg="Created default admin" user=admin
logger=sqlstore t=2022-03-26T09:13:48.34+0000 lvl=info msg="Created default organization"
logger=plugin.manager t=2022-03-26T09:13:48.38+0000 lvl=info msg="Plugin registered" pluginId=input
logger=query_data t=2022-03-26T09:13:48.38+0000 lvl=info msg="Query Service initialization"
logger=live.push_http t=2022-03-26T09:13:48.39+0000 lvl=info msg="Live Push Gateway initialization"
logger=ngalert t=2022-03-26T09:13:48.5+0000 lvl=info msg="warming cache for startup"
logger=http.server t=2022-03-26T09:13:48.51+0000 lvl=info msg="HTTP Server Listen" address=[::]:3000 protocol=http subUrl= socket=
logger=ngalert.multiorg.alertmanager t=2022-03-26T09:13:48.52+0000 lvl=info msg="starting MultiOrg Alertmanager"
logger=sqlstore t=2022-03-26T09:28:47.43+0000 lvl=info msg="Database locked, sleeping then retrying" error="database is locked" retry=0

만약 로그를 실시간으로 보고 싶다면 아래와 같이 -f 옵션을 준다.

$ docker logs -f [container]

로그에 타임 스탬프를 표기하고 싶다면 -t 옵션을 준다.

$ docker logs -t [container]

각각의 로그는 호스트 운영체제에 지정된 로깅 드라이버에 의해 저장되는데 mac의 경우 해당 경로에 없다. 

- '/var/lib/docker/containers/${CONTAINER_ID}/${CONTAINER_ID}-json.log

mac 의 경우 mac os 위에서 바로 container 를 실행 시키는 것이 아닌 hyperkit, linuxkit 위에서 실행 시킨다.

그렇기에 아래와 같이 kit 에 접속한뒤, 해당 경로로 가면 로그를 맞이 할수 있다! (운영은 mac 에서 하지 않을 것이니 안심)

$ docker run -it --rm --privileged --pid=host justincormack/nsenter1

로그 확인하면 정상적으로 해당 경로에 json 파일이 있다.

/ # cd /var/lib/docker/containers/
/var/lib/docker/containers # ls
5d4f6ceba8a455bbe5df0c105e046041269668f61dfbfe8ae6b9b089533f7213  c73c31a31a1104b61df35b71d00c94b6dc8a651af512309e7982e0aa8375e238
b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c  d5713e8ee520541cc6643f2ac3a46d1fcbbf2385993f0ee04f08ba3e4d3dbb58
/var/lib/docker/containers # cd b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c/
/var/lib/docker/containers/b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c # ls
b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c-json.log  hosts
checkpoints                                                                mounts
config.v2.json                                                             resolv.conf
hostconfig.json                                                            resolv.conf.hash
hostname
/var/lib/docker/containers/b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c # cat b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c-
json.log
{"log":"/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration\n","stream":"stdout","time":"2022-03-26T10:00:57.1224471Z"}
{"log":"/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/\n","stream":"stdout","time":"2022-03-26T10:00:57.1224769Z"}
{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh\n","stream":"stdout","time":"2022-03-26T10:00:57.1234226Z"}
{"log":"10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf\n","stream":"stdout","time":"2022-03-26T10:00:57.1297068Z"}
{"log":"10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf\n","stream":"stdout","time":"2022-03-26T10:00:57.1363518Z"}
{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh\n","stream":"stdout","time":"2022-03-26T10:00:57.1363804Z"}
{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh\n","stream":"stdout","time":"2022-03-26T10:00:57.1396303Z"}
{"log":"/docker-entrypoint.sh: Configuration complete; ready for start up\n","stream":"stdout","time":"2022-03-26T10:00:57.141245Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: using the \"epoll\" event method\n","stream":"stderr","time":"2022-03-26T10:00:57.1452507Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: nginx/1.21.6\n","stream":"stderr","time":"2022-03-26T10:00:57.145275Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) \n","stream":"stderr","time":"2022-03-26T10:00:57.145292Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: OS: Linux 5.10.104-linuxkit\n","stream":"stderr","time":"2022-03-26T10:00:57.1453041Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576\n","stream":"stderr","time":"2022-03-26T10:00:57.1453242Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: start worker processes\n","stream":"stderr","time":"2022-03-26T10:00:57.1453422Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: start worker process 32\n","stream":"stderr","time":"2022-03-26T10:00:57.1453564Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: start worker process 33\n","stream":"stderr","time":"2022-03-26T10:00:57.1456171Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: start worker process 34\n","stream":"stderr","time":"2022-03-26T10:00:57.1456747Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: start worker process 35\n","stream":"stderr","time":"2022-03-26T10:00:57.1458645Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: start worker process 36\n","stream":"stderr","time":"2022-03-26T10:00:57.1460188Z"}
{"log":"2022/03/26 10:00:57 [notice] 1#1: start worker process 37\n","stream":"stderr","time":"2022-03-26T10:00:57.1461863Z"}
/var/lib/docker/containers/b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c #
/var/lib/docker/containers/b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c #
/var/lib/docker/containers/b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c #
/var/lib/docker/containers/b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c # ls
b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c-json.log  hosts
checkpoints                                                                mounts
config.v2.json                                                             resolv.conf
hostconfig.json                                                            resolv.conf.hash
hostname
/var/lib/docker/containers/b371f01786cc5a07acaeb484a7163a72d99bd947cfeb7d0b1ec17a470091b76c #

도커에서 로깅 드라이버를 다양하게 지원하고 있으며 주로 json-file 드라이버를 많이 사용한다.

로그의 경우 계속적으로 한파일에 쌓이게 되면 문제가 되기에 아래와 같이 명령어를 통해 컨테이너 단위로 로그 용량을 제한할 수 있으며,

도커 엔진에서 기본 설정을 진행할 수도 있다.

아래는 컨테이너 상에서 로그 관련 설정을 진행하는 옵션이며 로깅 드라이버 json-file 을 이용하여 json형식으로 저장하고 하나의 로그 파일은 3mb, 로그파일은 최대 5개를 만들도록 설정 하겠다는 의미이다.

$ docker run -d \
--log-driver=json-file \
--log-opt max-size=3m \
--log-opt max-file=5 \
nginx

로깅 드라이버를 활용하면 중앙화된 로그 시스템으로 전달하여 로그 분석도 가능하니 참고 하여 활용하도록 한다.

- 이미지 출처 : https://velog.io/@ghdud0503/Docker-%EA%B8%B0%EC%B4%88-9-%EB%A1%9C%EA%B7%B8

728x90

'ETC' 카테고리의 다른 글

[Docker] 명령어 정리  (0) 2022.07.16
5분 안에 구축하는 LDAP  (0) 2022.04.23
[Docker] 볼륨  (0) 2022.03.26
[Docker] 네트워크  (0) 2022.03.26
[Docker] 설정 방법 및 실행중인 컨테이너 접속  (0) 2022.03.25
Comments