티스토리 뷰

인프라/Docker

도커 컨테이너 로그

_andy_ 2022. 2. 10. 14:00

컨테이너를 관리함에 있어 로그를 어떻게 관리할 것인가는 운영 측면에서 중요한 사항이다. 이번 글에서는 컨테이너의 로그를 확인하고, 호스트 운영체제에서 로그는 어디에 저장되는지, 로그 용량 관리 등에 대해 알아보고자 한다.

 

 

표준 출력 (STDOUT), 표준 에러 (STDERR)

애플리케이션에서 로그를 다룰 때, 일반적으로 해당 언어에서 지원하는 로그 프레임워크를 사용하여 표준 출력이나 ElasticSearch 와 같은 서비스와 연동하는 등 다양한 방법이 있는데, 도커 컨테이너에서는 STDOUT과 STDERR 로 내보내는 것을 표준으로 삼아야 한다. 도커가 해당 출력 로그를 쌓아 로깅 드라이버가 처리할 수 있도록 하는데, 로깅 드라이버를 다양하게 제공한다.

 

본인의 사용 목적에 맞는 드라이버를 선택하여 사용하면 되는데, 가장 기본적으로 사용되는 로그 드라이버는 json-file 이라는 형태로 json 파일로 구성되는 형태의 로그 파일이다. 컨테이너의 로그를 확인하는 방법은 다음과 같다.

# 전체 로그 확인
docker logs [container]

# 마지막 로그 10줄 확인
docker logs --tail 10 [container]

# 실시간 로그 스트림 확인
docker logs -f [container]

# 로그마다 타임스탬프 표시
docker logs -f -t [container]

 

다음 명령어로 도커 컨테이너를 하나 생성하고,

docker run -d nginx

 

다음과 같이 로그를 확인할 수 있다.

 

-f 옵션을 주면 다음과 같이 실시간 로그를 확인할 수 있다.

 

또한, -t 옵션을 주면 다음과 같이 타임스탬프를 포함한 로그를 확인할 수 있다.

 

 

호스트 운영체제의 로그 저장 경로

호스트 운영체제의 로그 저장은 로그 드라이버를 json-file 로 사용할 경우에만 유효하다. 이 경우 드라이버가 로그를 inline-json 형태의 파일로 남기는데, 기본 저장 경로는 다음과 같다.

/var/lib/docker/containers/[CONTAINER_ID]/[CONTAINER_ID]-json.log

 

해당 디렉토리로 진입하기 위해 먼저 다음 명령어를 이용하여 관리자 권한을 획득하고,

sudo su

 

위 경로로 접근하여 파일 리스트를 보면, 다음과 같이 json.log 파일을 볼 수 있다.

 

 

cat 명령어로 해당 파일을 열어 보면 다음과 같이 json 형식의 파일이 출력되며,

 

  • "log" 라는 키에는 실제 로그가 담겨져 있고,
  • "stream" 에는 stdout 또는 stderr 가 출력되었는지를 확인할 수 있고,
  • "time" 에는 해당 로그가 발생한 타임스탬프가 담겨져 있다.

 

 

로그 용량 제한하기

기본적으로 docker engine 을 운영체제에 설치하게 되면 로그 용량에 대한 제약이 설정되어 있지 않다. 이번 실습에서는 컨테이너 단위로 진행하겠지만, 사실 docker engine 단에서 설정할 수도 있다. 운영 환경에서는 필수로 설정해야 하는 옵션이기 때문에 반드시 기억하는 것이 좋다.

 

명령어는 다음과 같으며, 로그 드라이버를 설정하는 옵션과 로그 옵션을 전달하는 옵션이 있다.

# 한 로그 파일 당 최대 크기를 3MB로 제한하고, 최대 로그 파일 3개로 로테이팅한다.

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

 

 

로그 드라이버

지금까지 살펴본 것은 json-file 이라는 기본적인 로그 드라이버인데, 이 드라이버를 활용하면 위처럼 inline-json file 로 호스트 운영체제에 저장된다. 그렇게 되면 별도의 호스트 운영체제 상에 로그 에이전트를 설정할 수 있는데, FileBeat, LogStash, FluentD 와 같은 로그 에이전트를 설치하여 본인이 사용하는 중앙화된 로그 시스템 (ElasticSearch, Splunk, GrayLog, CloudWatch) 으로 컨테이너 로그를 쌓게 되면 중앙에서 컨테이너 로그를 확인할 수 있게 된다.

json-file 외에도 journald, Syslog, fluentd 등의 다양한 로그 드라이버를 Use Case 에 맞게 활용할 수 있다.

 

 

 

 

'인프라 > Docker' 카테고리의 다른 글

Dockerfile 문법 알아보기  (0) 2022.02.12
도커 이미지 빌드  (0) 2022.02.11
도커 컨테이너 네트워크  (0) 2022.02.09
도커 컨테이너 명령어 실행 (exec)  (0) 2022.02.08
도커 컨테이너 환경변수  (0) 2022.02.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함