[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
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
fluentd는 각종 로그를 수집하고 저장할 수 있는 기능을 제공하는 오픈소스 툴입니다.
도커 기본 로깅이 json 포맷 인점, 수집된 데이터를 AWS S3, 하둡, Mongo DB등 다양한 저장소에
저장할 수 있다는 장점이있습니다.
www.yes24.com/Product/Goods/84927385
'개발' 카테고리의 다른 글
WebP에 대해 알아보자 (1) | 2021.04.28 |
---|---|
[Docker] 5. 컨테이너 자원 할당 제한 (0) | 2020.09.20 |
[Docker] 2. 도커 볼륨 (0) | 2020.09.06 |
[Docker] 1. Docker 개념 및 소개 (0) | 2020.08.30 |
[Linux] Swap Space를 통해 가상메모리 추가하기 (0) | 2020.08.08 |