본문 바로가기
AWS(Amazon Web Service)/Prom+Grafana+cAdvisor

[AWS] Prometheus+Grafana+cAdvisor 설치

by Haengsin 2021. 11. 19.

Prometheus+Grafana+cAdvisor

  • Container 들을 Monitoring 하기 위해 각 인스턴스에 cAdvisor 를 추가 설치하여 Prometheus에서 Metric을 수집할 수 있도록 한다.
  • node_exporter의 metric 수집용 prometheus와 cAdvisor의 metric 수집용 prometheus 두 개를 띄운다. 

 

먼저 Grafana+Prometheus server에 디렉토리 생성 후, prometheus 설정 파일 2개를 만든다. 만든 설정 파일을 바탕으로 node_exporter와 cAdvisor 용으로 prometheus 컨테이너 2개를 각각 띄우고 Grafana를 올린다.

/Prometheus/prometheus.yml

mkdir /Prometheus
cd /Prometheus

cat > prometheus.yml
# prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s
  # 'scrpae_timeout'
# Alertmanager
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
scrape_configs:
  - job_name: 'prometheus'
    # 'metrics_path'
    static_configs:
    - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    # 'metrics_path'
    scrape_interval: 5s

    static_configs:
    - targets: ['node_exporter:9100']
  •  예시에서는 하나의 node에 대해서만 수집하지만 여러 node에서 받아오려면 - targets: 에 추가해주면 된다.

       - targets : ['192.168.100.101:9100', '192.168.100.102:9100']

/Prometheus/prometheus_cadvisor.yml

cd /Prometheus

cat > prom_cadvisor.yml
# prom_cadvisor.yml
global:

    scrape_interval: 5s

    external_labels:


scrape_configs:

    - job_name: 'cAdvisor'

      static_configs:

          - targets: ['cAdvisor:8080'] # cAdvisor 설치된 대상의 IP
  • 예시에서는 하나의 node에 대해서만 수집하지만 여러 node에서 받아오려면 - targets: 에 추가해주면 된다.

       - targets : ['192.168.100.101:8080', '192.168.100.102:8080']

 

 

[사전 작업]

1. 마운트 할 볼륨에 대한 디렉토리 생성

  • $ sudo mkdir /Prometheus/etc
  • $ sudo mkdir /Prometheus/data
  • $ sudo chmod 777 -R /Prometheus
    • docker에서 해당 디렉토리를 수정할 수 있도록 권한 변경
    • 위의 디렉토리 권한을 수정하지 않으면 docker-compose 실행은 되나 컨테이너 계속 죽음.

Grafana+Prometheus Server의 docker-compose.yml

version: '3.7'

services:

 grafana:
  image: grafana/grafana:latest
  ports:
   - '3000:3000'
  environment:
   - TZ=Asia/Seoul

 prometheus:
  image: prom/prometheus
  ports:
   - '9090:9090'
  volumes:
   - /Prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
   - /Pprometheus/data:/prometheus
   - /Prometheus/etc:/etc/prometheus

  command:
   - --config.file=/etc/prometheus/prometheus.yml
   - '--storage.tsdb.path=/prometheus'
   - '--web.console.libraries=/etc/prometheus/console_libraries'
   - '--web.console.templates=/etc/prometheus/consoles'
   - '--storage.tsdb.retention.time=200h'
   - '--web.enable-lifecycle'

 prometheus-cadvisor:
  image: prom/prometheus
  ports:
   - '9091:9090'
  volumes:
   - /Prometheus/prom_cadvisor.yml:/etc/prometheus/prometheus.yml:ro
  command:
   - --config.file=/etc/prometheus/prometheus.yml

 

Exporter의 docker-compose.yml

version: '3.7'

services:

 node_exporter:
  image: prom/node-exporter
  restart: always
  ports:
   - '9100:9100'

 cadvisor:
  image: gcr.io/google-containers/cadvisor:v0.33.0
  privileged: true
  ports:
   - '8080:8080'
  volumes:
   - /:/rootfs:ro
   - /var/run:/var/run:rw
   - /sys/fs/cgroup:/sys/fs/cgroup:ro
   - /dev/disk:/dev/disk:ro

 

 

Grafana에 접속 후, node_exporter와 cAdvisor에 대한 prometheus 2개를 data source로 추가한다.

※ (주의) Grafana가 node_exporter와 cAdvisor에서 데이터를 긁어오는 것이 아니라 prometheus에서 긁어오는 것이다.

  

 

- Save&Test를 진행 시 정상적으로 받아오는 것을 확인한다.

 

 

Dashboard

대시보드를 직접 생성하거나, Grafana Lab에서 가져와서 Import 한다. 

 

 

(1) Docker Host에 대한 Dashboard

- import : 11074

- data sources : node_exporter

(2) Container를 모니터링하기 위한 Dashboard

- import : 13946

- data sources: cAdvisor