Cadvisor+Prometheus+Grafana + slack

김홍석·2024년 7월 19일

모니터링

목록 보기
2/3

1. Cadviosr

Cadvisor는 (Container Advisor)로 컨테이너에서 실행되는 애플리케이션의 매트릭을 수집, 처리 및 시각화 하는데 사용이된다. Cadvisor는 CPU, 메모리, 네트워크 I/O, 디스크 I/O 등의 성능 지표를 실시간으로 모니터링하고 시각화 할 수 있는 UI를 제공한다.

주요기능

1-1) 실시간 성능 모니터링

  • Cadvisor은 실시간으로 각 컨테이너의 성능 매트릭을 실시간으로 수집한다.
  • 수집한 데이터는 웹 인터페이스에서 볼 수 있고 http://<호스트 IP>:8080 여기서 확인 할 수 있고 만약에 로컬이라면 http://localhost:8080이런식으로 들어갈 수 있다.

1-2) 다양한 데이터 저장소 연동

  • Cadvisor는 InfluxDB, Prometheus 등과 같은 시계열 데이터베이스와 연동하여 데이터를 저장할 수 있습니다.이를 통해 장기적인 데이터 저장 및 분석이 가능합니다.

2. Prometheus

Prometheus는 오픈소스 시스템 모니터링 및 경고 툴 킷 이다. 다양한 시스템과 서비스의 매트릭을 모니터링 하는데 매우 효과적이다. prometheus UI에서 수집된 메트릭 확인을 http://localhost:9090/ 여기서 확인 가능 하다.

주요기능

2-1) 다양한 매트릭 수집

  • 애플리케이션에서, 시스템 등에서 다양한 매트릭을 수집 가능하다.
  • HTTP를 통해 매트릭을 노출하는 모든 시스템에서 데이터 수집 가능 하다.

2-2) PromQL

  • Prometheus Query Language는 수집된 데이터를 쿼리하고, 집계하고, 시각화하는 데 사용된다.

2-3) 경고 알림

  • Alertmanager와 통합되어 다양한 조건에 따라 경고를 설정하고 알림을 보낼 수 있다.

3. Grafana

Grafana는 오픈 소스 시각화 모니터링 툴로 다양한 데이터 소스로 부터 데이터를 수집하고 대시보드 형태로 보여줄 수 있다. 특히 시계혈 데이터(ex)Prometheus..)에 특화되어있다. 다양한 데이터 소스랑 연결 가능하다. http://localhost:3000/ 여기서 확인 가능 하다.

주요기능

3-1) 대시보드

  • 다양한 차트와 그래프, 표 등을 이용해 데이터를 시각화할 수 있는 대시보드를 생성할 수 있다. 대시보드는 사용자 정의가 가능하며, 여러 패널로 구성할 수 있다.

3-2) 데이터 소스 통합

  • Prometheus, InfluxDB, Elasticsearch, MySQL, PostgreSQL 등 다양한 데이터 소스를 지원해서 여러 데이터 소스를 하나의 대시보드에서 통합하여 시각화할 수 있다.

3-3) 경고

  • 특정 조건에 맞는 경고를 설정할 수 있으며, 조건이 충족되면 알림을 받을 수 있다. 이메일, Slack, PagerDuty 등 다양한 알림 채널로 가능하다.

Cadvisor+Prometheus+Grafana를 사용하는 방법

  1. docker-compose.yml
  cadvisor: //서비스 이름
    image: gcr.io/cadvisor/cadvisor:latest //아미지 이름
    ports:
      - "8080:8080" //포트 8080매핑
    volumes:
      - /:/rootfs:ro //읽기 전용,루트파일 시스템
      - /var/run:/var/run:ro //읽기쓰기, 런타임데이터
      - /sys:/sys:ro //읽기 전용 데이터
      - /var/lib/docker/:/var/lib/docker:ro //읽기정보 데이터, 도커 데이터
      
  prometheus: //서비스이름
    image: prom/prometheus:latest //이미지 이름
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml //로컬에 존재하는 prometheus.yml을 컨테이너에 추가를 위한것
    command:
      - '--config.file=/etc/prometheus/prometheus.yml' //프로메테우스를 실행할떄 prometheus.yml에 있는데로 실행해 달라는것
    ports:
      - "9090:9090" //포트 9090매핑
      
  grafana: //서비스 이름
    image: grafana/grafana:latest //이미지 이름
    volumes:
     volumes:
          //이제 데이터를 저장을 해 주어야 하는데 
      - ./grafana/datasources:/etc/grafana/provisioning/datasources/ // grafana를 하면 datasource 대이터 소스들을 저장하고 도커랑 공유한다는것이다.
      - ./grafana/dashboards:/etc/grafana/provisioning/dashboards/ //이것도 대시보드를 도커랑 공유한다는것이다.
    ports:
      - "3000:3000" //포트 3000매핑
  1. prometheus.yml
