cAdvisor는 Google에서 개발한 오픈 소스 컨테이너 리소스 사용 및 성능 분석 도구이다. "Container Advisor"의 약자로, 주로 Docker 및 Kubernetes와 같은 컨테이너 오케스트레이션 환경에서 사용된다. 컨테이너 환경에서 작동하는 각각의 컨테이너에 대한 리소스 사용 및 성능 데이터를 수집하고 제공하여 시스템 관리자나 개발자가 애플리케이션 및 컨테이너의 동작을 모니터링할 수 있게 해준다.
그렇다면 Prometheus와 cAdvisor는 뭐가 다른걸까?
Prometheus와 cAdvisor는 모두 컨테이너 및 마이크로서비스 환경에서 사용되는 모니터링 도구이지만, 몇 가지 중요한 차이점이 있다.
먼저, Prometheus는 분산된 시스템 및 서비스 아키텍처에서 발생하는 여러 구성 요소의 모니터링과 경고에 중점을 둔다. 여러 서비스 및 시스템의 지표를 수집하고 중앙 집중식으로 저장하여 통합된 모니터링을 제공한다. 반면, cAdvisor는 개별 컨테이너에 대한 리소스 사용 및 성능 데이터를 제공한다는 점이 가장 큰 차이점이다.
또한 데이터 수집 방식에 차이가 있다. Prometheus는 내장된 데이터 저장소를 사용하여 지표를 수집하고 저장한다. 데이터베이스에 데이터를 저장하고 쿼리할 수 있다. 또한 지원되는 다양한 수집기를 사용하여 여러 시스템과 통합할 수 있다. cAdvisor는 호스트 및 컨테이너 레벨에서 수집된 데이터를 프로메테우스와 같은 저장소에 직접 저장하지 않는다. 일반적으로는 각각의 노드에서 cAdvisor 인스턴스가 실행되며, 그 데이터는 외부 시스템에서 수집하거나 직접 cAdvisor 웹 UI를 통해 확인할 수 있다.
version: "3"
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus/config:/etc/prometheus
- prometheus-data:/prometheus
ports:
- 9090:9090
command:
- "--storage.tsdb.path=/prometheus"
- "--config.file=/etc/prometheus/prometheus.yml"
restart: always
networks:
- t4y
cadvisor:
image: gcr.io/cadvisor/cadvisor
container_name: cadvisor
ports:
- 8080:8080
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
networks:
- t4y
networks:
t4y:
driver: bridge
global:
scrape_interval: 15s
scrape_timeout: 15s
evaluation_interval: 2m
external_labels:
monitor: 'codelab-monitor'
query_log_file: query_log_file.log
scrape_configs:
- job_name: 'monitoring-item'
scrape_interval: 10s
scrape_timeout: 10s
metrics_path: '/metrics'
honor_labels: false
honor_timestamps: false
scheme: 'http'
static_configs:
- targets: ['prometheus:9090', 'cadvisor:8080']
labels:
service: 'monitor'
명령어 docker compose up -d
로 도커 컨테이너를 실행한다.
그러면 다음과 같이 cadvisor 컨테이너가 추가된 것을 확인할 수 있다.
cadvisor의 서버로 들어가면 다음과 같은 지표들을 확인할 수 있다.
만약 컨테이너를 실행했는데 cadvisor 컨테이너에서 Cannot detect current cgroup on cgroup v2
에러가 발생한다면 호환성 이슈일 가능성이 높다. 나도 같은 이슈가 발생하였는데, M1 칩의 명령어 set과 cAdvisor가 체크할 수 있는 명령어 set의 차이로 인해 이슈가 생기는 듯 하였다.
cAdvisor v0.45.0 버전부터는 arm 아키텍쳐를 포함한 여러 아키텍쳐를 지원하기 때문에 cAdvisor의 이미지 버전을 v0.45.0 이상으로 올리면 오류가 해결될 것이다.
감사합니다.!