컨테이너 실시간 모니터링 방법
도커 컨테이너가 사용하는 CPU, 메모리와 같은 자원 사용량은 운영 환경에서 중요한 지표임.
이 지표를 실시간으로 모니터링하여 병목 현상을 사전에 파악하거나, 장애 상황을 빠르게 진단할 수 있음.
docker stats 명령어 활용
1. 개요
도커는 기본적으로 docker stats라는 CLI 명령을 제공함.
이 명령을 사용하면 실행 중인 모든 컨테이너의 CPU, 메모리, 네트워크, 블록 I/O 사용량을 실시간으로 볼 수 있음.
2. 사용 방법
docker stats
별다른 인자가 없으면, 모든 컨테이너의 상태를 실시간으로 표시함.
특정 컨테이너만 보고 싶으면, 컨테이너 이름이나 ID를 지정함.
docker stats <container_name_or_id> ...
3. 출력 정보
CONTAINER ID: 컨테이너 ID
NAME: 컨테이너 이름
CPU %: 호스트에서 사용 가능한 CPU 자원 중 해당 컨테이너가 사용 중인 비율
MEM USAGE / LIMIT: 컨테이너가 사용 중인 메모리와 설정된 메모리 제한
MEM %: 실제 메모리 제한 대비 사용 비율
NET I/O: 네트워크 트래픽 입출력
BLOCK I/O: 블록 디바이스(디스크) 입출력
PIDS: 컨테이너 내 프로세스 ID 개수
4. 장단점
장점: 별도 설치 없이 즉시 사용 가능, Docker CLI 환경에서 빠르게 확인 가능
단점은 다음과 같음.
장기 모니터링/이력 추적에는 적합하지 않음.
대시보드나 알람 기능이 없음.
CPU/메모리 외의 세부 지표(예: GPU 사용량, 세부 프로세스별 리소스 등)는 확인 제한.
cgroups 직접 모니터링
1. 개요
리눅스 커널의 cgroups는 Docker 컨테이너 리소스 제한 및 모니터링의 핵심 기술임.
모든 컨테이너는 cgroup 폴더 구조(/sys/fs/cgroup/) 하위에 각각 디렉터리가 생기며, CPU/메모리 사용량 등의 지표를 파일 형태로 기록함.
2. 위치 예시
CPU 관련:
/sys/fs/cgroup/cpu/docker/<container_id>/cpuacct.usage (CPU 사용량 누적값)
/sys/fs/cgroup/cpuacct/docker/<container_id>/cpuacct.stat (user/system 사용 비율 등)
메모리 관련:
/sys/fs/cgroup/memory/docker/<container_id>/memory.usage_in_bytes
/sys/fs/cgroup/memory/docker/<container_id>/memory.stat
실제 경로는 리눅스 배포판/도커 버전/사용 중인 cgroup 버전(v1, v2)에 따라 약간씩 다를 수 있음.
3. 모니터링 방법
cat, tail -f 명령 등으로 직접 읽거나, 스크립트/애플리케이션에서 주기적으로 폴링(polling)하여 값 수집.
cgroup V2에서는 /sys/fs/cgroup/<scope>/<container_id> 형태로 구조가 단순화되었으며, 서브 시스템이 통합되어 있음.
4. 장단점
장점:
Docker를 거치지 않고도 리얼타임에 가까운 세부 지표 확인 가능.
커스텀 모니터링 솔루션(예: 사용자 지정 스크립트) 구성 가능.
단점:
직접 파싱, 시각화, 알림 시스템을 모두 구성해야 함.
구조가 복잡하고 cgroup 버전에 따라 경로와 파일이 달라질 수 있음.
cAdvisor
1. 개요
Google에서 개발한 오픈소스 컨테이너 리소스 수집 도구임.
Docker, rkt 등 리눅스 컨테이너의 CPU, 메모리, 디스크, 네트워크 사용량을 실시간으로 수집하고, 내장 웹 UI로 시각화함.
Prometheus 등 모니터링 툴에 지표를 내보낼(export) 수 있어, 대시보드 구축에 용이함.
2. 설치 및 실행 예시
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run/docker.sock:/var/run/docker.sock:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
위 명령으로 cAdvisor를 실행하면, 호스트 8080 포트에서 cAdvisor 웹 UI에 접속할 수 있음.
3. 특징
자동 발견: 실행 중인 모든 Docker 컨테이너를 자동으로 찾아 지표를 수집
시각화: Web UI로 바로 각 컨테이너의 실시간 및 과거 그래프 확인 가능
모니터링 연동: Prometheus 스크래핑 엔드포인트(/metrics)를 제공하므로, Prometheus + Grafana와 연동하여 성능 대시보드를 쉽게 구성 가능
4. 장단점
장점:
추가 설정이 비교적 간단, 실시간 지표 + 기본 그래프 제공
Prometheus/Grafana와 궁합이 좋아서 엔터프라이즈 환경에서도 많이 사용
단점:
장기 로그 보관, 알림/이벤트 트리거 기능은 별도의 솔루션을 연계해야 함
고도화된 사용자 관리, 멀티 클러스터 관리 등 기능은 부족
Prometheus + Grafana 연동
1. 개요
Prometheus: 시계열 데이터베이스(Time-series DB) 기반 모니터링 툴. Pull 방식으로 메트릭을 수집.
Grafana: 다양한 데이터 소스(Prometheus 등)로부터 메트릭을 시각화하는 대시보드 툴.
도커와 잘 연동하여, 컨테이너별 CPU, 메모리, 네트워크, 디스크 I/O 등을 자세히 추적할 수 있음.
2. 구성 방법
cAdvisor 또는 node_exporter 사용해 컨테이너별 및 호스트 리소스 지표를 노출.
Prometheus가 해당 지표를 Pull (스크래핑)
Grafana에서 Prometheus를 데이터 소스로 등록 후 대시보드 구성.
3. 예시 설정 (Prometheus prometheus.yml)
scrape_configs:
- job_name: cadvisor
static_configs:
- targets: ['<cadvisor_host>:8080']
cadvisor_host는 cAdvisor가 배포된 호스트 주소 또는 Docker 컨테이너 네트워크 주소입니다.
4. 특징
Alertmanager와 연계하여 특정 임계치(예: CPU 90% 초과, 메모리 80% 초과 등)에서 알림(이메일, Slack, PagerDuty 등)을 보낼 수 있음.
마이크로서비스 환경(쿠버네티스, Swarm, Mesos 등)에서 많이 사용되는 표준적인 모니터링 스택임.
상용/클라우드 모니터링 솔루션
1. Datadog
Datadog 에이전트를 호스트에 설치하면 Docker 컨테이너별 메트릭(CPU, 메모리, 디스크, 네트워크)을 자동 수집 및 대시보드/알림 제공.
쿠버네티스, ECS, Swarm 등에서도 간편하게 연동 가능.
2. New Relic
New Relic Infrastructure 에이전트를 통해 컨테이너 모니터링 가능.
애플리케이션 레벨 트레이싱(APM)까지 포함하여 풀스택 모니터링 가능.
3. Sysdig
커널 레벨 이벤트를 수집/분석하여 컨테이너별 리소스부터 보안 이벤트까지 광범위하게 추적 가능.
Sysdig Monitor, Sysdig Secure 등의 상용 제품군이 있음.
4. AWS CloudWatch Container Insights / Azure Monitor / GCP Operations
AWS, Azure, GCP 등 퍼블릭 클라우드 환경에서는 해당 클라우드 제공 모니터링 서비스를 이용해 도커 컨테이너(EC2, ECS, AKS, GKE 등) 지표를 통합 관리 가능.
이벤트 기반 확장 및 자동화
1. 실시간 지표 기반 컨테이너 오토스케일링
컨테이너 오케스트레이션 도구(예: Kubernetes) 환경에서 Horizontal Pod Autoscaler(HPA) 등을 활용해 CPU/메모리가 특정 임계치를 초과하면 컨테이너를 자동으로 늘리는 구조를 구성할 수 있음.
Docker Swarm도 유사한 방식(스택/서비스 수준)이 가능하지만, Kubernetes에 비해 자동화 기능은 상대적으로 제한적.
2. 이벤트/알림 기반 운영
Prometheus Alertmanager, Datadog Alerts, Grafana Alerts, CloudWatch Alarms 등을 통해 CPU, 메모리 사용량 임계치 알림 구현.
장애 발생 시 스크립트를 트리거해 자동 복구(heal) 시도하거나, 로그 수집 장치와 연동하여 디버깅 자료를 모아둘 수 있음.
정리
1. docker stats
가장 빠르고 간단한 방법.
CLI에서 즉시 확인 가능.
다만 장기 모니터링, 알림, 대시보드 기능은 부족.
2. cgroups 직접 모니터링
/sys/fs/cgroup/ 파일 시스템에서 세부 지표 획득 가능.
스크립트나 맞춤 솔루션 구성 시 유연하게 활용.
3. cAdvisor
쉽게 배포 가능한 오픈소스 솔루션.
웹 UI + Prometheus 연동 지원.
컨테이너별 실시간 그래프 제공.
4. Prometheus + Grafana
모니터링 대시보드, 알림, 장기 데이터 저장 등 엔터프라이즈급 환경 구성 가능.
쿠버네티스, 마이크로서비스와 결합 시 사실상 표준 모니터링 스택.
5. 클라우드/상용 솔루션
Datadog, New Relic, Sysdig, AWS CloudWatch 등.
에이전트를 설치해 컨테이너 리소스 정보를 자동 수집하고, 손쉽게 대시보드/알림/트레이싱까지 연동 가능.
간단한 실시간 확인이 필요한 경우에는 docker stats 혹은 cAdvisor가 충분하고, 대규모 환경에서 장기 모니터링 + 알림 + 대시보드가 필요한 경우에는 Prometheus/Grafana 또는 상용 솔루션 도입을 고려하는 것이 일반적임.
각 환경(온프레미스, 클라우드, 규모)에 맞게 솔루션을 선택하여 구현하면, 도커 컨테이너의 CPU/메모리 사용량을 효율적으로 모니터링하고, 장애 대응 및 리소스 최적화에 큰 도움을 얻을 수 있음.
'Operating System > Docker' 카테고리의 다른 글
[Docker] 도커의 파일시스템 (0) | 2025.01.25 |
---|---|
[Docker] 도커 볼륨 구조 (1) | 2025.01.24 |
[Docker] 도커 컨테이너 자원과 로컬의 자원 (0) | 2025.01.24 |
[Docker] Dockerfile 작성하는 방법 (0) | 2025.01.24 |
[Docker] 도커와 도커의 네트워크 (0) | 2024.06.08 |