[Docker] 4. 컨테이너 로깅

sightstudio

·

2020. 9. 12. 23:17

또커

이번 장에서는 컨테이너에서 로깅환경에 대해 알아보겠습니다.

 

서비스 운영에서 로그 데이터 관리는 중요합니다. 컨테이너 환경에서도 중요하다는건 바뀌지 않습니다.

특히 도커와 같은 클러스터링 환경에서는 로그가 컨테이너별로 다르게 쌓이기 때문에 잘 관리하는 방법이 필요합니다.

 

도커는 컨테이너의 표준 출력(StdOut)에러 로그(StdErr)를 별도의 메타데이터 파일로 저장하여

이를 확인할 수 있게 해줍니다.

 

총 3가지의 로깅 방식이 있습니다.

 

1. json-file 로깅

docker run -d --name mysql             \
-e MYSQL_ROOT_PASSWORD=1234  \  
mysql:5.7

다음과 같이 실행했을 경우 정상적으로 컨테이너가 작동하지지만, 환경변수 없이 실행한다면 어떻게 될까요?

-e 부분 제거 하고 실행해보았습니다.

 

??

 

정상적으로 컨테이너가 작동한줄 알았지만 실제로 보니 작동하지 않았습니다.

우리는 컨테이너를 실행할때 백드라운드 형태로 실행했기 때문에 어떤 상황으로 컨테이너가

실행에 실패했는지 알 수 없습니다. 

 

이때 아래의 명령어를 통해 확인할 수 있습니다.

docker logs [컨테이너 이름]

당연히 --tail, -f 등을 통해 실시간으로 로그를 확인 할 수 있습니다.

환경변수를 명시하지 않아 컨테이너 구동 실패

 

그런데 왜 json-file 이냐하면, 이와 같은 내용의 로그들이

도커 내부( var/lib/docker/containers )에  저장되기 때문입니다.

 

필자는 MacOS 환경이기 때문에 VM에 접근해서 조회해야 했습니다.

MacOS 기준으로 vm terminal에 진입하는 방식은 아래를 확인해주세요.

 

gist.github.com/BretFisher/5e1a0c7bcca4c735e716abf62afad389

 

Getting a Shell in the Docker for Mac Moby VM

Getting a Shell in the Docker for Mac Moby VM. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

VM 내부로 들어가 확인해 보면 var/lib/docker/containers/{컨테이너 ID}/{컨테이너-ID}-json.log 안에

로그들이 저장된 것을 확인할 수 있었습니다.

 

 

로그 로테이션

로그 파일은 단순 저장하는 것 뿐 아니라 관리도 중요합니다. 

로그 파일이 쌓여서 호스트의 저장공간을 전부 사용하는걸 막기위해 --log-opt 옵션을 통해

로그파일의 최대 크기를 지정할 수 있습니다.

 

세부 옵션은 공식 도큐먼트에 있습니다.

docs.docker.com/engine/reference/commandline/logs/

 

2. syslog

syslog는 유닉스계열 로그 표준입니다. (리눅스에서 syslog를 포함한 메세지 생성은 전부 syslogd에서 관리합니다)

json 뿐 아니라 syslog로 로그를 보내 저장할 수 있습니다.

 

 

필자의 호스트 환경이 MacOS여서 다음과 같이 에러가 나지만 

HostOS가 리눅스 기반일 경우 syslog 저장 디렉토리에 로그가 저장됩니다.

 

예를 들어 Ubuntu 는 /var/log/syslog에, CentOS와 RHEL은 /var/log/messages에 저장됩니다.

rsyslog 옵션을 통해 remote 호스트로도 보낼 수 있습니다.

3. fluentd

www.fluentd.org/

 

fluentd는 각종 로그를 수집하고 저장할 수 있는 기능을 제공하는 오픈소스 툴입니다.

도커 기본 로깅이 json 포맷 인점, 수집된 데이터를 AWS S3, 하둡, Mongo DB등 다양한 저장소에

저장할 수 있다는 장점이있습니다.

 

 

www.yes24.com/Product/Goods/84927385

 

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

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

www.yes24.com