본문 바로가기
Web/Infra

도커 컨테이너의 로그 조회 및 저장

by EricJeong 2020. 9. 13.

도커의 로깅

도커 컨테이너 내부에서 발생하는 로그는 다양한 형태로 조회하고 저장할 수 있습니다. 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

 

시작하세요! 도커/쿠버네티스

본서는 도커를 처음 접하는 개발자를 위한 도커 컨테이너와 이미지의 기본적인 개념을 먼저 설명한 뒤, 도커 컴포즈와 스웜 모드를 통해 컨테이너 애플리케이션을 YAML 파일로 작성하고 클러스��

www.yes24.com

docs.docker.com/config/containers/logging/configure/

 

Configure logging drivers

Docker includes multiple logging mechanisms to help you get information from running containers and services. These mechanisms are called logging drivers. Each Docker daemon has a default logging driver, which...

docs.docker.com

 

댓글