Komplexe Dashboards
Ziel
In diesem Projekt lernst du, wie man komplexe Dashboards in Grafana erstellt und verschiedene Datenquellen integriert. Du wirst:
- Dashboards erstellen und Panels konfigurieren
 - Variablen einrichten, um dynamische Filter zu verwenden
 - Transformationen anwenden, um Daten aus unterschiedlichen Quellen zusammenzuführen
 - Daten aus Prometheus und CSV-Dateien (via Infinity Plugin) kombinieren
 - Dashboards speichern, sortieren und für das Team teilen
 
Hilfsmittel
- Versuche, die Aufgaben eigenständig zu lösen. Bei jeder Aufgabe findest du einen ausklappbaren Block mit einem Lösungsvorschlag, falls du nicht weiterkommst.
 
Aufgabe 1 - Variablen
Aufgabe 1.1 - Dashboard erweitern
- Wechsle in Grafana in den Bereich Dashboards.
 - Wähle das Systemüberblick Dashboard aus.
 - Erstelle ein neues Panel zur Überwachung der CPU-Auslastung einzelner Pods.
 
Lösung (Klicken Sie auf den Pfeil, falls du nicht weiterkommst)
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod)
- Filtere die Abfrage nach dem namespace 
monitoring. 
Lösung (Klicken Sie auf den Pfeil, falls du nicht weiterkommst)
sum(rate(container_cpu_usage_seconds_total{container!="", namespace="monitoring"}[5m])) by (pod)
- Speichere das Dashboard.
 
Aufgabe 1.2 - Variable erstellen
- Erstelle eine neue Variable in den Dashboard Settings mit dem Namen 
namespaces. - Wähle als Typ 
Query. - Konfiguriere die Abfrage so, dass alle Namespaces aufgelistet werden.
 
Lösung (Klicken Sie auf den Pfeil, falls du nicht weiterkommst)
- Query type: 
Label values - Label: 
namespace - Metric: 
kube_pod_info 
Aufgabe 1.3 - Variable im Panel verwenden
- Bearbeite das Panel zur CPU-Auslastung.
 - Ersetze den Namespace in der Abfrage durch die Variable 
${namespaces}. 
Lösung (Klicken Sie auf den Pfeil, falls du nicht weiterkommst)
sum(rate(container_cpu_usage_seconds_total{container!="", namespace="${namespaces}"}[5m])) by (pod)
- Speichere das Dashboard.
 
Aufgabe 2 - Transformationen
Aufgabe 2.1 - Infinity Plugin installieren
- Installiere das Infinity Plugin in Grafana.
 
Lösung (Klicken Sie auf den Pfeil, falls du nicht weiterkommst)
- Wechsle in Grafana in den Bereich Administration->Plugins and data.
 - Klicke auf Plugins.
 - Suche nach dem Plugin Infinity.
 - Klicke auf Install.
 
Aufgabe 2.2 - Datenquelle hinzufügen
- Füge eine neue Datenquelle vom Typ Infinity hinzu.
 - Name: 
CSV Data - Unter 
Reference dataerstelle eine neue Referenz mit dem Namenteam-dataund folgendem Inhalt: 
service,team,cost,sla
alloy-system,Observability Team,320,99.95
kube-system,Ops Team,250,99.89
kyverno,Security Team,180,99.92
longhorn-system,Ops Team,400,99.97
mailpit,DevOps Team,400,73.48
monitoring,Observability Team,400,99.97
tracing,Observability Team,400,97.3
Aufgabe 2.3 - Tabellen-Panel erstellen
- Erstelle eine neues Dashboard mit dem Namen 
Team-Übersicht. - Erstelle ein neues Panel vom Typ Table.
 - Wähle als Datenquelle 
CSV Data. - Konfiguriere Transformationen so dass eine neue Tabelle berechnet wird, die folgende Spalten enthält:
 teamcost (sum)(Summe der Kosten aller Services eines Teams)sla (mean)(Durchschnittliche SLA aller Services eines Teams)- Sortiere die Tabelle nach 
cost (sum)absteigend. 
Lösung (Klicken Sie auf den Pfeil, falls du nicht weiterkommst)
- Queries:
- Type: 
CSV Data - Parser: 
Backend - Source: 
Reference - Reference: 
team-data 
 - Type: 
 - Transformationen:
- Type: 
Convert field type- Field: 
costasNumber - Field: 
slaasNumber 
 - Field: 
 - Type: 
Group byteam:Group bycost:Calculate->Totalsla:Calculate->Mean
 - Type: 
Sort bycost (sum)-> Reverse
 
 - Type: 
 
Aufgabe 3 - Datenquellen zusammenführen (advanced, optional)
- Erstelle ein neues Panel im Dashboard 
Team-Übersicht. - Wähle als Datenquelle 
Mixed. - Erstelle drei Queries:
 - CSV Data: Wie zuvor, um die Team-Daten zu laden.
 - 
Zwei Prometheus Abfragen:
sum by (namespace) (rate(container_cpu_usage_seconds_total{image!=""}[5m])) * 100sum by (namespace) (container_memory_working_set_bytes{container!=""}) / 1024 / 1024 / 1024 - 
Erstelle Transformationen, um die Daten zu kombinieren, so dass die Tabelle folgende Spalten enthält:
 teamservicecostslacpu usage (%)memory usage (GB)
Lösung (Klicken Sie auf den Pfeil, falls du nicht weiterkommst)
Folgende Annahme: Query A ist der CSV-Datensatz, Query B ist die erste Prometheus-Abfrage, Query C ist die zweite Prometheus Anfrage. Bei anderen Reihenfolge bitte unten passend einsetzen.
- Transformationen:
- Series to rows
- Filter oben rechts aktivieren
 - Apply transformation to:
Query and Transformation resultsQuery B
 
 - Series to rows
- Filter oben rechts aktivieren
 - Apply transformation to:
Query and Transformation resultsQuery C
 
 - Filter fields by name
- Time (ausblenden)
 
 - Rename fields by regex
- Filter oben rechts aktivieren
 - Apply transformation to:
Query and Transformation resultsQuery series-to-rows-B-B-B-B-B-B-B-B
 - Match: 
Value - Replace: 
cpu usage (%) 
 - Rename fields by regex
- Filter oben rechts aktivieren
 - Apply transformation to:
Query and Transformation resultsQuery series-to-rows-C-C-C-C-C-C-C-C
 - Match: 
Value - Replace: 
memory usage (GB) 
 - Rename fields by regex
- Match: 
Metric - Replace: 
service 
 - Match: 
 - Join by field
- Mode: 
OUTER (TIME SERIES) - Field: 
service 
 - Mode: 
 - Rename fields by regex
- Match: 
(.*) A - Replace: 
$1 
 - Match: 
 
 - Series to rows
 
Aufgabe 4 - Dashboards teilen
- Klicke auf eines deiner selbst erstellten Dashboards
 - Exportiere mit dem 
Export-Button dein Dashboard als JSON-File (ggf. musst du den Editiermodus oben rechts zunächst ausschalten) - Importiere das Dashboard wieder.
 
Lösung (Klicken Sie auf den Pfeil, falls du nicht weiterkommst)
Dashboard -> New -> Import
- Erkunde die Share-Optionen Internally, Externally und Snapshot