Skip to content

Prometheus, Node Exporter und Grafana unter Debian oder Ubuntu einrichten ​

Schritt-für-Schritt-Anleitung zum Aufbau eines Monitoring-Stacks auf einem Debian-/Ubuntu-Server. Die unten verwendeten Versionen sind die zum Zeitpunkt des Schreibens aktuellen stabilen Stände (August 2026): Prometheus 3.13.1, Node Exporter 1.12.1, Grafana 13.1.1. Prüfen Sie die Release-Seiten, bevor Sie loslegen, falls es inzwischen neuere gibt.

Drei Seiten aus der offiziellen Dokumentation sollten Sie daneben offen lassen: die Konfigurationsreferenz von Prometheus, die Liste der Node-Exporter-Collectors samt dem, was jeder einzelne davon kostet, und Grafanas eigene Installationsanleitung für Debian.

Architektur ​

+----------------+   scrapes :9100   +----------------+
|  Node Exporter | <---------------- |   Prometheus   |
|   :9100        |                   |   :9090        |
+----------------+                   +--------+-------+
                                              |
                                              | PromQL queries :9090
                                              v
                                     +----------------+
                                     |    Grafana     |
                                     |   :3000        |
                                     +----------------+
                                              |
                                              v
                                        Browser / user

Voraussetzungen ​

  • Ein Debian- oder Ubuntu-Server mit sudo-Zugriff
  • curl und tar installiert
  • SSH-Zugang für einen Tunnel. Halten Sie die Ports 9090, 9100 und 3000 zum Internet geschlossen; alle drei Dienste lauschen nur auf Loopback.

Teil 1: Prometheus installieren ​

Schritt 1: den Systembenutzer prometheus anlegen ​

bash
sudo useradd --no-create-home --shell /bin/false prometheus

Schritt 2: Verzeichnisse anlegen ​

bash
sudo mkdir -p /etc/prometheus /var/lib/prometheus

Schritt 3: Prometheus herunterladen ​

bash
cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/download/v3.13.1/prometheus-3.13.1.linux-amd64.tar.gz
tar -xvf prometheus-3.13.1.linux-amd64.tar.gz

Schritt 4: die Binaries installieren ​

bash
sudo cp prometheus-3.13.1.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-3.13.1.linux-amd64/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

Schritt 5: Konsolenvorlagen installieren und Besitzrechte setzen ​

bash
sudo cp -r prometheus-3.13.1.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-3.13.1.linux-amd64/console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

Schritt 6: die Konfigurationsdatei anlegen ​

bash
sudo tee /etc/prometheus/prometheus.yml > /dev/null <<EOF
global:
  scrape_interval: 10s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
EOF

Der Scrape-Job für Node Exporter kommt in Teil 3 dazu, sobald er installiert ist.

Schritt 7: den systemd-Dienst anlegen ​

bash
sudo tee /etc/systemd/system/prometheus.service > /dev/null <<EOF
[Unit]
Description=Prometheus
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.listen-address=127.0.0.1:9090 \\
  --web.console.templates=/etc/prometheus/consoles \\
  --web.console.libraries=/etc/prometheus/console_libraries \\
  --storage.tsdb.retention.time=365d
ExecReload=/bin/kill -HUP \$MAINPID

[Install]
WantedBy=multi-user.target
EOF

ExecReload sorgt dafür, dass systemctl reload prometheus in Teil 3 funktioniert. Ohne das verweigert systemd das Neuladen mit "Job type reload is not applicable", und Ihnen bleibt nur ein vollständiger Neustart. Achten Sie auf den Backslash in \$MAINPID: dieses Heredoc steht ohne Anführungszeichen, sonst würde die Shell die Variable beim Schreiben der Datei zu nichts auflösen.

Schritt 8: Prometheus starten und aktivieren ​

bash
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus

Schritt 9: prüfen ​

bash
sudo systemctl status prometheus
curl -s http://localhost:9090/-/healthy

Öffnen Sie auf Ihrem eigenen Rechner einen SSH-Tunnel und lassen Sie ihn laufen:

