Profile picture

[Docker / 모니터링] cAdvisor로 컨테이너 관리하기

JaehyoJJAng2025년 03월 11일

혹시! 반쪽짜리 모니터링을 하고 계신가요?

개인 프로젝트나 토이 프로젝트를 위해 홈서버를 운영하시는 분들이라면 한 번쯤 모니터링 시스템 구축을 고민해 보셨을 거에요!

많은 분들이 업계 표준 조합인 Prometheus + Grafana + Node Exporter를 사용해 멋진 대시보드를 구축해 사용하고 계시는데요! 저도 포함해서요.


서버의 CPU 사용량이나 메모리 사용률, 네트워크 트래픽을 한눈에 보며 흐뭇해하던 것도 잠시 ..

문득 이런 생각이 듭니다 ..!


CPU 사용량이 50%가 넘는데 .. 어떤 컨테이너가 이렇게 많이 쓰는거지?

네. 저는 홈서버에서 돌아가는 애플리케이션 90%는 모두 도커 컨테이너 기반입니다!

저는 컨테이너를 올렸다가 내리는 짓을 많이 한답니다 ..


Node Exporter는 우리에게 서버라는 건물 전체의 전기 사용량은 알려주지만, "A호실", "B호실" 처럼 각각의 컨테이너가 얼마만큼의 리소스를 사용하는지는 알려주지 않아요 ..!


바로 이 마지막 퍼즐을 채워주는 것이 오늘의 주인공 cAdvisor 입니다.
image


cAdvisor는 뭐에요 선생님!

cAdvisor(Container Advisor)는 Google이 개발한 오픈소스 컨테이너 모니터링 도구입니다! 역시 구글이죠잉? 쿠버네티스부터 ..

이름 그대로, 실행 중인 컨테이너의 리소스 사용량과 성능 데이터를 수집하고 분석 하는데 아주 특화된 놈입니다.


한 번 Node Exporter와 cAdvisor의 역할을 비교해볼까요?

구분 Node Exporter (서버 관리자) cAdvisor (컨테이너 분석가)
관찰 대상 호스트 머신 (서버 그 자체) 호스트 위에서 실행되는 모든 도커 컨테이너 ~
수집 정보 서버 전체의 CPU, 메모리, 디스크, 네트워크 등 개별 컨테이너의 CPU, 메모리, 네트워크, 파일시스템 I/O 등
하는 일 "건물 전체 전기 사용량이 80kWh 입니다" 띠딕 ... "101호가 50kWh, 102호가 25kWh 사용 중입니다!"

둘은 경쟁 관계가 아닌, 함께 일할 때 비로소 완벽한 그림을 완성하는 최고의 파트너입니다.

Node Exporter로 서버의 전반적인 건강 상태 확인하고! cAdvisor로 컨테이너 확인하고!


cAdvisor 설치하기!

STEP 1: cAdvisor 도커로 띄우기!


이제 직접 cAdvisor를 설치해볼게요잉

cAdvisor 역시 컨테이너로 실행하는 것이 가장 간편하겠죠잉?

version: '3.7'
services:
  # ... 기존 prometheus, grafana, node_exporter 등 ...

  # 여기에 cAdvisor 서비스를 추가합니다.
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.49.1 # 안정적인 버전을 명시하는 것을 추천
    container_name: cadvisor
    # 포트는 외부로 노출하지 않아도 Prometheus가 Docker 내부 네트워크로 접근 가능합니다.
    # ports:
    #   - "8080:8080"
    volumes:
      - /:/rootfs:ro # 컨테이너가 호스트의 루트 파일 시스템에 접근하도록 허용 (읽기 전용)
      - /var/run:/var/run:rw # Docker 소켓에 접근 권한 부여
      - /sys:/sys:ro # 시스템 정보 접근 (읽기 전용)
      - /var/lib/docker/:/var/lib/docker:ro # Docker 관련 라이브러리 접근 (읽기 전용)
    restart: unless-stopped
    # privileged: true # 일부 환경에서 권한 문제 발생 시 필요할 수 있습니다.

STEP 2: prometheus.yml에 수집 대상(Target) 추가하기!

Prometheus가 cAdvisor로부터 데이터를 가져갈 수 있도록 prometheus.yml 설정 파일에 새로운 수집 작업(job)을 추가해주세요잉 ~

# ... global 설정 ...

scrape_configs:
  # ... 기존 prometheus, node_exporter 잡 ...

  # cAdvisor를 수집 대상으로 추가
  - job_name: 'cadvisor'
    scrape_interval: 15s # 15초마다 데이터 수집
    static_configs:
      # docker-compose 내부 네트워크에서는 서비스 이름으로 접근 가능
      - targets: ['cadvisor:8080']

STEP 3: 실행하고 확인하기

이제 모두 끝났으니 배포하고 확인하러 가봐요~

docker compose up -d --force-recreate

Grafana 대시보드로 날개 달기

데이터 수집이 시작되었으니, 이제 Grafana로 멋지게 시각화하면 끄으으으읕!


처음부터 직접 대시보드를 만들려고 노력할 필요 없어요!

Grafana 커뮤니티에 능력자들이 참 많답니다 ..

저는 대시보드 ID 19908을 사용하고 있어요!



마무리

cAdvisor를 사용해서 컨테이너 관리에 힘을 내봅시다! 감사합니다 ^_^


Loading script...