Skip to main content

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

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+)")