bash
ssh -N -L 9090:127.0.0.1:9090 -L 3000:127.0.0.1:3000 user@server

Ersetzen Sie user@server durch Ihr SSH-Ziel. Öffnen Sie anschließend http://localhost:9090 im Browser Ihres Rechners.

Den Prometheus-Download aufräumen ​

bash
rm -rf /tmp/prometheus-3.13.1.linux-amd64*

Teil 2: Node Exporter installieren ​

Schritt 1: den Systembenutzer node_exporter anlegen ​

bash
sudo useradd --no-create-home --shell /bin/false node_exporter

Schritt 2: Node Exporter herunterladen ​

bash
cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.12.1/node_exporter-1.12.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.12.1.linux-amd64.tar.gz

Schritt 3: das Binary installieren ​

bash
sudo cp node_exporter-1.12.1.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

Schritt 4: den systemd-Dienst anlegen ​

bash
sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<EOF
[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 --web.listen-address=127.0.0.1:9100

[Install]
WantedBy=multi-user.target
EOF

Schritt 5: Node Exporter starten und aktivieren ​

bash
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter

Schritt 6: prüfen ​

bash
curl -s http://localhost:9100/metrics | head

Den Node-Exporter-Download aufräumen ​

bash
rm -rf /tmp/node_exporter-1.12.1.linux-amd64*

Teil 3: Prometheus auf Node Exporter richten ​

Schritt 1: den Scrape-Job hinzufügen ​

bash
sudo vim /etc/prometheus/prometheus.yml

Fügen Sie unter scrape_configs hinzu:

yaml
  - job_name: "node_exporter"
    static_configs:
      - targets: ['localhost:9100']

Schritt 2: die Konfiguration prüfen ​

bash
promtool check config /etc/prometheus/prometheus.yml

Schritt 3: Prometheus neu laden ​

bash
sudo systemctl reload prometheus

Schritt 4: prüfen, ob das Target läuft ​

Öffnen Sie über den SSH-Tunnel http://localhost:9090/targets: die Jobs prometheus und node_exporter sollten beide State = UP zeigen.

Teil 4: Grafana installieren ​

Offizieller Weg: APT-Repository. apt-get update aktualisiert die Paketlisten; apt-get install --only-upgrade grafana installiert eine verfügbare Aktualisierung. Quelle: https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/

Schritt 1: Voraussetzungen installieren ​

bash
sudo apt-get install -y apt-transport-https wget gnupg

Schritt 2: den GPG-Schlüssel importieren ​

bash
sudo mkdir -p /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.key
sudo chmod 644 /etc/apt/keyrings/grafana.asc

Schritt 3: das Stable-Repository hinzufügen ​

bash
echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

Schritt 4: die Paketliste aktualisieren ​

bash
sudo apt-get update

Schritt 5: Grafana OSS installieren ​

bash
sudo apt-get install -y grafana

Schritt 6: Grafana starten und aktivieren ​

bash
sudo mkdir -p /etc/systemd/system/grafana-server.service.d
printf '[Service]\nEnvironment=GF_SERVER_HTTP_ADDR=127.0.0.1\n' | sudo tee /etc/systemd/system/grafana-server.service.d/listen.conf
sudo systemctl daemon-reload
sudo systemctl enable grafana-server
sudo systemctl restart grafana-server

Schritt 7: prüfen ​

bash
sudo systemctl status grafana-server

Öffnen Sie über den SSH-Tunnel http://localhost:3000. Die Standardanmeldung ist admin / admin, und Sie werden beim ersten Anmelden zum Ändern aufgefordert.

Teil 5: optionale Grafana-Konfiguration (eigene Domain / HTTPS) ​

Für privaten Zugriff reicht der SSH-Tunnel. Für ein öffentlich erreichbares Dashboard richten Sie grafana.example.com auf den Server und terminieren TLS in nginx. Grafana bleibt auf Loopback-HTTP; aktivieren Sie kein HTTPS auf dem internen Port.

Schritt 1: grafana.ini bearbeiten ​

bash
sudo vim /etc/grafana/grafana.ini
ini
[server]
http_addr = 127.0.0.1
http_port = 3000
domain = grafana.example.com
root_url = https://grafana.example.com/
enforce_domain = true
protocol = http

Schritt 2: Grafana neu starten ​

bash
sudo systemctl restart grafana-server

Schritt 3 (optional): Nginx als Reverse Proxy ​

nginx
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen 80;
    listen [::]:80;

    server_name grafana.example.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:3000;
    }

    location /api/live {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:3000;
    }
}

