Perfekt! Dann bauen wir jetzt Schritt-für-Schritt ein übersichtliches Grafana-Dashboard für Docker-Hosts, mit allen wichtigen Metriken: laufende Container pro Host CPU pro Container RAM pro Container Netzwerk pro Container Container-Status Alles für Grafana 12.0.3 + InfluxDB 1.x + Telegraf 1.37.x. Schritt 1: Dashboard erstellen Grafana → Dashboards → New → New Dashboard Klicke Add new panel (Panel wird später angepasst) Titel: Docker Übersicht (optional) Temporär Query leer lassen Dashboard speichern (später befüllen) Schritt 2: Template-Variable für Host Damit kannst du zwischen mehreren Docker-Hosts filtern: Dashboard → Settings (Zahnradsymbol) → Variables → Add variable Name: Host Type: Query Data source: InfluxDB Query: SHOW TAG VALUES FROM "docker_container_status" WITH KEY = "host" Multi-value: ON Include All option: ON Speichern ✅ Jetzt kannst du den Host auswählen. Schritt 3: Template-Variable für Container Optional, falls du einzelne Container filtern willst: Variable Name: container Query: SHOW TAG VALUES FROM "docker_container_cpu" WITH KEY = "container_name" Multi-value: ON Include All option: ON Speichern Schritt 4: Panel „Laufende Container pro Host“ Add Panel → Stat Titel: Running Containers Query (InfluxQL): SELECT count("container_status") FROM "docker_container_status" WHERE "container_status" = 1 AND "host" =~ /^$Host$/ AND $timeFilter GROUP BY time($__interval) Optional: Value mappings: 0 → 🔴 >=1 → 🟢 ✅ Zeigt aktuelle Anzahl laufender Container. Schritt 5: CPU-Panel pro Container Add Panel → Time series Titel: CPU Usage (%) Query: SELECT mean("usage_percent") FROM "docker_container_cpu" WHERE "container_name" =~ /^$container$/ AND "host" =~ /^$Host$/ AND $timeFilter GROUP BY time($__interval), "container_name" fill(null) Unit: percent Panel speichern Schritt 6: RAM-Panel a) RAM in Bytes SELECT mean("usage") FROM "docker_container_mem" WHERE "container_name" =~ /^$container$/ AND "host" =~ /^$Host$/ AND $timeFilter GROUP BY time($__interval), "container_name" fill(null) Unit: bytes b) RAM in Prozent SELECT mean("usage_percent") FROM "docker_container_mem" WHERE "container_name" =~ /^$container$/ AND "host" =~ /^$Host$/ AND $timeFilter GROUP BY time($__interval), "container_name" fill(null) Unit: percent Schritt 7: Netzwerk-Panel a) RX (empfangen) SELECT non_negative_derivative(mean("rx_bytes"),1s) FROM "docker_container_net" WHERE "container_name" =~ /^$container$/ AND "host" =~ /^$Host$/ AND $timeFilter GROUP BY time($__interval), "container_name" fill(null) b) TX (gesendet) SELECT non_negative_derivative(mean("tx_bytes"),1s) FROM "docker_container_net" WHERE "container_name" =~ /^$container$/ AND "host" =~ /^$Host$/ AND $timeFilter GROUP BY time($__interval), "container_name" fill(null) Unit: Bps Schritt 8: Container-Status-Panel Add Panel → Stat Titel: Container Status Query: SELECT last("container_status") FROM "docker_container_status" WHERE "container_name" =~ /^$container$/ AND "host" =~ /^$Host$/ AND $timeFilter Value mappings: 1 → Running 🟢 0 → Stopped 🔴 Schritt 9: Alerts einrichten a) Container down Panel: Container Status Alert condition: last() < 1 for 1 minute b) RAM > 90 % Panel: Memory Usage (%) Alert condition: avg() > 90 for 2 Minuten c) CPU > 80 % Panel: CPU Usage (%) Alert condition: avg() > 80 für 5 Minuten Schritt 10: Dashboard layout Empfohlenes Layout: Docker Übersicht (Dashboard) ├─ Template Variables: Host, Container ├─ Running Containers (Stat) ├─ CPU Usage (%) (Time series) ├─ Memory Usage (%) (Time series) ├─ Memory Usage (Bytes) ├─ Network RX (Time series) ├─ Network TX (Time series) └─ Container Status (Stat) Wenn du willst, kann ich dir jetzt noch eine fertige Schritt-für-Schritt Anleitung für die optimale Panel-Größe & Positionierung geben, sodass dein Dashboard übersichtlich & kompakt ist – perfekt für mehrere Hosts. Willst du, dass ich das mache?