Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Monitoring 02.06.2026 · 10 min Lesezeit

Grafana-Dashboards bauen – von der Datenquelle zum Panel

So baust du mit Grafana aussagekräftige Dashboards: Installation auf Debian 12 oder Ubuntu 24.04, Datenquelle anbinden, erstes Panel mit Query, Einheiten und Schwellenwerten – inklusive Export als JSON.

Aktenordner und Datenschutz-Symbole als Sinnbild für ein DSGVO-Löschkonzept mit Löschfristen

Ein gutes Monitoring lebt von Übersicht. Grafana-Dashboards verwandeln rohe Metriken aus Prometheus, PostgreSQL oder MySQL in Panels, die du auf einen Blick verstehst. Diese Anleitung führt dich als Admin im Mittelstand vom installierten Grafana-Server über die erste Datenquelle bis zum fertigen Panel mit sinnvollen Einheiten und Schwellenwerten – und zeigt, wie du Dashboards als JSON exportierst und wieder importierst. Alle Befehle sind copy-paste-fertig für Debian 12 und Ubuntu 24.04 LTS.

Voraussetzungen

  • Ein Server mit Debian 12 oder Ubuntu 24.04 LTS und sudo-Rechten.
  • Internetzugriff für das APT-Repo apt.grafana.com.
  • Eine erreichbare Datenquelle: ein laufender Prometheus (Standard http://localhost:9090) oder eine PostgreSQL-/MySQL-Datenbank mit lesendem Benutzer.
  • Port 3000/tcp für die Web-UI – im LAN oder hinter einem Reverse-Proxy mit TLS.
  • Grundkenntnisse der Shell und, je nach Datenquelle, von PromQL oder SQL.

Hinweis zur Sicherheit: Grafana liefert auf Port 3000 standardmäßig unverschlüsseltes HTTP aus. Für den produktiven Einsatz solltest du es hinter einen Reverse-Proxy mit TLS setzen und die Firewall nur gezielt öffnen.

Schritt 1: Grafana über das offizielle APT-Repo installieren

Installiere zuerst die Hilfspakete und lege den GPG-Schlüssel von Grafana Labs ab. Der aktuelle Schlüssel ist die ASCII-Variante gpg-full.key, die direkt als .asc gespeichert wird – das passt zur signed-by-Angabe in der Repo-Zeile.

# Voraussetzungen + GPG-Key (Debian 12 / Ubuntu 24.04)
sudo apt-get install -y apt-transport-https software-properties-common wget gnupg
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

Trage anschließend das stabile Repo ein. Verweise dabei mit signed-by exakt auf die abgelegte Schlüsseldatei:

# Offizielles APT-Repo (stable) eintragen
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

Jetzt die Paketliste aktualisieren und Grafana OSS installieren. Vergiss das apt-get update nicht – sonst findet APT das Paket grafana nicht.

# Installieren (Grafana OSS)
sudo apt-get update
sudo apt-get install -y grafana

Das Paket heißt grafana (Open Source). grafana-enterprise enthält denselben Code, aktiviert die Enterprise-Funktionen aber nur mit gültiger Lizenz.

Schritt 2: Dienst starten und Web-UI prüfen

Grafana läuft als systemd-Unit. Wichtig: Die Unit heißt grafana-server, nicht grafana. Aktiviere und starte den Dienst und kontrolliere den Status:

# Dienst aktivieren + starten + pruefen
sudo systemctl daemon-reload
sudo systemctl enable --now grafana-server
sudo systemctl status grafana-server

Falls du den Zugriff über die lokale Firewall regelst, gib den Web-Port frei:

# Optional: Firewall (UFW) Port 3000 freigeben
sudo ufw allow 3000/tcp

Öffne nun http://SERVER-IP:3000 im Browser. Der Erst-Login ist Benutzer admin mit Passwort admin. Grafana erzwingt danach sofort eine Passwortänderung – setze ein starkes Passwort und behalte niemals admin/admin bei.

Hast du das Admin-Passwort einmal vergessen, kannst du es über die CLI zurücksetzen:

# Admin-Passwort per CLI zuruecksetzen (falls vergessen)
sudo grafana-cli admin reset-admin-password 'NeuesStarkesPasswort'

Zur Orientierung die wichtigsten Pfade auf dem System:

# Konfiguration:  /etc/grafana/grafana.ini
# Daten:          /var/lib/grafana/   (grafana.db als SQLite, plugins/)
# Logs:           /var/log/grafana/

Schritt 3: Datenquelle anbinden

Eine Datenquelle (Data source) ist die Brücke zwischen Grafana und deinen Metriken. Du bindest sie über das linke Menü Connections > Add new connection an. PostgreSQL und MySQL sind als Core-Plugins bereits enthalten, du musst nichts nachinstallieren.

Prometheus anbinden

Gehe auf Connections > Add new connection, suche nach Prometheus und klicke Add new data source. Trage im Feld Prometheus server URL die Adresse deines Prometheus ein und prüfe die Verbindung mit Save & test:

Prometheus server URL: http://localhost:9090

Bei Erfolg erscheint die Meldung Successfully queried the Prometheus API. Achte auf den korrekten Port 9090 und eine saubere URL ohne überflüssigen Slash – sonst quittiert Grafana mit bad gateway oder connection refused.

PostgreSQL anbinden

Wähle stattdessen PostgreSQL und fülle die Verbindungsdaten aus. Lege in der Datenbank vorher einen dedizierten Benutzer an, der ausschließlich SELECT darf – so können Panel-Queries niemals schreibend eingreifen (Least Privilege).

-- Dedizierten Lese-Benutzer in PostgreSQL anlegen
CREATE USER grafana_ro WITH PASSWORD 'StarkesPasswort';
GRANT CONNECT ON DATABASE meinedb TO grafana_ro;
GRANT USAGE ON SCHEMA public TO grafana_ro;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO grafana_ro;
-- Auch fuer kuenftige Tabellen automatisch SELECT vergeben:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO grafana_ro;

In Grafana trägst du dann Host und Port (z. B. 127.0.0.1:5432), Database, User, Password sowie den TLS/SSL Mode ein. Mögliche Modi sind disable, require, verify-ca und verify-full; für produktive Verbindungen empfiehlt sich mindestens require. Mit Save & test bestätigst du die Verbindung. MySQL funktioniert analog über den Standard-Port 3306.

Schritt 4: Erstes Dashboard und Panel anlegen

Jetzt entsteht das eigentliche Dashboard. Gehe auf Dashboards > New > New dashboard und klicke + Add visualization. Wähle die eben angelegte Datenquelle aus. Im Query-Editor baust du nun deine Abfrage.

Für eine Prometheus-Zeitreihe – etwa die CPU-Auslastung pro Instanz – sieht eine Query so aus:

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Für eine SQL-Datenquelle erwartet Grafana eine Zeitspalte und einen Wert. Eine Tabelle braucht die Spalte time (oder einen Alias darauf), damit die Zeitreihe korrekt dargestellt wird:

SELECT created_at AS "time", COUNT(*) AS bestellungen
FROM orders
WHERE $__timeFilter(created_at)
GROUP BY 1
ORDER BY 1;

Rechts oben wählst du die Visualisierung. Welche passt, hängt von der Aussage ab, nicht vom Geschmack:

VisualisierungWofür geeignet
Time seriesVerläufe über Zeit (CPU, RAM, Requests pro Sekunde). Der Standard für Metriken.
StatEine große Einzelkennzahl mit optionaler Sparkline (z. B. freier Speicher gerade jetzt).
Gauge / Bar gaugeEin Wert im Verhältnis zu einer Schwelle (z. B. Festplattenfüllstand in Prozent).
TableMehrere Spalten und Zeilen, etwa eine Liste von Hosts mit Status.

Schritt 5: Einheiten, Schwellenwerte und Legende setzen

Ein Panel ohne Einheit ist ein Rätsel. Im Panel-Editor rechts findest du die Optionen, mit denen aus Zahlen eine verständliche Aussage wird:

  • Standard options: Hier setzt du die Unit (Einheit), zum Beispiel Percent (0-100), bytes(IEC) oder requests/sec. Auch Nachkommastellen und Min/Max gehören hierher.
  • Thresholds: Schwellenwerte markieren das Panel farblich. Definiere etwa Grün bis 80, Gelb ab 80, Rot ab 90 – so erkennst du kritische Zustände sofort, ohne die Zahl zu interpretieren.
  • Legend: Steuert, welche Serien wie beschriftet werden. Reduziere die Legende auf das Nötige, damit das Panel lesbar bleibt.

Klicke danach Apply, um zum Dashboard zurückzukehren, und ordne das Panel per Drag-and-drop ein. Der Leitgedanke: Vermeide den Zahlenfriedhof. Zeitreihen gehören in Time series, einzelne KPIs in Stat oder Gauge. Setze immer Einheiten und sinnvolle Schwellenwerte, statt jede Kennzahl als nackte Tabelle abzuladen.

Schritt 6: Template-Variablen für flexible Dashboards

Template-Variablen machen ein Dashboard wiederverwendbar: Statt für jeden Server ein eigenes Dashboard zu pflegen, filterst du über ein Dropdown. Du legst sie über Dashboard-Einstellungen > Variables > Add variable an. Die wichtigsten Typen:

TypZweck
QueryWerte dynamisch aus der Datenquelle holen (z. B. alle instance-Labels).
CustomFeste, manuell gepflegte Auswahlliste.
ConstantKonstanter, versteckter Wert – wird beim Export zur Pflicht-Eingabe beim Import.
IntervalAuswahl von Zeit-Intervallen für Aggregationen.
Data source / Ad hoc / Text boxDatenquelle umschalten, freie Filter setzen oder Texteingabe ermöglichen.

In Queries referenzierst du eine Variable als $variable oder ${variable}. Beispiel mit einer Variable namens instance:

node_memory_MemAvailable_bytes{instance="$instance"}

Schritt 7: Dashboard speichern, teilen und als JSON exportieren

Speichere das Dashboard oben rechts über Save dashboard und vergib einen sprechenden Namen. Zum Versionieren in Git oder zum Provisioning exportierst du das vollständige JSON-Modell.

Öffne dazu das Dashboard, klicke auf Export in der Toolbar und wähle Export as code. Du erhältst das komplette JSON mit Layout, Panels, Variablen, Queries und der Datenquellen-Referenz – ideal für die Ablage im Repository.

Den Import startest du über Dashboards > New > Import. Lade die JSON-Datei hoch, füge den JSON-Text ein oder gib eine URL an. Beim Import musst du die Datenquelle neu zuordnen. Stark vereinfacht sieht ein exportiertes Modell so aus:

{
  "title": "Server-Uebersicht",
  "panels": [
    {
      "type": "timeseries",
      "title": "CPU-Auslastung",
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": {
        "defaults": {
          "unit": "percent",
          "thresholds": {
            "steps": [
              { "color": "green", "value": null },
              { "color": "red", "value": 90 }
            ]
          }
        }
      }
    }
  ],
  "templating": { "list": [] }
}

