본문으로 바로가기
반응형

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 탭을 선택하면 아래와 같이 그래프로 확인할 수 있습니다.

 

728x90