안녕하세요 펭귄 교수입니다.
도커 컨테이너를 사용하면서 중요한 부분 중 하나가 모니터링입니다.
컨테이너가 제대로 작동하고 있는지, 리소스 사용량은 적절한지, 혹시 발생하는 에러는 없는지 등을 주기적으로 모니터링하는 것은 시스템 안정성을 유지하고 문제를 조기에 발견하는 데 매우 중요합니다.
이번 포스팅에서는 도커 컨테이너 모니터링의 필요성과 이를 구현할 수 있는 다양한 도구와 방법을 소개하겠습니다.
1. 도커 컨테이너 모니터링의 필요성
도커 컨테이너는 경량화된 애플리케이션 환경을 제공하여 효율적인 배포와 관리가 가능합니다. 하지만, 애플리케이션이 여러 개의 컨테이너로 분리되면 각 컨테이너의 상태를 실시간으로 모니터링하는 것이 매우 중요해집니다.
모니터링을 통해 얻을 수 있는 이점은 다음과 같습니다:
- 리소스 사용량 파악: CPU, 메모리, 네트워크 사용량을 모니터링하면 병목 현상을 찾아내거나 리소스 부족 문제를 미리 감지할 수 있습니다.
- 문제 조기 발견: 컨테이너의 로그와 메트릭을 통해 발생하는 오류나 예외 상황을 빠르게 확인할 수 있습니다.
- 안정성 보장: 실시간 모니터링을 통해 문제가 발생하기 전에 시스템을 유지 보수하거나 자동 복구 기능을 설정할 수 있습니다.
2. 기본 도커 명령어를 이용한 모니터링
도커는 자체적으로 간단한 모니터링 명령어를 제공하며, 이를 통해 컨테이너의 기본적인 상태와 리소스 사용량을 확인할 수 있습니다.
2-1. docker stats
docker stats 명령어는 실행 중인 모든 컨테이너의 실시간 리소스 사용량을 표시합니다. CPU, 메모리, 네트워크, 블록 IO 등의 정보를 확인할 수 있습니다.
docker stats
출력 예시는 다음과 같습니다:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
f1c4e26a1127 my-container 0.50% 100MiB / 500MiB 20.00% 1.2kB / 2kB 1MB / 1MB 5
이 명령어는 컨테이너의 리소스 상태를 실시간으로 보여주며, 사용량이 지나치게 높은 컨테이너를 파악할 수 있습니다.
2-2. docker logs
docker logs 명령어를 사용하면 컨테이너 내부에서 발생한 로그를 실시간으로 확인할 수 있습니다. 애플리케이션에서 발생한 에러나 경고를 추적할 수 있습니다.
docker logs my-container
- f 플래그를 사용하여 실시간으로 로그를 추적할 수도 있습니다.
docker logs -f my-container
3. 외부 모니터링 도구를 이용한 컨테이너 모니터링
기본적인 도커 명령어로는 실시간 모니터링이나 복잡한 인프라를 관리하는 데 한계가 있습니다. 따라서 전문적인 모니터링 도구를 사용하여 더 정밀한 데이터를 수집하고, 시각화하며, 알림을 설정할 수 있습니다.
3-1. Prometheus & Grafana
Prometheus는 강력한 모니터링 및 경고 시스템으로, 도커와 연동하여 각종 메트릭을 수집할 수 있습니다. 수집된 메트릭은 Grafana를 통해 시각화할 수 있습니다.
3-1-1. Prometheus 설정
우선, Prometheus의 prometheus.yml 설정 파일을 다음과 같이 작성합니다.
global:
scrape_interval: 5s
scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['localhost:9323']
이 설정 파일은 localhost:9323 포트에서 도커 메트릭을 수집하도록 구성한 예시입니다. 도커 메트릭을 수집하려면 docker-container-exporter와 같은 Prometheus exporter를 설치해야 합니다.
참조 : https://hub.docker.com/r/prom/prometheus
https://hub.docker.com/r/prom/prometheus
hub.docker.com
3-1-2. Grafana 대시보드
Prometheus로 수집한 데이터를 Grafana에서 시각화할 수 있습니다. Grafana는 다양한 대시보드를 제공하며, 도커 컨테이너의 상태, 리소스 사용량, 네트워크 트래픽 등을 그래프로 보여줄 수 있습니다.
다음은 Grafana 대시보드를 설정하는 예입니다.
- Grafana 설치 후 localhost:3000에 접속합니다.
- Prometheus를 데이터 소스로 추가합니다.
- 새로운 대시보드를 생성하고, CPU, 메모리, 네트워크 등 다양한 메트릭을 시각화합니다.
참조 : https://hub.docker.com/r/grafana/grafana
https://hub.docker.com/r/grafana/grafana
hub.docker.com
3-2. cAdvisor
cAdvisor는 도커 컨테이너의 리소스 사용량을 실시간으로 모니터링할 수 있는 도구입니다. cAdvisor는 간편하게 컨테이너의 CPU, 메모리, 네트워크 사용량을 확인하고, 이를 그래픽으로 시각화합니다.
참조 : https://hub.docker.com/r/google/cadvisor
https://hub.docker.com/r/google/cadvisor
hub.docker.com
3-2-1. cAdvisor 설치
cAdvisor를 도커 컨테이너로 실행할 수 있습니다.
docker run \\
--volume=/:/rootfs:ro \\
--volume=/var/run:/var/run:ro \\
--volume=/sys:/sys:ro \\
--volume=/var/lib/docker/:/var/lib/docker:ro \\
--publish=8080:8080 \\
--detach=true \\
--name=cadvisor \\
google/cadvisor:latest
위 명령어를 실행하면 localhost:8080에서 cAdvisor 대시보드를 확인할 수 있습니다.
3-2-2. cAdvisor 모니터링 예시
cAdvisor 대시보드는 CPU, 메모리, 네트워크 사용량을 실시간으로 표시하며, 각각의 도커 컨테이너에 대한 세부적인 정보를 제공합니다.
3-3. ELK Stack (Elasticsearch, Logstash, Kibana)
ELK Stack은 로그와 메트릭 데이터를 수집하고 분석할 수 있는 도구입니다. 도커 로그를 수집하여 실시간 분석하거나, 저장하여 이후 분석에 사용할 수 있습니다.
3-3-1. Logstash 설정
Logstash를 사용하여 도커 로그를 수집할 수 있습니다. 다음은 Logstash의 설정 예시입니다.
input {
docker {
endpoint => "unix:///var/run/docker.sock"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "docker-logs"
}
}
이 설정 파일은 도커 컨테이너의 로그를 수집하여 Elasticsearch에 저장하는 예입니다.
3-3-2. Kibana 대시보드
수집된 로그 데이터를 Kibana에서 시각화하여, 실시간 로그 모니터링과 분석을 할 수 있습니다. Kibana를 통해 필터링, 검색, 분석 기능을 활용해 애플리케이션의 문제를 빠르게 파악할 수 있습니다.
4. 도커 스웜과 쿠버네티스에서의 모니터링
단일 컨테이너보다는 더 복잡한 환경에서 모니터링을 해야 할 때, 도커 스웜이나 쿠버네티스와 같은 오케스트레이션 도구를 사용하여 대규모 컨테이너 클러스터를 관리합니다. 이 경우에도 Prometheus, Grafana, ELK 스택을 사용하여 모니터링할 수 있지만, 스웜과 쿠버네티스는 추가적인 모니터링 기능을 내장하고 있습니다.
4-1. 도커 스웜 모니터링
도커 스웜은 docker service ls와 같은 명령어를 통해 서비스 상태를 확인할 수 있습니다. 또한 스웜 모드에서는 여러 노드에 분산된 컨테이너를 모니터링할 수 있으며, 각 서비스의 상태와 복제본 수를 자동으로 조정할 수 있습니다.
4-2. 쿠버네티스 모니터링
쿠버네티스(Kubernetes)는 더 복잡한 클러스터 환경에서 컨테이너를 관리하는데, 내장된 모니터링 도구인 kube-state-metrics와 Heapster를 사용하여 클러스터의 상태를 모니터링할 수 있습니다. 또한, 쿠버네티스와 Prometheus, Grafana를 통합하여 더 심층적인 모니터링을 할 수 있습니다.
자세한 사항은 쿠버네티스 공식 홈페이지를 보시는 걸 추천드립니다.
쿠버네티스란 무엇인가?
쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하
kubernetes.io
5. 마무리
컨테이너 기반의 애플리케이션은 확장성과 유연성이 뛰어나지만, 제대로 운영되기 위해서는 모니터링이 필수입니다.
기본적인 도커 명령어에서부터 Prometheus, Grafana, ELK Stack 같은 전문 도구까지 다양한 모니터링 방법을 사용하여 안정적인 운영을 보장할 수 있습니다.
'Docker > Docker 강의' 카테고리의 다른 글
[Docker 강의 17편] 도커와 CI/CD 파이프 라인 (0) | 2024.10.02 |
---|---|
[Docker 강의 16편] 도커 로그 관리 (0) | 2024.10.01 |
[Docker 강의 14편] 도커 컨테이너 자동화 (0) | 2024.09.30 |
[Docker 강의 13편] 도커로 개발 환경 설정하기 (0) | 2024.09.29 |
[Docker 강의 12편] 도커 컨테이너와 포트 포워딩 (0) | 2024.09.29 |