Docker와 cAdvisor 연동하기

su_under·2024년 1월 19일
0
post-thumbnail

✨ cAdvisor

cAdvisor는 Google에서 개발한 오픈 소스 컨테이너 리소스 사용 및 성능 분석 도구이다. "Container Advisor"의 약자로, 주로 Docker 및 Kubernetes와 같은 컨테이너 오케스트레이션 환경에서 사용된다. 컨테이너 환경에서 작동하는 각각의 컨테이너에 대한 리소스 사용 및 성능 데이터를 수집하고 제공하여 시스템 관리자나 개발자가 애플리케이션 및 컨테이너의 동작을 모니터링할 수 있게 해준다.


🤷‍♀️ Prometheus? cAdvisor?

그렇다면 Prometheus와 cAdvisor는 뭐가 다른걸까?

Prometheus와 cAdvisor는 모두 컨테이너 및 마이크로서비스 환경에서 사용되는 모니터링 도구이지만, 몇 가지 중요한 차이점이 있다.

먼저, Prometheus는 분산된 시스템 및 서비스 아키텍처에서 발생하는 여러 구성 요소의 모니터링과 경고에 중점을 둔다. 여러 서비스 및 시스템의 지표를 수집하고 중앙 집중식으로 저장하여 통합된 모니터링을 제공한다. 반면, cAdvisor는 개별 컨테이너에 대한 리소스 사용 및 성능 데이터를 제공한다는 점이 가장 큰 차이점이다.

또한 데이터 수집 방식에 차이가 있다. Prometheus는 내장된 데이터 저장소를 사용하여 지표를 수집하고 저장한다. 데이터베이스에 데이터를 저장하고 쿼리할 수 있다. 또한 지원되는 다양한 수집기를 사용하여 여러 시스템과 통합할 수 있다. cAdvisor는 호스트 및 컨테이너 레벨에서 수집된 데이터를 프로메테우스와 같은 저장소에 직접 저장하지 않는다. 일반적으로는 각각의 노드에서 cAdvisor 인스턴스가 실행되며, 그 데이터는 외부 시스템에서 수집하거나 직접 cAdvisor 웹 UI를 통해 확인할 수 있다.



Docker와 cAdvisor 연동하기

1. docker-compose.yml 파일 작성

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

2. prometheus.yml 파일 작성

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'

3. 컨테이너 실행

명령어 docker compose up -d 로 도커 컨테이너를 실행한다.

그러면 다음과 같이 cadvisor 컨테이너가 추가된 것을 확인할 수 있다.


cadvisor의 서버로 들어가면 다음과 같은 지표들을 확인할 수 있다.


❗️ Cannot detect current cgroup on cgroup v2 에러

만약 컨테이너를 실행했는데 cadvisor 컨테이너에서 Cannot detect current cgroup on cgroup v2 에러가 발생한다면 호환성 이슈일 가능성이 높다. 나도 같은 이슈가 발생하였는데, M1 칩의 명령어 set과 cAdvisor가 체크할 수 있는 명령어 set의 차이로 인해 이슈가 생기는 듯 하였다.

cAdvisor v0.45.0 버전부터는 arm 아키텍쳐를 포함한 여러 아키텍쳐를 지원하기 때문에 cAdvisor의 이미지 버전을 v0.45.0 이상으로 올리면 오류가 해결될 것이다.

profile
솨의 개발일기

1개의 댓글

comment-user-thumbnail
2024년 5월 10일

감사합니다.!

답글 달기