• Grafana, Prometheus, node-exporter를 이용해서 시스템 메트릭을 모니터링할 수 있는 대시보드를 구축

Grafana, Prometheus, node-exporter 구성 인프라스트럭처


node-exporter란

  • UNIX 계열 커널을 가진 하드웨어와 OS 등 "시스템 메트릭"을 수집하는 Exporter
  • Prometheus 재단이 공식적으로 지원하고 있는 Exporter 중 하나
  • Prometheus로 모니터링 시스템을 구축 시 시스템 메트릭 수집을 위해 가장 우선적으로 고려되는 Exporter
  • node-exporter의 exporter의 의미
    1. 특정 메트릭을 수집해서 엔드포인트에 노출시키는 소프트웨어(software) 혹은 에이전트(agent)
    2. node-exporter가 UNIX 계열 서버의 cpu, memory 등의 메트릭을 수집할 수 있는 것처럼, DB, 하드웨어, 메세지 시스템, 저장소 등 여러 시스템에 대한 익스포터가 존재
    3. CollectD 등 기존의 서버 모니터링에 사용되는 에이전트들과 통합할 수 있는 익스포터도 존재

node-exporter 설치 (서버)

1. node-exporter 스크립트 명령어로 실행

# 현재 위치 확인
$ pwd
/root

# 설치하는 컴포넌트들의 관리를 더 쉽게 하기 위해서 디렉토리 생성
$ mkdir node

# 디렉토리 이동
$ cd /root/node

# 압축 파일 다운로드
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.2.0/node_exporter-1.2.0.linux-amd64.tar.gz

# 설치한 node-exporter 바이너리 파일 확인
$ ls
node_exporter-1.2.0.linux-amd64.tar.gz

# 압축 파일 해제
$ tar zxvf node_exporter-1.2.0.linux-amd64.tar.gz
node_exporter-1.2.0.linux-amd64/
node_exporter-1.2.0.linux-amd64/LICENSE
node_exporter-1.2.0.linux-amd64/NOTICE
node_exporter-1.2.0.linux-amd64/node_exporter

# node_exporter 설치된 디렉토리로 이동
$ cd /root/node/node_exporter-1.2.0.linux-amd64

# node_exporter 실행 → 포그라운드로 실행하면 다른 작업이 불가능함으로 백그라운드로 실행(& 붙임)
$ ./node_exporter

2. node-exporter 서비스로 실행 → node-exporter 명령어를 systemd로 관리

# 현재 디렉토리 위치 확인
$ pwd
/root/node/node_exporter-1.2.0.linux-amd64

# user 추가
$ useradd --no-create-home --shell /bin/false node_exporter

# 생성한 prometheus 계정 확인
$ cat /etc/passwd | grep node_exporter
node_exporter:x:1001:1001::/home/node_exporter:/bin/false

# 실행 파일 /usr/local/bin/으로 경로 이동
$ cp ./node_exporter /usr/local/bin

# /usr/local/bin/node_exporter node_exporter 유저, 그룹 권한 주기
$ chown node_exporter:node_exporter /usr/local/bin/node_exporter

# 명령어 복사 및 사용 권환 변경 확인
$ ls -al /usr/local/bin/node_exporter
-rwxr-xr-x 1 node_exporter node_exporter 18494531 Nov 20 14:37 /usr/local/bin/node_exporter

# 서비스 파일 등록
$ cat << EOF | tee /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
EOF

# 데몬 리로드
$ systemctl daemon-reload

# 서비스 가동
$ systemctl restart node_exporter

# 서비스 상태 확인
$ systemctl status node_exporter
● node_exporter.service - Node Exporter
   Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-11-20 14:39:30 KST; 11s ago
 Main PID: 19812 (node_exporter)
    Tasks: 5
   Memory: 8.4M
   CGroup: /system.slice/node_exporter.service
           └─19812 /usr/local/bin/node_exporter
[..생략..]

3. curl 명령어를 입력하여 node-exporter를 통해 수집되는 데이터가 있는지 확인

$ curl localhost:9100/metrics
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
go_gc_duration_seconds{quantile="0.75"} 0
go_gc_duration_seconds{quantile="1"} 0
go_gc_duration_seconds_sum 0
go_gc_duration_seconds_count 0
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 8