Möchtest du ein Dashboard teilen, nutze die Share-Funktion mit Bedacht. Public dashboard macht ein Dashboard ohne Login öffentlich erreichbar – setze das nur bewusst und niemals mit sensiblen Daten ein.

Typische Fehler

  • Falscher Dienstname: systemctl start grafana schlägt fehl. Die Unit heißt grafana-server.
  • Repo nicht aktualisiert: Ohne apt-get update nach dem Hinzufügen des Repos findet APT das Paket grafana nicht.
  • Keyring-Falle: Ältere Anleitungen verwenden gpg --dearmor und eine .gpg-Datei. Stimmt die signed-by-Angabe nicht mit dem abgelegten Schlüssel überein, scheitert apt-get update mit NO_PUBKEY oder Signaturfehlern. Lege den ASCII-Key als grafana.asc ab und verweise genau darauf.
  • Standard-Login behalten: admin/admin nach dem Erst-Login nicht zu ändern, öffnet das System – Grafana auf 3000 spricht standardmäßig kein TLS.
  • DB-Superuser als Datenquelle: Nutze nie einen Superuser. Ein Lese-Benutzer mit nur SELECT verhindert ungewollte Schreibzugriffe.
  • Prometheus-Verbindung scheitert: Falscher Port oder ein überflüssiger Trailing-Slash in der URL führt zu bad gateway oder connection refused. Prüfe immer mit Save & test.
  • Gebrochene Panels nach Import: Harte UID-Referenzen auf eine bestimmte Datenquelle im JSON laufen ins Leere. Ordne die Datenquelle beim Import neu zu; Constant-Variablen werden dabei zu Pflicht-Eingaben.