Installieren Sie nginx und Certbot und speichern Sie die obige Konfiguration unter /etc/nginx/sites-available/grafana.example.com. Ersetzen Sie die Beispieldomain überall:

bash
sudo apt-get install -y nginx certbot python3-certbot-nginx
sudo ln -s /etc/nginx/sites-available/grafana.example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d grafana.example.com
sudo certbot renew --dry-run

Öffnen Sie die Ports 80 und 443 für nginx, nicht 3000. Certbot richtet TLS und den Erneuerungstimer ein. Lassen Sie die Grafana-Authentifizierung aktiviert und ändern Sie das Anfangspasswort über den SSH-Tunnel, bevor Sie die Domain freigeben.

Teil 6: Grafana mit Prometheus verbinden ​

Schritt 1: die Datenquelle hinzufügen ​

In Grafana: Connections > Data sources > Add data source > Prometheus.

Setzen Sie die URL auf:

http://localhost:9090

Klicken Sie auf Save & test, Sie sollten "Successfully queried the Prometheus API." sehen.

Schritt 2: das Node-Exporter-Dashboard importieren ​

Dashboards > New > Import, dann die Dashboard-ID eingeben:

1860

Wählen Sie auf Nachfrage Ihre Prometheus-Datenquelle und klicken Sie auf Import. Das ist das Community-Dashboard "Node Exporter Full", und es deckt CPU, Arbeitsspeicher, Festplatte und Netzwerk von Haus aus ab.

Spickzettel zur Dienstverwaltung ​

service          start                 status                enable
---------------  --------------------  --------------------  -------------------------------
prometheus       systemctl start       systemctl status       systemctl enable prometheus
node_exporter    systemctl start       systemctl status       systemctl enable node_exporter
grafana-server   systemctl start       systemctl status       systemctl enable grafana-server

Konfigurationen ohne Ausfallzeit neu laden:

bash
sudo systemctl reload prometheus
sudo systemctl restart grafana-server

Wie es weitergeht ​

Ein Server ist der Anfang, nicht das Ende. Die nächsten beiden Schritte sind meist Alarmierung (Alertmanager, damit eine volle Platte Sie um 3 Uhr weckt statt Sie um 9 zu überraschen) und ein zweiter Exporter für das, was auf der Maschine tatsächlich läuft. Ist diese Maschine eine Website, dann ist WordPress mit Docker und Redis selbst hosten die andere Hälfte desselben Aufbaus.

Monitoring in größerem Maßstab ist ein guter Teil meiner Arbeit: Observability mit Grafana und Prometheus, einschließlich eines Benchmark-Aufbaus, der zehn Millionen Requests in fünfzehn Minuten losgeschickt hat. Ich bespreche das gern mit Ihnen.

Deinstallieren ​

Prometheus entfernen ​

bash
sudo systemctl disable --now prometheus
sudo rm -f /usr/local/bin/prometheus /usr/local/bin/promtool
sudo rm -rf /etc/prometheus /var/lib/prometheus /etc/systemd/system/prometheus.service
sudo userdel prometheus
sudo systemctl daemon-reload

Node Exporter entfernen ​

bash
sudo systemctl disable --now node_exporter
sudo rm -f /usr/local/bin/node_exporter /etc/systemd/system/node_exporter.service
sudo userdel node_exporter
sudo systemctl daemon-reload

Grafana entfernen ​

bash
sudo systemctl stop grafana-server
sudo apt-get remove -y grafana
sudo rm -i /etc/apt/sources.list.d/grafana.list