# PromQL Übersicht #### Auswählen von Metriken Letzten Datensatz anhand des Metrik-Namens auswählen: ``` node_cpu_seconds_total ``` Letzte Datensätze innerhalb eines Zeitraums auswählen: ``` node_cpu_seconds_total[5m] ``` Datensätze mit bestimmten "Label" abrufen: ``` node_cpu_seconds_total{cpu="0",mode="idle"} ``` Datensätze mit komplexer Bezeichnungsübereinstimmung abrufen: ``` node_cpu_seconds_total{cpu!="0",mode=~"user|system"} ```
=Gleich
!=Nicht gleich
=~Regex Übereinstimmung
!~Negativer Regex Übereinstimmung
Wählen Sie Daten von vor einer Zeitspanne aus und verschieben Sie die Daten auf die aktuelle Zeit: ``` process_resident_memory_bytes offset 1d ``` #### Rechnen zwischen verschiedenen Metriken Addiere zwei Metriken mit demselben "Label" miteinander: ``` node_memory_MemFree_bytes + node_memory_Cached_bytes ``` Addiere Metriken miteinander, die nur mit dem `instance` und dem `job` "Label" übereinstimmen: ``` node_memory_MemFree_bytes + on(instance, job) node_memory_Cached_bytes ``` Addiere Metriken miteinander, wobei das `instance` und `job` "Label" ignoriert werden: ``` node_memory_MemFree_bytes + ignoring(instance, job) node_memory_Cached_bytes ``` Mehrfachabgleich explizit erlauben: ``` rate(demo_cpu_usage_seconds_total[1m]) / on(instance, job) group_left demo_num_cpus ``` Versionsbezeichnung in die rechte Seite des Ergebnisses hinzufügen: ``` node_filesystem_avail_bytes * on(instance, job) group_left(version) node_exporter_build_info ```

**Verfügbare Arithmetische Operatoren:** +, -, \*, /, %, ^

#### Quantile aus Histogrammen 90\. Perzentil der Anfragelatenz der letzten 5 Minuten für jede Etikettendimension: ``` histogram_quantile(0.9, rate(demo_api_request_duration_seconds_bucket[5m])) ``` ... nur für die Pfad- und Methodendimensionen: ``` histogram_quantile( 0.9, sum by(le, path, method) ( rate(demo_api_request_duration_seconds_bucket[5m]) ) ) ``` #### Uhrzeit Abfrage für die UNIX-Zeit in Sekunden bei jedem Schritt: ``` time() ``` Ermittelt das Alter des zuletzt laufenden Batch-Jobs: ``` time() - demo_batch_last_success_timestamp_seconds ``` Finden Sie Batch-Aufträge, die in einer Stunde nicht erfolgreich waren: ``` time() - demo_batch_last_success_timestamp_seconds > 3600 ``` #### Unterabfragen Berechnen Sie den 5-Minuten Durchschnitt über einen Zeitraum von 1 Stunde bei einer Standardauflösung der Unterabfrage (=globales Regelauswertungsintervall) ``` rate(demo_api_request_duration_seconds_count[5m])[1h:] ``` Berechnen Sie den 5-Minuten Durchschnitt über einen Zeitraum von 1 Stunde mit einer Auflösung von 15 Sekunden: ``` max_over_time( rate( demo_api_request_duration_seconds_count[5m] )[1h:] ) ``` #### Steigerungsraten für Zähler Anstiegsrate pro Sekunde, ermittelt über die letzten 5 Minuten: ``` rate(demo_api_request_duration_seconds_count[5m]) ``` Anstiegsrate pro Sekunde, berechnet über die letzten beiden Messwerte in einem 1-Minuten Zeitfenster: ``` irate(demo_api_request_duration_seconds_count[1m]) ``` Absoluter Anstieg in der letzten Stunde: ``` increase(demo_api_request_duration_seconds_count[1h]) ``` #### Filtern von Metriken nach Werten Auswählen von Datensätzen, die höher als eine angegebene Zahl ist: ``` node_filesystem_avail_bytes > 10*1024*1024 ``` Behalten Sie nur die Reihen auf der linken Seite, deren Werte größer sind als die der rechten Seite: ``` go_goroutines > go_threads ``` Anstatt zu filtern, geben Sie für jede verglichende Reihe eine `0` oder eine `1` zurück: ``` go_goroutines > bool go_threads ``` Übereinstimmung nur bei bestimmten "Labeln": ``` go_goroutines > bool on(job, instance) go_threads ```