global:
  scrape_interval: 15s //prometheus가 각 타겟의 매트릭을 15초마다 가져오도록 함.

scrape_configs: //수집할 다양한 목록
  - job_name: 'fastapi' //이작업의 이름은 fastapi임
    metrics_path: /metrics //매트릭이 제공되는 경로고 기본값은 매트릭스로 설정
    static_configs: //정적타겟
      - targets: ['fastapi:8000'] //fastapi 8000 포트에서 매트릭 수집하도록 정함

  - job_name: 'cadvisor' //이작업의 이름은 cadvisor임
    static_configs: //정적타겟
      - targets: ['cadvisor:8080'] //cadvisor 8080포트에서 매트릭 수집하도록 설정
  1. 이제 세팅은 끝났고 이제 http://localhost:3000/ 여기 들어가서 대시보드를 꾸밀 수 있다.

아이디:admin 비밀번호:admin

3-1) data source 추가

왼쪽에 Data sources→+ Add new data source → name: 원하는것 → connection: http://host.docker.internal:9090 → save&test

3-2) 대시보드 꾸미기

dashboards → new → 하면 new dashboard(처음부터 자기가 하나하나 커스텀 해서 만드는 것) , import (이미 만들어진 대시보드 양식 가져오는것) → 이러고 이제 대시보드를 취향것 꾸미면 된다.

그리고 쿼리 할때 https://promlabs.com/promql-cheat-sheet/ 여기 사이트 들어가면 많이 있어서 골라쓰면 된다.

Grafana slack연동하는법

  1. slack 방 설정
    일단 slack에 먼저 토큰을 받기위해 먼저 slack api 사이트를 접속하고 Create new app을 선택을 한다 from scratch를 누르고 app name 을 적고 어디 워크페이스에 연동할지 선택한다. Incoming web hooks에서 on으로 바꿔주고 add new web hooks to Workspace를 입력한다. 이러면 토큰이 나오게 되고 그걸 복사를 한다. 그리고 Basic information에서 Display Information에서 프로필 색깔을 바꿔줄 수 있다.

  2. 그라파나 연동 하는법
    그라파나를 키고 Home → Alerting → Contact Points 여기로 들어가서 add contact point 에서 name을 적고 web hooks에 아까 슬랙에서 복사란 토큰을 집어 넣는다. 그러면 정상적으로 생기게 될 것이다.

  3. 이제 연동은 다했고 어떤 상태가 되면 연락이 갈지를 선택을 해야한다.
    그라파나에서 Alreting 에 Alreting rules에 new alert rule를 들어가고 rule name을 적고 그러면 A ,B ,C 가 보이게 될것이다. A에서는 어떠한 값을 기준으로 Alert를 발생시킬지 값을 추출하는 쿼리문을 작성하고, B는 A의 값을 어떠한 기준으로 Alert를 발생시킬지 Alert의 기준을 설정한다.

Monitoring

  1. cAdvisor가 각 컨테이너에서 cpu사용량이나, 디스크등의 매트릭을 실시간으로 수집하고 수집한 데이터를 Prometheus가 접근할 수 있게 합니다.

  2. Prometheus는 주기적으로 Scraping을 통해 매트릭을 수집하고 시계형 데이터 베이스에 저장합니다.

  1. Grafana는 Promethus 데이터 소스로 PromQL을 사용해 데이터를 쿼리하여 그래프, 차트 등으로 시각화 합니다.

  2. 마지막으로 Grafana에 알람을 설정해 지정한 범위를 벗어나면 Slack에 연락이 가도록 하였습니다.

profile
코린이 행동일지

1개의 댓글

comment-user-thumbnail
2025년 1월 15일

비밀댓글 입니다.

답글 달기