Häufige Fragen

Warum erreiche ich Grafana nicht unter Port 3000?

Prüfe zuerst, ob der Dienst läuft (sudo systemctl status grafana-server). Ist er aktiv, blockiert meist die Firewall: Gib mit sudo ufw allow 3000/tcp den Port frei. Kontrolliere außerdem, dass du die richtige Server-IP und keinen abweichenden Port in /etc/grafana/grafana.ini verwendest.

Muss ich für PostgreSQL oder MySQL ein Plugin installieren?

Nein. PostgreSQL und MySQL sind Core-Plugins und in Grafana bereits enthalten. Du fügst sie direkt über Connections > Add new connection hinzu, ohne etwas nachzuinstallieren.

Wie verschlüssele ich den Zugriff auf Grafana?

Setze Grafana hinter einen Reverse-Proxy wie nginx, der TLS terminiert, oder konfiguriere server.protocol samt Zertifikat direkt in /etc/grafana/grafana.ini. Öffne die Firewall nur gezielt, statt Port 3000 breit ins Netz zu stellen.

Welche Visualisierung soll ich für eine einzelne Kennzahl nehmen?

Für eine einzelne, aktuelle Kennzahl eignet sich Stat (mit optionaler Sparkline) oder Gauge, wenn der Wert relativ zu einer Schwelle interessant ist. Verläufe über die Zeit gehören in Time series.

