Grafana + Prometheus + Proxmox czyli prezentacja metryk z serwera

Posted on Sat 11 February 2023 in Linux, Proxmox, Wirtualizacja

Najszybciej na świecie uruchomić Grafanę i Prometheusa można za pomocą kontenerów.

IP maszyny z Proxmoxem: 192.168.1.2
IP maszyny z Grafaną i Prometheusem: 192.168.1.1

Na maszynie 192.168.1.1 mam Dockera, odpalam na niej kontenery z Grafaną i Prometeuszem.

Grafana

grafana.yml
docker-compose -f grafana.yml up -d
version: '3'

volumes:
  grafana-data:
    driver: local

services:
  grafana:
    image: grafana/grafana-oss:latest
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana-data:/var/lib/grafana
    restart: unless-stopped

Prometheus

prometheus.yml
docker-compose -f prometheus.yml up -d
version: '3'

volumes:
  prometheus-data:
    driver: local

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - /etc/prometheus:/etc/prometheus
      - prometheus-data:/prometheus
    restart: unless-stopped
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"

W /etc/prometheus/prometheus.yml:

global:
  scrape_interval:     15s

# sam prometeusz we własnej osobie
scrape_configs:
  - job_name: 'prometheus'
    # tu nadpisujemy domyślny interwał czasowy
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
# a tu Proxmox
  - job_name: 'My Proxmox'
    metrics_path: /pve
    static_configs:
      - targets: ['192.168.1.2:9221']

Na maszynie z Proxmoxem instaluję Python3 oraz eksporter danych Proxmoxa do Prometeusza. Dodaję też użytkownika, na którego uprawnieniach będzie działał eksporter.

apt install python3 python3-pip
pip3 install prometheus-pve-exporter
mkdir /etc/prometheus
groupadd --system prometheus
useradd -s /sbin/nologin --system -g prometheus prometheus

W Proxmoxie tworzę grupę 'auditors', dodaję użytkownika 'prometheus' i dodaję do tej grupy. Tworzę Token API o nazwie 'prometheus' dla tego użytkownika. Zapisuję jego wartość, będzie zaraz potrzebna.

Dodaje uprawnienia, a właściwie rolę PVEAuditors (w opcjach: Permisions) dla użytkownika.

pveum acl modify / -user prometheus@pve -role PVEAuditor

Do pliku: /etc/prometheus/pve.yml wpisuję:

default:
  user: prometheus@pve
  token_name: "prometheus"
  token_value: "3f416134-f0f0-ff5-00f3-002d00ffc00b"
  verify_ssl: false

Linia 'token_value' zawiera wartość tokenu wspomnianą wyżej.

Tworzę plik dla systemd w /etc/systemd/system/prometheus-pve-exporter.service o następującej zawartości:

[Unit]
Description=Prometheus exporter for Proxmox VE
Documentation=https://github.com/znerol/prometheus-pve-exporter

[Service]
Restart=always
User=prometheus
ExecStart=/usr/local/bin/pve_exporter /etc/prometheus/pve.yml

[Install]
WantedBy=multi-user.target

Odświeżam konfig systemd:

systemctl daemon-reload

Odpalam eksporter i sprawdzam czy działa:

systemctl start prometheus-pve-exporter
systemctl status prometheus-pve-exporter

Jeśli jest OK, to włączam automatyczny start:

systemctl enable prometheus-pve-exporter

Na maszynie z Proxmoxem na porcie 9221, eksporter wypluwa metryki, można to sobie obejrzeć:

http://192.168.1.2:9221/pve?target=192.168.1.2

W Grafanie dodaję 'Data Source' i wybieram 'Prometheus'. W polu URL wpisuję adres maszyny: http://192.168.1.1:9090.

W bocznym menu wybieram Import i w polu 'Import via Grafana.com' wpisuję liczbę: 10347.
To jest szablon dashboardu do Proxmoxa, gotowiec. Klikam w 'Load', daję nazwę serwera z Proxmoxem i zachowuję nowy dashboard.