Prometheus 는 오픈 소스 모니터링 도구이며, node_exporter가 실제 매트릭을 수집합니다.
node_exporter가 매트릭을 수집하고 HTTP를 이용하여 매트릭 데이터를 가져갈 수 있게 /metrics URL을 제공합니다.
Prometheus를 사용하면 HTTP 프로토콜을 통한 CPU 및 메모리 사용률과 같은 시계열 메트릭을 쿼리하고 가져와 실시간 그래프로 시각화할 수 있고, 노드 또는 서비스 다운타임 발생 시 경고를 푸시하도록 Prometheus를 구성하고 향상된 데이터 시각화를 위해 Grafana 와 같은 다른 타사 모니터링 도구와 통합할 수 있습니다.
1. prometheus 사용자 생성
prometheus 시스템 사용자를 생성합니다. 이 사용자는 로그인 권한 없이 생성합니다.
[root@zabbix-server ~]#useradd -m -s /bin/false prometheus
[root@zabbix-server ~]#id prometheus
uid=1001(prometheus) gid=1001(prometheus) groups=1001(prometheus)
2. prometheus 디렉토리 생성
etc 및 var 디렉토리에 prometheus 구성파일 및 데이터를 저장할 디렉토리를 생성합니다. 또한 소유권 설정도 합니다.
[root@zabbix-server ~]#mkdir /etc/prometheus
[root@zabbix-server ~]#mkdir /var/lib/prometheus
[root@zabbix-server ~]#chown prometheus /var/lib/prometheus/
3. prometheus 패키지 다운로드
wget 명령어를 통해 prometheus 패키지를 다운로드 한 후 압축 해제 하여 2개의 바이너이 파일을 /usr/local/bin 경로에 복사합니다.
최신 버전은 prometheus 홈페이지에서 다운로드할 수 있습니다. https://prometheus.io/download/
[root@zabbix-server ~]#dnf install -y wget
[root@zabbix-server ~]#wget https://github.com/prometheus/prometheus/releases/download/v2.14.0/prometheus-2.14.0.linux-amd64.tar.gz -P /tmp
[root@zabbix-server ~]#cd /tmp/
[root@zabbix-server ~]#tar -zxpvf prometheus-2.14.0.linux-amd64.tar.gz
[root@zabbix-server ~]#cd prometheus-2.14.0.linux-amd64
[root@zabbix-server ~]#cp -pr prometheus /usr/local/bin/
[root@zabbix-server ~]#cp -pr promtool /usr/local/bin/
4. prometheus config 생성
/etc/prometheus 경로에 prometheus.yml 파일을 생성 한 후 구성합니다.
[root@zabbix-server prometheus]#vi /etc/prometheus/prometheus.yml
# Global config
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: 15s # scrape_timeout is set to the global default (10s).
# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
4.1 방화벽 설정
방화벽을 사용하고 있다면 9090을 통해 외부연결이 가능하도록 방화벽 설정을 합니다.
[root@zabbix-server prometheus]#firewall-cmd --add-port=9090/tcp --permanent
[root@zabbix-server prometheus]#firewall-cmd --reload
5. systemd 서비스 파일 생성
systemd를 사용하여 prometheus를 관리하기 위해 system 파일을 생성합니다.
[root@zabbix-server prometheus]#vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Time Series Collection and Processing Server
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/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/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
[root@zabbix-server prometheus]#systemctl daemon-reload
[root@zabbix-server prometheus]#system enable prometheus --now
[root@zabbix-server prometheus]#system status prometheus
[root@zabbix-server prometheus]#dnf install -y net-tools
[root@zabbix-server prometheus]#netstat -nlp | greo 9090
tcp6 0 0 :::9090 :::* LISTEN 1036221/prometheus
6. web 브라우저 접속
http://<서버 IP>:9090
Status -> Targets 선택
아래와 같이 시스템이 표시되는 것을 확인할 수 있습니다.
7. node_exporter 설치 및 구성
node exporter는 Linux 시스템의 메트릭 (CPU / MEM / Disk / Network Traffic 상태를 측정해서 수치화한??) 을 수집하고, 제공합니다.
위 prometheus 서버가 아닌 다른 서버에 설치하여 시스템 메트릭을 모니터링하는 형태로 구성했습니다.
kvmhost 서버에 node_exporter에 대한 시스템 사용자를 생성합니다.
[root@rhosp-tb0-kvm ~]#useradd -m -s /bin/false node_exporter
prometheus 홈페이지에서 node_exporter 패키지를 다운로드한 후 압축을 해제합니다.
node_exporter 바이너리 파일을 /usr/local/bin 경로에 복사합니다.
node_exporter 파일에 대한 소유권 설정을 합니다.
[root@rhosp-tb0-kvm ~]#wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
[root@rhosp-tb0-kvm ~]#tar -zxpvf node_exporter-0.18.1.linux-amd64.tar.gz
[root@rhosp-tb0-kvm ~]#cp node_exporter-0.18.1.linux-amd64/node_exporter /usr/local/bin
[root@rhosp-tb0-kvm ~]#chown node_exporter:node_exporter /usr/local/bin/node_exporter
node_exporter를 관리할 수 있게 시스템 서비스 파일을 생성합니다.
[root@rhosp-tb0-kvm ~]#vi /etc/systemd/system/node_exporter.service
[Unit]
Description=Prometheus 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
[root@rhosp-tb0-kvm ~]#systemctl daemon-reload
[root@rhosp-tb0-kvm ~]#systemctl enable node_exporter --now
[root@rhosp-tb0-kvm ~]#systemctl status node_exporter
[root@rhosp-tb0-kvm ~]#netstat -nlp | grep 9100
tcp6 0 0 :::9100 :::* LISTEN 180401/node_exporter
방화벽을 사용한다면 아래와 같이 방화벽 정책을 추가합니다.
[root@rhosp-tb0-kvm ~]#firewall-cmd --add-port=9100/tcp --permanent
[root@rhosp-tb0-kvm ~]#firewall-cmd --reload
8. node_exporter 노드 정보 추가
prometheus서버에서 prometheus.yml 파일에 node_exporter 서버 (kvmhost)에 정보를 추가합니다.
[root@zabbix-server ~]#vi /etc/prometheus/prometheus.yml
# Global config
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: 15s # scrape_timeout is set to the global default (10s).
# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'kvmhost'
static_configs:
- targets: ['xx.xx.xx.4:9100']
prometheus 서비스를 재기동합니다.
[root@zabbix-server ~]#systemctl restart prometheus
prometheus Web UI에서 새로고침을 한 후 kvmhost의 정보가 나타나는지 확인합니다.
9. metric 정보확인
curl 명령 또는 web 브라우저를 통해 원격 서버의 (kvmhost) 메트릭 정보를 확인할 수 있습니다.
[root@zabbix-server ~]#curl http://xx.xx.xx.4:9100/metrics
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 6.4115e-05
go_gc_duration_seconds{quantile="0.25"} 0.000100382
go_gc_duration_seconds{quantile="0.5"} 0.000123013
go_gc_duration_seconds{quantile="0.75"} 0.000158313
go_gc_duration_seconds{quantile="1"} 0.001167856
go_gc_duration_seconds_sum 1.9437690970000001
go_gc_duration_seconds_count 13187
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 9
# HELP go_info Information about the Go environment.
# TYPE go_info gauge
go_info{version="go1.12.5"} 1
...
노트북에서 설정한 IP (xx.xx.xx.4)로 접속이 불가하여 다른 네트워크로 접속하였음 (참고)
10. 그래프로 메트릭 정보 확인
prometheus web 브라우저를 통해 그래프로 표시하려는 항목을 선택해서 볼 수 있습니다.
측정하려는 항목을 선택하고
Execute 버튼을 선택한 후
Graph 탭을 선택하면 아래와 같이 그래프로 확인할 수 있습니다.
'Monitoring' 카테고리의 다른 글
[RHEL/CentOS 8] Grafana와 Prometheus 연동방법 (0) | 2021.09.07 |
---|---|
Grafana 그래프시간이 Local 시간과 맞지 않을 경우 (0) | 2021.07.05 |
[RHEL8] Grafana Zabbix Data Import (0) | 2021.07.05 |
[RHEL8] Grafana Zabbix Plugins Setting (0) | 2021.07.05 |
[RHEL/CentOS8] Grafana(그라파나) Install Guide (0) | 2021.07.05 |