Wie versioniere ich meine Dashboards sinnvoll?

Exportiere jedes Dashboard über Export as code als JSON und lege die Datei in Git ab. So hast du eine nachvollziehbare Historie und kannst Dashboards reproduzierbar in andere Grafana-Instanzen importieren oder per Provisioning ausrollen.

Was passiert mit Constant-Variablen beim Export?

Constant-Variablen sind im Dashboard versteckt, werden beim Export aber als Pflicht-Input behandelt. Beim Import musst du daher einen Wert dafür angeben, sonst lässt sich das Dashboard nicht laden.

Fazit

Mit dem offiziellen APT-Repo ist Grafana in wenigen Minuten installiert und über grafana-server betriebsbereit. Der eigentliche Wert entsteht danach: eine sauber angebundene Datenquelle, ein Panel mit der passenden Visualisierung sowie klare Einheiten und Schwellenwerte machen aus Metriken echte Entscheidungsgrundlagen. Setze auf wenige, aussagekräftige Panels statt auf einen Zahlenfriedhof, nutze Template-Variablen für Wiederverwendbarkeit und exportiere deine Dashboards als JSON, um sie zu versionieren. Achte dabei stets auf Least Privilege bei Datenbank-Benutzern und auf TLS für den produktiven Zugriff.

Weiterführende Anleitungen und Quellen

Quellen: Offizielle Grafana-Dokumentation unter grafana.com/docs/grafana/latest (geprüft für Grafana 11/12, Stand 2025/2026) – Installation unter Debian/Ubuntu, Konfiguration der Prometheus- und PostgreSQL-Datenquellen sowie das Anlegen von Template-Variablen.