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 data
erstelle eine neue Referenz mit dem Namenteam-data
und 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:
team
cost (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:
cost
asNumber
- Field:
sla
asNumber
- Field:
- Type:
Group by
team
:Group by
cost
:Calculate
->Total
sla
:Calculate
->Mean
- Type:
Sort by
cost (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])) * 100
sum 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:
team
service
cost
sla
cpu 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 results
Query B
- Series to rows
- Filter oben rechts aktivieren
- Apply transformation to:
Query and Transformation results
Query C
- Filter fields by name
- Time (ausblenden)
- Rename fields by regex
- Filter oben rechts aktivieren
- Apply transformation to:
Query and Transformation results
Query 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 results
Query 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