Zum Inhalt

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 Namen team-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
  • Transformationen:
    • Type: Convert field type
      • Field: cost as Number
      • Field: sla as Number
    • Type: Group by
      • team: Group by
      • cost: Calculate -> Total
      • sla: Calculate -> Mean
    • Type: Sort by
      • cost (sum) -> Reverse

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:
    1. Series to rows
      • Filter oben rechts aktivieren
      • Apply transformation to:
        • Query and Transformation results
        • Query B
    2. Series to rows
      • Filter oben rechts aktivieren
      • Apply transformation to:
        • Query and Transformation results
        • Query C
    3. Filter fields by name
      • Time (ausblenden)
    4. 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 (%)
    5. 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)
    6. Rename fields by regex
      • Match: Metric
      • Replace: service
    7. Join by field
      • Mode: OUTER (TIME SERIES)
      • Field: service
    8. Rename fields by regex
      • Match: (.*) A
      • Replace: $1

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