Monitor Proxmox mit Grafana und Prometheus

Table of Contents

Obwohl Proxmox selbst ja sehr gute Monitoring Informationen direkt auf dem eigenen WebUI anzeigt werde ich um Grafana und Prometheus besser kennen zu lernen diese Tools nutzen um meinen Proxmox Host zu überwachen.

Grafana

Was ist Grafana?

Mit der Open-Source-Software von Grafana kann man Metriken, Protokolle und Ablaufverfolgungen, visualisieren, warnen und untersuchen. Grafana OSS stellt Tools zur Verfügung, mit denen man seine time-series database (TSDB) in aufschlussreiche Diagramme und Visualisierungen umwandeln kann.

Installation

Da ich Grafana selbst als Test in meinem Homelab ausprobieren will möchte ich möglichst wenig Zeit in das Setup investieren und das ganze auch so schlank als möglich halten. Deshalb habe ich mit dazu entschieden Grafana als LXC Container zu installieren. Dazu erstelle ich als erster Schritt einen neuen LXC Container mit den folgenden Specs:

  • Template: Debian 11
  • Disk: 10GB (können wir jederzeit noch vergrössern)
  • Cores: 2
  • Memory: 1024 MiB
  • Swap: 1024 MiB

Als nächster Schritt loggen wir uns in den LXC Container ein und fügen die Grafana Repos hinzu und installieren Grafana auch gleich:

sudo apt-get install -y apt-transport-https gnupg
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install grafana
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl status grafana-server
sudo systemctl enable grafana-server.service

Wenn alles geklappt hat, sollte Grafana nun unter dieser URL erreichbar sein: http://<LXC-Container-IP-Adresse>:3000/login Einloggen kann man mit dem default Login:

username: admin
password: admin

Prometheus

Was ist Prometheus?

Prometheus ist ein Open-Source-Systems für Monitoring und Alerting, das ursprünglich bei SoundCloud entwickelt wurde. Seit seiner Gründung im Jahr 2012 haben viele Unternehmen und Organisationen Prometheus übernommen, und das Projekt hat eine sehr aktive Entwickler- und Benutzergemeinschaft. Es ist jetzt ein eigenständiges Open-Source-Projekt und wird unabhängig von einem Unternehmen gepflegt. Um dies zu betonen und die Governance-Struktur des Projekts zu verdeutlichen, trat Prometheus 2016 als zweites gehostetes Projekt nach Kubernetes der Cloud Native Computing Foundation bei.

Prometheus sammelt und speichert seine Metriken als Zeitreihendaten (time series data), d. h. Metrikinformationen werden mit dem Zeitstempel gespeichert, zu dem sie aufgezeichnet wurden, zusammen mit optionalen Schlüssel-Wert-Paaren, die als Labels bezeichnet werden.

Ausführlichere Übersichten über Prometheus finden Sie in den Ressourcen, die im Medienbereich verlinkt sind.

Features

Prometheus's Features sind:

  • ein multi-dimensionales daten model mit Zeitreihendaten, die durch Metriknamen und Schlüssel/Wert-Paare identifiziert werden
  • PromQL, eine flexible Abfragesprache, um diese Dimensionalität zu nutzen
    keine Abhängigkeit von verteilter Speicherung; einzelne Serverknoten sind autonom
  • Die Erfassung von Zeitreihen erfolgt über ein Pull-Modell über HTTP
  • Das Pushen von Zeitreihen wird über ein zwischengeschaltetes Gateway unterstützt
  • Ziele werden über die Diensterkennung oder die statische Konfiguration erkannt
    mehrere Modi der Grafik- und Dashboard-Unterstützung

Installation

Wie zuvor Grafana installieren wir nun auch Prometheus als LXC Container:

  • Template: Debian 11
  • Disk: 10GB (können wir jederzeit noch vergrössern)
  • Cores: 2
  • Memory: 2048 MiB
  • Swap: 2048 MiB

Als nächster Schritt loggen wir uns in den LXC Container ein und fügen die Grafana Repos hinzu und installieren Grafana auch gleich:

apt-get install -y curl sudo
mkdir -p /etc/prometheus
mkdir -p /var/lib/prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
tar -xvf prometheus-2.37.0.linux-amd64.tar.gz
cd prometheus-2.37.0.linux-amd64
mv prometheus promtool /usr/local/bin/
mv consoles/ console_libraries/ /etc/prometheus/
mv prometheus.yml /etc/prometheus/prometheus.yml

Weiter erstellen wir den Prometheus Systemd Service und aktivieren diesen:

service_path="/etc/systemd/system/prometheus.service"
echo "[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=root
Restart=always
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 \
    --web.listen-address=0.0.0.0:9090

[Install]
WantedBy=multi-user.target" > $service_path
sudo systemctl enable --now prometheus

Wenn alles geklappt hat, sollte Prometheus nun unter dieser URL erreichbar sein: http://<LXC-Container-IP-Adresse>:9090

Proxmox

Zuerst müssen wir auf Proxmox einen neuen User anlegen mit welchem wir von Prometheus her authentifizieren können. Damit wir den Service als deamon laufen lassen können, müssen wir den User zudem auf OS Ebene installieren, jedoch ohne Shell:

pveum user add prometheus@pve
pveum aclmod / -user prometheus@pve -role PVEAuditor
pveum passwd prometheus@pve
useradd -c "pve exporter" -m -s /bin/false prometheus

Damit wir nun den Proxmox mit Grafana und Prometheus Überwachen können, müssen wir auf dem Proxmox selbst den proxmox-pve-exporter installieren:

sudo apt install python3-pip
sudo pip install prometheus-pve-exporter

auf dem Proxmox Host erstellen wir zudem eine neue Datei mit dem folgenden Inhalt:

sudo vi /etc/prometheus/pve.yml
default: user: prometheus@pve password: your_password_here verify_ssl: false

Weiter brauchen wir auf dem Proxmox Host ein Systemd Service Config File:

sudo tee /etc/systemd/system/prometheus-pve-exporter.service<<EOF
[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
EOF

Nun erstellen wir eine weitere Config Datei:

sudo vi /etc/prometheus/prometheus.yml
- job_name: 'proxmox'
  metrics_path: /pve
  static_configs:
  - targets: ['<proxmox-ip<:9221']

und starten den Prometheus Service neu:

sudo systemctl restart prometheus

Konfiguration von Grafana und Prometheus

Dazu loggen wir uns nun auf Grafana ein und klicken auf "Add data source":

und wir wählen Prometheus als Datenquelle aus:

und geben die Angaben unseres Prometheus LXC Containers an:

anschliessend klicken wir auf "Save & Test". Nun importieren wir ein bereits bestehendes Grafana Dashboard. Dazu gehen wir auf Dashboards -> + Import

Dort geben wir die ID (10347) des existierenden Dashboards an und importieren es, indem wir auf Load klicken:

Anschliessend verändert sich die Ansicht. Die einzige Anpassung die wir hier benötigen die die Auswahl der Datenquelle (letzter Schritt), dort wählen wir unser Prometheus aus und klicken dann auf Import:

Anschliessend sollte unser Dashboard nach einer Weile die Daten des PVE Exporters wunderschön und detailliert aufbereitet anzeigen: