소개
Docker 는 애플리케이션을 컨테이너화하는 데 널리 사용되는 플랫폼이 되었지만, 이러한 컨테이너의 로깅을 관리하는 것은 건강하고 효율적인 Docker 환경을 유지하는 데 중요한 측면일 수 있습니다. 이 튜토리얼에서는 기본적인 기술부터 더 고급 기술까지 Docker 컨테이너의 로깅을 구성하는 과정을 안내하여 애플리케이션의 동작에 대한 더 나은 가시성과 제어를 얻을 수 있도록 도와드립니다.
Docker 는 애플리케이션을 컨테이너화하는 데 널리 사용되는 플랫폼이 되었지만, 이러한 컨테이너의 로깅을 관리하는 것은 건강하고 효율적인 Docker 환경을 유지하는 데 중요한 측면일 수 있습니다. 이 튜토리얼에서는 기본적인 기술부터 더 고급 기술까지 Docker 컨테이너의 로깅을 구성하는 과정을 안내하여 애플리케이션의 동작에 대한 더 나은 가시성과 제어를 얻을 수 있도록 도와드립니다.
Docker 는 개발자가 일관되고 재현 가능한 방식으로 애플리케이션을 패키징하고 배포할 수 있도록 하는 인기 있는 컨테이너화 플랫폼입니다. Docker 컨테이너에서 애플리케이션을 실행할 때 로깅은 모니터링 및 문제 해결에 중요한 부분입니다. Docker 는 컨테이너화된 애플리케이션의 로깅을 구성 및 관리하기 위한 여러 가지 옵션을 제공합니다.
Docker 는 컨테이너에서 생성된 로그를 처리하기 위해 로깅 드라이버를 사용합니다. 로깅 드라이버는 로그가 어떻게 저장되고 액세스되는지 결정합니다. Docker 는 다음과 같은 다양한 로깅 드라이버를 지원합니다.
json-file: 호스트 파일 시스템에 JSON 형식으로 로그를 저장하는 기본 로깅 드라이버입니다.syslog: syslog 서버로 로그를 전송합니다.journald: systemd 저널로 로그를 전송합니다.gelf: Graylog Extended Log Format(GELF) 엔드포인트로 로그를 전송합니다.fluentd: Fluentd 서버로 로그를 전송합니다.awslogs: Amazon CloudWatch Logs 로 로그를 전송합니다.splunk: Splunk 엔터프라이즈 또는 Splunk 클라우드 인스턴스로 로그를 전송합니다.로깅 드라이버의 선택은 애플리케이션 요구 사항, 실행 중인 인프라 및 로그 관리 및 분석에 사용하는 도구에 따라 달라집니다.
실행 중인 컨테이너의 로그에 액세스하려면 docker logs 명령어를 사용할 수 있습니다. 이 명령어를 사용하면 특정 컨테이너의 로그를 보고, 실시간으로 로그를 따라가고, 다양한 기준에 따라 로그를 필터링할 수 있습니다.
## 컨테이너 로그 보기
docker logs my-container
## 실시간 로그 추적
docker logs -f my-container
## 마지막 10줄의 로그 보기
docker logs --tail 10 my-container
기본적으로 docker logs 명령어는 컨테이너에 지정된 로깅 드라이버에서 로그를 검색합니다. json-file 드라이버를 사용하는 경우 로그가 호스트 파일 시스템에 저장되며 호스트에서 직접 액세스할 수도 있습니다.
Docker 컨테이너의 로깅 드라이버를 여러 가지 방법으로 구성할 수 있습니다.
전체 Docker 데몬의 로깅 드라이버 설정:
## Docker 데몬 구성 파일 편집
## 로깅 드라이버 구성 추가
## Docker 데몬 재시작
특정 컨테이너의 로깅 드라이버 설정:
## 특정 로깅 드라이버로 컨테이너 실행
docker run -d --log-driver=syslog --log-opt syslog-address=tcp://192.168.1.100:514 my-app
Docker 서비스의 로깅 드라이버 설정:
## 특정 로깅 드라이버로 Docker 서비스 생성
docker service create --log-driver=fluentd --log-opt fluentd-address=192.168.1.100:24224 my-service
로깅 드라이버에 따라 로깅 동작을 사용자 지정하기 위한 다양한 옵션을 구성할 수 있습니다. 일반적인 옵션으로는 다음이 있습니다.
max-size: 로그 파일이 회전되기 전 최대 크기.max-file: 유지할 최대 로그 파일 수.syslog-address: syslog 서버의 주소.fluentd-address: Fluentd 서버의 주소.awslogs-group: CloudWatch Logs 그룹의 이름.splunk-url: Splunk 인스턴스의 URL.이러한 옵션은 컨테이너를 실행하거나 서비스를 생성할 때 --log-opt 플래그를 사용하여 설정할 수 있습니다.
로깅 드라이버 및 옵션을 구성한 후 적절한 도구를 사용하여 로깅된 데이터를 확인할 수 있습니다. 예를 들어, json-file 드라이버를 사용하는 경우 호스트 파일 시스템에서 직접 로그를 확인할 수 있습니다. Syslog 또는 Fluentd 와 같은 원격 로깅 서비스를 사용하는 경우 해당 관리 인터페이스를 통해 로그에 액세스해야 합니다.
Fluentd 는 Docker 컨테이너를 포함한 다양한 소스의 로그를 집계하고 처리할 수 있는 인기 있는 오픈소스 데이터 수집기입니다. Docker 와 Fluentd 를 사용하려면 다음 단계를 따르세요.
호스트 머신에 Fluentd 설치:
## Ubuntu 22.04 에 Fluentd 설치
sudo apt-get update
sudo apt-get install -y td-agent
Fluentd 를 구성하여 Docker 컨테이너의 로그 수집:
## Fluentd 구성 파일 편집
sudo vim /etc/td-agent/td-agent.conf
## 다음 구성 추가
<source>
@type docker
tag docker.*
dump_stdin true
</source>
<match docker.**>
@type forward
send_timeout 60s
recover_wait 10s
heartbeat_interval 1s
hard_timeout 60s
<server>
host 192.168.1.100
port 24224
</server>
</match>
Fluentd 서비스 재시작:
sudo systemctl restart td-agent
fluentd 로깅 드라이버로 Docker 컨테이너 실행:
docker run -d --log-driver=fluentd --log-opt fluentd-address=192.168.1.100:24224 my-app
이 설정을 통해 Docker 컨테이너의 로그가 Fluentd 서버로 전달되어 추가적인 처리, 분석 및 저장이 가능합니다.
Docker 로그를 Elasticsearch 및 Kibana 와 통합하는 것도 또 다른 고급 로깅 기법입니다. Elasticsearch 는 강력한 검색 및 분석 엔진이고, Kibana 는 로깅된 데이터를 시각화하고 분석하기 위한 사용자 친화적인 인터페이스를 제공합니다.
Docker 로그를 Elasticsearch 및 Kibana 와 통합하려면 logstash 또는 elastic 로깅 드라이버를 사용할 수 있습니다. logstash 드라이버를 사용하는 예시는 다음과 같습니다.
Docker Compose 를 사용하여 Elasticsearch 및 Kibana 스택 실행:
version: "3"
services:
elasticsearch:
image: elasticsearch:7.9.2
environment:
- discovery.type=single-node
kibana:
image: kibana:7.9.2
ports:
- 5601:5601
logstash:
image: logstash:7.9.2
command: logstash -f /etc/logstash/conf.d/logstash.conf
volumes:
- ./logstash.conf:/etc/logstash/conf.d/logstash.conf
다음 구성으로 logstash.conf 파일 생성:
input {
docker {
host => "unix:///var/run/docker.sock"
tags => ["docker"]
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "docker-%{+YYYY.MM.dd}"
}
}
Elasticsearch, Kibana, Logstash 스택 실행:
docker-compose up -d
logstash 로깅 드라이버로 Docker 컨테이너 실행:
docker run -d --log-driver=logstash --log-opt logstash-address=logstash:5000 my-app
이 설정을 통해 Docker 컨테이너의 로그가 Logstash 로 전달되고, Logstash 는 이를 Elasticsearch 로 전송합니다. 그런 다음 Kibana 를 사용하여 로깅된 데이터를 시각화하고 분석할 수 있습니다.
이 종합 가이드에서는 Docker 컨테이너의 로깅을 기본 설정부터 고급 기법까지 구성하는 방법을 배웁니다. 이 튜토리얼을 마치면 Docker 환경의 로깅 기능을 최적화하는 방법, 문제 해결, 애플리케이션 모니터링, 그리고 잘 정돈되고 효율적인 컨테이너화된 인프라를 유지 관리하는 방법에 대한 포괄적인 이해를 얻게 될 것입니다.