**Verfügbare Vergleichsoperatoren:** ==, !=, >, <, >=, <=

#### Änderungen der Messergebnisse Ableitung pro Sekunde mittels linearer Regression: ``` deriv(demo_disk_usage_bytes[1h]) ``` Absolute Wertänderung in der letzten Stunde: ``` delta(demo_disk_usage_bytes[1h]) ``` Prognostizieren Sie den Wert in 1 Stunde, basierend auf den letzten 4 Stunden: ``` predict_linear(demo_disk_usage_bytes[4h], 3600) ``` #### Umgang mit fehlenden Daten Erstellt eine Ausgabeserie, wenn der Eingabevektor leer ist: ``` absent(up{job="some-job"}) ``` Erstellt eine Ausgabeserie, wenn der Eingabevektor 5 Minuten lang leer ist: ``` absent_over_time(up{job="some-job"}[5m]) ``` #### Aggregieren über mehrere Serien Summe über alle Serien: ``` sum(node_filesystem_size_bytes) ``` Behalten Sie die Abmessungen der `Instanz` und des `Job` "Labels" bei: ``` sum by(job, instance) (node_filesystem_size_bytes) ``` Aggregieren Sie die Instanz und Job "Label" weg: ``` sum without(instance, job) (node_filesystem_size_bytes) ```

**Verfügbare Aggregierungs-Operatoren:** sum(), min(), max(), avg(), stddev(), stdvar(), count(), count\_values(), group(), bottomk(), topk(), quantile()

#### Eingestellte Operationen Schließen Sie alle "Label" Datensätze ein, die sich entweder auf der linken oder auf der rechten Seite befinden: ``` up{job="prometheus"} or up{job="node"} ``` Schließen Sie alle "Label" Datensätze ein, die sowohl auf der linken als auch auf der rechten Seite vorhanden sind: ``` node_network_mtu_bytes and (node_network_address_assign_type == 0) ``` Schließen Sie alle "Label" Datensätze der linken Seite ein, die auf der rechten Seite nicht vorhanden sind: ``` node_network_mtu_bytes unless (node_network_address_assign_type == 1) ``` Übereinstimmung nur bei bestimmten "Labeln": ``` node_network_mtu_bytes and on(device) (node_network_address_assign_type == 0) ``` #### Aggregieren über die Zeit Durchschnitt innerhalb einer Metrik über einen Zeitraum von 5-Minuten: ``` avg_over_time(go_goroutines[5m]) ``` Ermitteln Sie das Maximum für eine Metrik innerhalb eines Tages: ``` max_over_time(process_resident_memory_bytes[1d]) ``` Zählen Sie die Anzahl der Datensätze für jede Metrik über einen Zeitraum von 5-Minuten: ``` count_over_time(process_resident_memory_bytes[5m]) ```

**Siehe alle verfügbaren xxx\_over\_time() Aggregationsfunktionen:** [Zeit Aggregationsfunktionen](https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time)

#### Manipulation von Labeln Verbinden Sie die Datensätze von zwei Etiketten mit einem "-" Trennzeichen zu einem neuen Endpunkt-"Label": ``` label_join(rate(demo_api_request_duration_seconds_count[5m]), "endpoint", " ", "method", "path") ``` Extrahieren Sie einen Teil eines Labels und speichern Sie diesen in einem neuen "Label": ``` label_replace(up, "hostname", "$1", "instance", "(.+):(\\d+)") ```