Raspberry Pi Monitoring mit Prometheus und Grafana

Ein Raspberry Pi eignet sich ideal, um ein eigenes Monitoring aufzubauen: schlank, günstig, stromsparend. In diesem Guide richten wir ein vollständiges Raspberry Pi Monitoring mit Prometheus und Grafana ein – von Hardware über Installation (Docker oder nativ) bis zu Dashboards und Alerts.

Überblick: Architektur für Raspberry Pi Monitoring

[Nutzer] --(Browser)--> Grafana (Port 3000)
Grafana --(Data Source)--> Prometheus (Port 9090)
Prometheus <-- scrape -- Node Exporter (Port 9100)
Prometheus <-- optional -- cAdvisor, Blackbox, SNMP Exporter
Prometheus -- Alerts --> Alertmanager (Port 9093)

Was du brauchst

  • Raspberry Pi (3B+ oder besser; 4/5 empfohlen), 2–4 GB RAM
  • microSD 16–32 GB (oder SSD), stabiles Netzteil
  • Raspberry Pi OS Lite (64‑bit), Netzwerkzugang (LAN/WLAN)
Komponente Empfehlung Hinweis
Raspberry Pi Pi 4 (2–4 GB) oder Pi 5 Mehr RAM = mehr Retention und Dashboards
Speicher 32 GB microSD oder SSD SSD erhöht Zuverlässigkeit
Netzteil USB‑C 3A (Pi 4/5) Stromstabilität ist kritisch

Standard-Ports

Dienst Port Zweck
Grafana 3000 Weboberfläche für Dashboards
Prometheus 9090 Zeitreihen-Datenbank und Scraping
Node Exporter 9100 Systemmetriken des Pi
Alertmanager 9093 Alarmweiterleitung
Blackbox Exporter 9115 HTTP/ICMP/TLS Checks

Installation mit Docker Compose (empfohlen)

1) Basis vorbereiten

sudo apt update && sudo apt full-upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
sudo apt install -y docker-compose-plugin

2) Verzeichnisstruktur

sudo mkdir -p /opt/monitoring
sudo chown -R $USER:$USER /opt/monitoring
cd /opt/monitoring
mkdir prometheus grafana alertmanager

3) docker-compose.yml erstellen

services:
  prometheus:
    image: prom/prometheus:latest
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --storage.tsdb.retention.time=15d
    volumes:
      - ./prometheus:/etc/prometheus
      - prom_data:/prometheus
    ports:
      - 9090:9090
    restart: unless-stopped

  node-exporter:
    image: prom/node-exporter:latest
    ports:
      - 9100:9100
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/host:ro
    command:
      - --path.procfs=/host/proc
      - --path.sysfs=/host/sys
      - --path.rootfs=/host
      - --collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($|/)
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    ports:
      - 3000:3000
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=Admin12345
    volumes:
      - grafana_data:/var/lib/grafana
    depends_on:
      - prometheus
    restart: unless-stopped

  alertmanager:
    image: prom/alertmanager:latest
    volumes:
      - ./alertmanager:/etc/alertmanager
    ports:
      - 9093:9093
    restart: unless-stopped

  blackbox-exporter:
    image: prom/blackbox-exporter:latest
    ports:
      - 9115:9115
    restart: unless-stopped

volumes:
  prom_data:
  grafana_data:

4) Prometheus-Konfiguration

Datei: /opt/monitoring/prometheus/prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    env: rpi

rule_files:
  - rules.yml

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets:
        - prometheus:9090
  - job_name: node
    static_configs:
      - targets:
        - node-exporter:9100
  - job_name: blackbox_http
    metrics_path: /probe
    params:
      module:
        - http_2xx
    static_configs:
      - targets:
        - https://example.org
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox-exporter:9115

Datei: /opt/monitoring/prometheus/rules.yml

groups:
- name: base
  rules:
  - alert: InstanceDown
    expr: up == 0
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: Target down
      description: Instance {{ $labels.instance }} is down
  - alert: HighLoadAverage
    expr: node_load1 > 2
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: High load
      description: Load average > 2 on {{ $labels.instance }}

