- Grafana, Prometheus, node-exporter를 이용해서 시스템 메트릭을 모니터링할 수 있는 대시보드를 구축
Grafana, Prometheus, node-exporter 구성 인프라스트럭처
node-exporter란
- UNIX 계열 커널을 가진 하드웨어와 OS 등 "시스템 메트릭"을 수집하는 Exporter
- Prometheus 재단이 공식적으로 지원하고 있는 Exporter 중 하나
- Prometheus로 모니터링 시스템을 구축 시 시스템 메트릭 수집을 위해 가장 우선적으로 고려되는 Exporter
- node-exporter의 exporter의 의미
- 특정 메트릭을 수집해서 엔드포인트에 노출시키는 소프트웨어(software) 혹은 에이전트(agent)
- node-exporter가 UNIX 계열 서버의 cpu, memory 등의 메트릭을 수집할 수 있는 것처럼, DB, 하드웨어, 메세지 시스템, 저장소 등 여러 시스템에 대한 익스포터가 존재
- 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이 등록 된 것을 확인 가능
static_configs 밑에 targets에서 node-exporter가 구동된 인스턴스들의 "[Node-Exporter IP]:9100"을 기록
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 대시보드를 통해 확인할 수 있는 지표들
- CPU
- Memory
- Disk
- Network
- File System
- System Daemon
- Node Exporter
- 각 패널마다 edit을 누르면, Grafana에서 Prometheus를 어떻게 쿼리하는지 확인 가능
'Opensource(오픈 소스) > Prometheus' 카테고리의 다른 글
Prometheus Alertmanager 설치 (0) | 2022.07.10 |
---|---|
blackbox-exporter를 프로메테우스와 그라파나 연동 -> 서버 프로세스 포트 모니터링 (0) | 2022.07.09 |
Prometheus를 docker로 설치 및 Prometheus 관리 스크립트 (0) | 2022.07.09 |
Prometheus를 systemd로 관리 (0) | 2022.07.09 |
Prometheus 설명 (0) | 2022.07.08 |