도커의 로깅
도커 컨테이너 내부에서 발생하는 로그는 다양한 형태로 조회하고 저장할 수 있습니다. StdIn, StdOut, StdErr 등의 표준 입출력을 Json File로 저장할 수 있으며 다른 서버에 로그 파일을 저장하기도 합니다. 또한 파일로 저장하지 않고 데이터베이스인 ElasticSearch 또는 MongoDB와 같은 데이터베이스에 저장할 수도 있습니다. 도커에서는 로깅 드라이버를 사용하여 로그를 남기도록 설정하고, 이 로깅 드라이버를 교체함으로써 다양한 로그 저장기법을 지원합니다.
docker logs
도커에서 기본으로 사용하는 json-file 로깅 드라이버와 journald 로깅 드라이버를 사용한다면 도커의 명령어중 docker logs 명령어를 사용할 수 있습니다. |
docker logs는 편리한 명령어입니다. 실시간으로 로그를 조회할 수 있으며 언제, 어느때에 이 로그가 발생했는지 추가 정보도 조회할 수 있습니다.
busy-box 컨테이너를 만들어보고 docker logs를 사용하는 방법을 간단하게 알아보겠습니다. 우선 컨테이너를 만들어주세요.
docker run --name test -d busybox sh -c "while true; do $(echo date); sleep 1; done"
이 컨테이너는 1초에 한번씩 현재 시간을 출력합니다. 컨테이너의 출력을 조회하기 위해 아래와 같이 조회할 수 있습니다.
$ docker logs test
Sun Sep 13 01:01:08 UTC 2020
Sun Sep 13 01:01:09 UTC 2020
Sun Sep 13 01:01:10 UTC 2020
Sun Sep 13 01:01:11 UTC 2020
Sun Sep 13 01:01:12 UTC 2020
....
이 옵션으로 로그를 조회한다면 컨테이너의 시작부터 현재까지 모든 로그를 조회하게 됩니다. 로그가 너무 많아서 보기 힘들다면 가장 마지막으로 남은 로그를 볼 수 있는 --tail 옵션을 사용할 수 있습니다. --tail [조회할 로그 로우 수] 문법으로 사용할 수 있습니다.
$ docker logs --tail 10 test
Sun Sep 13 01:11:39 UTC 2020
Sun Sep 13 01:11:40 UTC 2020
Sun Sep 13 01:11:41 UTC 2020
Sun Sep 13 01:11:42 UTC 2020
Sun Sep 13 01:11:43 UTC 2020
Sun Sep 13 01:11:44 UTC 2020
Sun Sep 13 01:11:45 UTC 2020
Sun Sep 13 01:11:46 UTC 2020
Sun Sep 13 01:11:47 UTC 2020
Sun Sep 13 01:11:48 UTC 2020
이처럼 사용할 수 있는 옵션들은 아래와 같습니다.
docker logs options
--tail [rows] | rows만큼 마지막 로그를 출력한다. 모든 로그를 출력하고싶다면 rows에 all을 입력하면 된다. |
--timestamps | 로그에 타임스탬프를 포함하여 출력한다. |
--details | 로그의 세부 정보를 함께 조회한다. |
--follow, -f | 로그를 일회성으로 출력하지 않고 계속해서 로그를 조회한다. 컨테이너에서 새로운 출력이 발생하면 추가로 로그 조회 명령어를 입력하지 않아도 로그를 볼 수 있다. |
--since | 특정 타임스탬프 이후 또는 상대시간 이후의 로그를 볼 수 있다 |
로깅 드라이버
json-file
별도의 로깅 드라이버를 지정하지 않는다면 json-file 로깅 드라이버를 사용합니다. 로그를 json파일 형식으로 저장합니다. 컨테이너 내부 출력이 많다면 json 파일의 크기가 계속해서 커지고, 별도 설정을 하지 않았다면 호스트의 남은 저장공간을 계속해서 사용하게 되니 주의하여야 합니다. --log-opt 옵션으로 로그파일의 최대 크기와 개수를 지정할 수 있습니다.
Fluentd
fluentd는 로그를 수집 및 저장하는 오픈소스 도구입니다. 도커 엔진에서는 fluentd를 통해 저장할 수 있는 공식 로깅 드라이버를 제공합니다. 도커 서버에서 발생하는 로그를 fluentd서버로 전송하고, fluentd 서버는 지정된 저장소 (MongoDB 등)으로 로그를 전송합니다.
References
http://www.yes24.com/Product/Goods/84927385
docs.docker.com/config/containers/logging/configure/
'Web > Infra' 카테고리의 다른 글
[Kubernetes] Replica Set, 파드의 개수을 항상 유지 (0) | 2020.10.04 |
---|---|
[Kubernetes] Pod, 쿠버네티스의 가작 작은 단위 (0) | 2020.10.04 |
도커 네트워크의 구조 (0) | 2020.09.06 |
도커 볼륨의 종류 (2) | 2020.09.06 |
도커와 가상머신, 그리고 OS (1) | 2020.08.29 |
댓글