5) Alertmanager (minimal)

Datei: /opt/monitoring/alertmanager/alertmanager.yml

route:
  receiver: devnull
receivers:
  - name: devnull

6) Stack starten

cd /opt/monitoring
docker compose up -d

7) Grafana einrichten

  • Öffne http://<PI-IP>:3000 (Login: admin / Admin12345)
  • Passwort sofort ändern
  • Data Source hinzufügen: Prometheus, URL http://prometheus:9090
  • Dashboard importieren: "Node Exporter Full" (ID 1860)

Native Installation (ohne Docker)

Für kleine Setups möglich, Updates manuell. Paketversionen können älter sein.

sudo apt update
sudo apt install -y prometheus prometheus-node-exporter
# Grafana Repo hinzufügen
sudo apt install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/grafana.gpg
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install -y grafana
sudo systemctl enable --now grafana-server prometheus prometheus-node-exporter

Exporter hinzufügen (Beispiele)

Exporter/Tool Zweck Installation (Kurz)
Node Exporter CPU, RAM, Disk, Netz Docker: siehe Compose; nativ: apt install prometheus-node-exporter
cAdvisor Container-Metriken docker run -d -p 8080:8080 -v /:/rootfs:ro -v /var/run:/var/run:ro -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro gcr.io/cadvisor/cadvisor:latest
Blackbox Exporter HTTP/ICMP/TLS Checks docker run -d -p 9115:9115 prom/blackbox-exporter:latest

Dashboards: schnelle Praxisbeispiele

  • CPU-Last (Load Average): Panel Type Gauge, Query: node_load1
  • Arbeitsspeicher (% genutzt): 100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
  • Root-Dateisystem (% genutzt): 100 * (node_filesystem_size_bytes - node_filesystem_free_bytes) / node_filesystem_size_bytes
  • Netzwerk-Throughput (Ingress): rate(node_network_receive_bytes_total[5m])

Sicherheit und Betrieb

  • Zugriff begrenzen: Ports 3000/9090 nur im LAN erlauben, Login schützen
  • Firewall (UFW):
sudo ufw allow 22/tcp
sudo ufw allow from 192.168.0.0/24 to any port 3000
sudo ufw allow from 192.168.0.0/24 to any port 9090
sudo ufw enable
  • HTTPS per Reverse Proxy (z. B. Traefik/Caddy) vor Grafana/Prometheus
  • Prometheus Retention sinnvoll wählen (z. B. 15–30 Tage)
  • Backups: Verzeichnisse /opt/monitoring/prometheus und Grafana-Volume sichern
  • Updates: docker pull und docker compose up -d regelmäßig ausführen

Kosten, Vor- und Nachteile

Variante Vorteile Nachteile
Docker Compose Schnell, reproduzierbar, leicht zu updaten Grundwissen Docker nötig
Nativ (APT) Wenig Overhead, simpel Ältere Versionen, manuelles Management
Managed (Cloud) Wartungsarm, skalierbar Laufende Kosten, externe Abhängigkeit

Troubleshooting Schnellhilfe

  • Container-Status: docker compose ps
  • Logs prüfen: docker compose logs prometheus --tail=100
  • Readiness: curl -s http://localhost:9090/-/ready
  • Exporter erreichbar: curl -s http://localhost:9100/metrics | head
  • In Prometheus: Query up – zeigt 1 (ok) oder 0 (down) je Target
  • Zeit-Sync prüfen: timedatectl status (NTP aktiv)

Nächste Schritte und Skalierung

  • Weitere Exporter: Datenbanken, MQTT, Webserver
  • Blackbox Checks für Websites, APIs und Zertifikate
  • Remote Write zu zentralem Prometheus/Grafana Cloud für Offsite-Backups
  • Dashboards für Management: SLA, Kapazität, Trends
Brauchst du Unterstützung bei IT-, Automatisierungs- oder Webprojekten?
Kontaktiere uns – wir beraten dich gerne.