Prometheus 설정 변경 → node-exporter 정보 수집

  • Prometheus에서 node-exporter가 수집하고 있는 메트릭을 스크래이핑

  • Prometheus 설정 파일을 보면 scrape_config 밑에 아래와 같이 node-exporter 관련 job이 등록 된 것을 확인 가능

    1. static_configs 밑에 targets에서 node-exporter가 구동된 인스턴스들의 "[Node-Exporter IP]:9100"을 기록

    2. Prometheus가 scrape_interval에 설정된 주기마다 각 인스턴스들에서 수집되는 메트릭을 스크래이핑하여 저장

      $ vi /etc/prometheus/prometheus.yml
      # my global config
      global:
        scrape_interval:     15s # By default, scrape targets every 15 seconds.
        evaluation_interval: 15s # By default, scrape targets every 15 seconds.
      
      external_labels:
        monitor: 'kubernetes-monitoring'
      
      rule_files:
      # - 'alert.rules'
      # - "first.rules"
      # - "second.rules"
      
      # alert
      # alerting:
      #   alertmanagers:
      #   - scheme: http
      #     static_configs:
      #     - targets:
      #       - "alertmanager:9093"
      
      # A scrape configuration containing exactly one endpoint to scrape:
      # Here it's Prometheus itself.
      scrape_configs:
        - job_name: 'prometheus'
          scrape_interval: 5s
      
          static_configs:
            - targets: ['localhost:9090']
      
        - job_name: 'node-exporter'
          scrape_interval: 5s
      
          static_configs:
            - targets: ['[Node-Exporter IP]:9100']
  • Prometheus 구동
    $ systemctl daemon-reload
    $ systemctl restart prometheus
    $ systemctl status prometheus
    ● prometheus.service - Prometheus Server
    Loaded: loaded (/etc/systemd/system/prometheus.service; disabled; vendor preset: disabled)
    Active: active (running) since Sat 2021-11-20 15:10:51 KST; 23s ago
    Main PID: 4020 (prometheus)
    Tasks: 14
    Memory: 39.5M
    CGroup: /system.slice/prometheus.service
           └─4020 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/pro...
    [...생략...]


Prometheus UI에서 다음 쿼리를 입력 → node-exporter 설치한 서버의 값 읽음

  • 설정한 node-exporter란 job_name으로 수집되고 있는 인스턴스들의 개수를 확인 가능



node-exporter를 모니터링하는 Grafana 대시보드 구축

  • 기본 Grafana 에서 대시보드를 설치하는 방법은 해당 URL을 통해 학습 필요
  • Grafana로 대시보드를 구축할 때 좋은 점은 node-exporter같이 많이 사용하는 Exporter에 대한 대시보드가 이미 공유
  • 손쉽게 사용 가능

1. node-exporter 그라파다 대시보드 복사 가능한 대시보드 ID 획득

  • node-exporter 그라파나 대시보드 복사 가능하게 하는 URL : https://grafana.com/grafana/dashboards/1860
  • 위 경로에 접속하면 아래 화면이 보이는데 "Copy ID to Clipboard"를 클릭하여 복사함

2. 그라파나 대시보드로 이동한 후, 왼쪽 탭의 두 번째 "+"의 "Import" 메뉴를 클릭



3. 위에서 복사한 대시보드 ID를 입력하고 "Load" 버튼을 클릭



4. "Datasource"에서 "Prometheus"를 선택한 뒤 "Import"를 클릭



5. 생성한 대시보드 화면 확인

  • 기본 설정된 값으로는 잘 안보일 수 있으니 우측 상단 메뉴에서 "Last 5 Minutes"를 설정하고, 리프레시 간격을 5s로 바꾸는 것이 좋음
  • 실 서버에서는 서버 부하가 걸릴 수 있으니 15분에 10초가 적당
  • 생성한 node-exporter 대시보드를 통해 확인할 수 있는 지표들
    1. CPU
    2. Memory
    3. Disk
    4. Network
    5. File System
    6. System Daemon
    7. Node Exporter
  • 각 패널마다 edit을 누르면, Grafana에서 Prometheus를 어떻게 쿼리하는지 확인 가능

참고 URL : https://gurumee92.tistory.com/225?category=933410

+ Recent posts