Kimuksung
Kimuksung 안녕하세요. 분산처리에 관심이 많은 생각하는 주니어 Data Enginner입니다.

Prometheus+Grafana로 인스턴스 모니터링

Prometheus+Grafana로 인스턴스 모니터링

안녕하세요. 그동안 감기와 차세대 업무로 인하여, 블로그 작성을 간만에 해봅니다.

금일 진행한 내용은 Hadoop/Kafka 등의 인스턴스를 띄워두었지만, 이 서비스들이 제대로 동작하고 있는지 얼마나 많은 리소스가 드는지를 대시보드로 보기 위해 진행하였습니다.

Docker-compose를 사용하였으며, 간단한 리소스들을 보여주는 용도만 사용하고 있습니다.
Mongodb Atlas와 Aws RDS를 Cloudwatch로 모니터링해보려고 하였으나, Exporter를 설치하지 않으면 대시보드를 구성할 수 없다는 점과 Cloudwatch는 pull할 때마다, 많은 비용이 발생된다고 하여 진행하지 못하였습니다.

그러면 Node 리소스를 대시보드로 구성해보겠습니다.


node_exporter

  • url 접근 정보
  • http://localhost:9100/
  • http://localhost:9100/metrics

  • mac에서 진행하기
1
2
$ brew install node_exporter
$ brew services start node_exporter
  • Ubuntu Instance에 실행하기
1
2
3
4
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
$ tar xvfz node_exporter-*.*-amd64.tar.gz
$ cd node_exporter-*.*-amd64
$ ./node_exporter
  • 자동화
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo vi /etc/systemd/system/node_exporter.service

[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
# 실행 경로 추가
ExecStart=/home/ubuntu/node_exporter-1.5.0.linux-amd64/node_exporter

[Install]
WantedBy=multi-user.target

$ sudo systemctl daemon-reload
$ sudo systemctl enable node_exporter.service
$ sudo systemctl start node_exporter.service


Prometheus

  • http://localhost:9090/
1
2
$ brew install prometheus
$ brew services start prometheus
  • prometheus.yml 을 통한 정보 입력
1
$ sudo vi /opt/homebrew/etc/prometheus.yml
1
2
3
4
5
6
7
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
    - targets: ["localhost:9100"]
1
2
# restart
$ brew services restart prometheus
  • docker 간단 실행
1
$ docker run -p 9090:9090 -v /Users/andrew/dev/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
  • docker-compose 구성
    • docker-compose.yml
    • prometheus.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# docker-compose.yml
version: '3'

services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - /Users/wclub/monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - 9090:9090
    networks:
      - prometheus-net

networks:
  prometheus-net:
    driver: bridge
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# prometheus.yml
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

scrape_configs:
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['ip:port']
  - job_name: 'kafka'
    static_configs:
      - targets: ['ip:port']
  - job_name: 'local'
    static_configs:
      - targets: ['local:9100', 'host.docker.internal:9100']
  - job_name: 'hadoop'
    static_configs:
      - targets: ['ip:port']
        labels:
          hadoop: 'master'
  - job_name: 'redash'
    static_configs:
      - targets: ['ip:port']

Untitled-77

Untitled-78


Grafana

  • docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
grafana:
    image: grafana/grafana
    container_name: grafana
    # user: admin:admin
    ports:
      - 3000:3000 # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
    volumes:
      - /Users/wclub/monitoring/grafana:/var/lib/grafana
    restart: always
    networks:
      - prometheus-net

대시보드 구성하기


  • node exporter 구성
  • https://grafana.com/grafana/dashboards/1860-node-exporter-full/ 툴 가져와 사용

Untitled-79


참조

  • https://hippogrammer.tistory.com/258
  • https://www.devkuma.com/docs/prometheus/docker-compose-install/