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
- Verwende die Prometheus Doku als Referenz.
 
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 
Codeausgewählt ist. - Formuliere die Abfrage 
up. - Führe sie durch drücken von 
Run queryaus. 
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-Bezeichnungnode-exporterberü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"}
Aufgabe 4 – CPU-Auslastung berechnen
- Die Metrik 
node_cpu_seconds_totalzä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_bytesundnode_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,maxFunktionen. 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"})
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_bytesundnode_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 
onundgroup_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