Zum Inhalt

PromQL Abfragen schreiben

Ziel

In diesem Projekt lernst du, wie man PromQL-Abfragen formuliert, um Metriken im Explore-Tab von Grafana abzufragen. Dabei wirst du Schritt für Schritt:

  • erste einfache Abfragen schreiben
  • mit Labels und Filtern arbeiten
  • Zeitintervalle und Funktionen nutzen
  • Aggregationen und Kombinationen erstellen

Hilfsmittel

Aufgabe 1 – In Grafana einloggen

  • Öffne Grafana in deinem Browser:
  • URL: https://grafana.cluster.code-{ZAHL}.labs.corewire.de (ersetze {ZAHL} mit deiner Instanznummer)
  • Logge dich mit den Zugangsdaten ein, die dir der Trainer gegeben hat.

Aufgabe 2 – Erste Metriken anzeigen

  • Öffne den Explore Tab in der Grafana Web-Oberfläche .
  • Stelle sicher, dass oben rechts über der Eingabefläche für die Abfrage Code ausgewählt ist.
  • Formuliere die Abfrage up.
  • Führe sie durch drücken von Run query aus.

Die up Metrik zeigt an, ob ein Target erreichbar ist. Der Wert ist 1 bei Erfolg, 0 bei Nichterreichbarkeit.

Aufgabe 3 – Labels nutzen

  • Überprüfe, ob die Node-Exporter-Targets erreichbar sind. Formuliere dazu eine Abfrage, die nur Targets mit der job-Bezeichnung node-exporter berücksichtigt.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)

Beispiel:

up{job="node-exporter"}

  • Filtere zusätzlich nach einem bestimmten Node Exporter über das instance-Feld.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)

Beispiel:

up{job="node-exporter", instance="10.0.0.1:9100"}
(Ersetze die IP-Adresse durch eine, die in deiner Umgebung vorkommt.)

Aufgabe 4 – CPU-Auslastung berechnen

  • Die Metrik node_cpu_seconds_total zählt die CPU-Zeit pro Modus (z. B. idle, user,
    system). Da es sich um einen Zähler handelt, musst du mit rate() die Änderungsrate pro Sekunde berechnen.
  • Nutze die rate-Funktion, um die Zeit über 5 Minuten zu berechnen.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
rate(node_cpu_seconds_total[5m])
  • Filtere nur nach mode=idle.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
rate(node_cpu_seconds_total{mode="idle"}[5m])
  • Bilde den Duchschnitt über alle CPUs einer Node.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)
  • Berechne den Teil der CPU-Zeit, der nicht im Idle-Modus ist.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)

Aufgabe 5 – Filesystem Auslastung

  • Finde die Metriken node_filesystem_size_bytes und node_filesystem_free_bytes.
  • Berechne, wie viel Prozent des Dateisystems belegt sind für Devices mit mountpoint="/".
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)

Beispiel:

 1-node_filesystem_free_bytes{mountpoint="/"}/node_filesystem_size_bytes{mountpoint="/"}

Aufgabe 6 – Aggregationen

  • Verwende avg, sum, min, max Funktionen. Berechne:
  • die durchschnittliche CPU-Auslastung über alle idle-Nodes
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)

Beispiel:

1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m]))

  • den minimalen freien Speicher aller Systeme für den mountpoint="/".
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)

Beispiel:

min(node_filesystem_free_bytes{mountpoint="/"})

  • die Summe aller empfangenen Netzwerkbytes (node_network_receive_bytes_total) an einem bestimmten Device.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)

Beispiel:

sum(node_network_receive_bytes_total{device="enp7s0"})
(Ersetze enp7s0 durch ein Interface, das bei dir existiert.)

Aufgabe 7 – Abfragen kombinieren (optional)

  • Berechne die belegte Speichermenge je Node in Prozent. Nutze die Metriken node_memory_MemAvailable_bytes und node_memory_MemTotal_bytes.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes
  • In einer zweiten Metrik node_uname_info findest du den Hostnamen (nodename) als Label.
  • Kombiniere nun beide Metriken, sodass der Hostname (nodename) in der Ausgabe auftaucht. Verwende dazu on und group_left.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
(node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * on(instance) group_left(nodename) node_uname_info