PromQL (Prometheus Query Language) ist eine flexible und leistungsfähige Abfragesprache, die speziell für das Arbeiten mit Zeitreihendaten in Prometheus entwickelt wurde. Dieses Kapitel behandelt die grundlegenden Konzepte, die Syntax und die wichtigsten Operatoren und Funktionen von PromQL.
PromQL-Abfragen bestehen aus Ausdrücken, die auf Zeitreihen-Daten operieren. Die grundlegende Syntax von PromQL kann in folgende Elemente unterteilt werden:
Beispiele:
# Instant Query: gibt den aktuellen Wert der Metrik 'node_cpu_seconds_total' zurück
node_cpu_seconds_total
# Range Query: gibt den Durchschnittswert der Metrik 'node_cpu_seconds_total' über die letzten 5 Minuten zurück
avg_over_time(node_cpu_seconds_total[5m])
PromQL bietet eine Vielzahl von Operatoren und Funktionen, um komplexe Abfragen zu formulieren und Daten zu analysieren. Hier sind einige der wichtigsten:
+,
-, *, /==,
!=, >, <,
>=, <=and,
or, unlessBeispiele:
# Arithmetische Operation: addiert zwei Metriken
node_cpu_seconds_total + node_memory_MemFree_bytes
# Vergleichsoperation: filtert Zeitreihen, die größer als ein bestimmter Wert sind
node_filesystem_size_bytes > 1e12
# Logische Operation: kombiniert zwei Bedingungen
up == 1 and node_load1 > 0.5
PromQL bietet eine Vielzahl von Funktionen, die auf Zeitreihendaten angewendet werden können. Hier sind einige der wichtigsten Aggregations- und Analysefunktionen, die häufig verwendet werden:
sum(): Summiert alle Werte der ausgewählten
Zeitreihen.avg(): Berechnet den Durchschnittswert der ausgewählten
Zeitreihen.max(): Gibt den maximalen Wert der ausgewählten
Zeitreihen zurück.min(): Gibt den minimalen Wert der ausgewählten
Zeitreihen zurück.Beispiele:
# Summe der CPU-Zeit über alle Kerne
sum(node_cpu_seconds_total)
# Durchschnittlicher Speicherverbrauch
avg(node_memory_MemAvailable_bytes)
# Maximaler Plattenplatz eines Dateisystems
max(node_filesystem_size_bytes)
# Minimaler Plattenplatz eines Dateisystems
min(node_filesystem_size_bytes)
rate(): Berechnet die durchschnittliche Änderungsrate
pro Sekunde.irate(): Berechnet die sofortige Änderungsrate pro
Sekunde.increase(): Berechnet den Anstieg über ein
Zeitfenster.Beispiele:
# Änderungsrate der CPU-Zeit über die letzten 5 Minuten
rate(node_cpu_seconds_total[5m])
# Sofortige Änderungsrate der CPU-Zeit
irate(node_cpu_seconds_total[5m])
# Gesamter Anstieg des Festplattenplatzes über die letzten 24 Stunden
increase(node_filesystem_size_bytes[24h])
topk(): Gibt die Top-K-Zeitreihen nach Wert
zurück.bottomk(): Gibt die Bottom-K-Zeitreihen nach Wert
zurück.Beispiele:
# Top 5 CPU-Verbraucher
topk(5, node_cpu_seconds_total)
# Bottom 5 Speicherverbraucher
bottomk(5, node_memory_MemAvailable_bytes)
Mit diesen Grundlagen können Sie komplexe Abfragen erstellen und tiefere Einblicke in Ihre Metriken gewinnen. In den folgenden Kapiteln werden wir uns mit spezifischen Abfragen und erweiterten Techniken in PromQL beschäftigen.
rate und irateIn PromQL gibt es zwei wichtige Funktionen zur Berechnung der
Änderungsrate: rate() und irate(). Beide
Funktionen werden verwendet, um die Änderungsrate von Zählern über einen
bestimmten Zeitraum zu berechnen, jedoch gibt es wesentliche
Unterschiede in ihrer Anwendung und den Ergebnissen, die sie
liefern.
rate()Die Funktion rate() berechnet die durchschnittliche
Änderungsrate pro Sekunde über ein angegebenes Zeitfenster. Diese
Funktion ist nützlich, um langfristige Trends und durchschnittliche
Änderungsraten zu beobachten. Sie glättet die Daten über das Zeitfenster
und ist weniger empfindlich gegenüber kurzfristigen Schwankungen.
Beispiel:
# Berechnet die durchschnittliche Änderungsrate der CPU-Zeit über die letzten 5 Minuten
rate(node_cpu_seconds_total[5m])
irate()Die Funktion irate() berechnet die sofortige
Änderungsrate zwischen den letzten beiden Stichproben im angegebenen
Zeitfenster. Diese Funktion liefert einen genaueren und aktuelleren Wert
der Änderungsrate, da sie nur die letzten beiden Datenpunkte
berücksichtigt. irate() ist nützlich, um schnelle,
kurzfristige Änderungen zu erkennen.
Beispiel:
# Berechnet die sofortige Änderungsrate der CPU-Zeit über die letzten 5 Minuten
irate(node_cpu_seconds_total[5m])
rate() glättet die Daten
über das gesamte Zeitfenster, während irate() nur die
letzten beiden Datenpunkte verwendet.rate() ist besser für die
Beobachtung langfristiger Trends und Durchschnittswerte geeignet,
während irate() besser für die Erkennung kurzfristiger,
sofortiger Änderungen geeignet ist.rate() ist weniger
empfindlich gegenüber kurzfristigen Schwankungen, irate()
liefert genauere und aktuellere Werte, kann jedoch empfindlicher auf
Datenstörungen reagieren.Stellen Sie sich vor, Sie möchten die Änderungsrate der CPU-Auslastung auf Ihrem Server über die letzten 5 Minuten beobachten.
rate() würde die durchschnittliche Änderungsrate pro
Sekunde über die gesamten 5 Minuten berechnen. Dies bedeutet, es nimmt
alle Datenpunkte (10, 15, 20, 25, 30) und glättet sie, um einen
Durchschnittswert zu erhalten.rate() Funktion etwa die durchschnittliche Änderung als 4
Sekunden pro Minute (30 - 10 = 20, 20 / 5 = 4).irate() würden nur die letzten beiden Datenpunkte
berücksichtigt (25 und 30 Sekunden).irate() berechnet die sofortige Änderungsrate zwischen
diesen beiden letzten Werten. In diesem Fall würde die Änderungsrate 5
Sekunden betragen (30 - 25).Kurz gesagt, rate() gibt Ihnen einen Durchschnitt über
eine längere Zeit, um allgemeine Trends zu sehen, während
irate() Ihnen die sofortige Änderungsrate zeigt, um
schnelle, kurzfristige Änderungen zu erkennen.
Matchers sind ein wesentlicher Bestandteil von PromQL, da sie es
ermöglichen, spezifische Zeitreihen auszuwählen und zu filtern. Matchers
werden in geschweiften Klammern {} verwendet und bestehen
aus Labels und Bedingungen, die angeben, welche Zeitreihen in die
Abfrage einbezogen werden sollen.
Es gibt verschiedene Arten von Matchern, die in PromQL verwendet werden können:
=)!=)=~)!~)=)Der Gleichheitsmatcher wird verwendet, um Zeitreihen auszuwählen, deren Labels exakt mit dem angegebenen Wert übereinstimmen.
Beispiele:
# Wählt alle Zeitreihen aus, bei denen das Label 'instance' genau 'host1' ist
node_cpu_seconds_total{instance="host1"}
!=)Der Ungleichheitsmatcher wird verwendet, um Zeitreihen auszuwählen, deren Labels nicht mit dem angegebenen Wert übereinstimmen.
Beispiele:
# Wählt alle Zeitreihen aus, bei denen das Label 'instance' nicht 'host1' ist
node_cpu_seconds_total{instance!="host1"}
=~)Der Regex-Matcher wird verwendet, um Zeitreihen auszuwählen, deren Labels mit einem regulären Ausdruck übereinstimmen. Dies ist besonders nützlich, um Muster in den Labels zu finden.
Beispiele:
# Wählt alle Zeitreihen aus, bei denen das Label 'instance' mit 'host' beginnt und mit einer Zahl endet
node_cpu_seconds_total{instance=~"host[0-9]+"}
!~)Der negierte Regex-Matcher wird verwendet, um Zeitreihen auszuwählen, deren Labels nicht mit einem regulären Ausdruck übereinstimmen.
Beispiele:
# Wählt alle Zeitreihen aus, bei denen das Label 'instance' nicht mit 'host' beginnt und mit einer Zahl endet
node_cpu_seconds_total{instance!~"host[0-9]+"}
Matchers können kombiniert werden, um spezifischere Abfragen zu erstellen. Dies ermöglicht es, Zeitreihen anhand mehrerer Bedingungen gleichzeitig zu filtern.
Beispiele:
# Wählt alle Zeitreihen aus, bei denen das Label 'instance' 'host1' ist und das Label 'mode' 'user' ist
node_cpu_seconds_total{instance="host1", mode="user"}
# Wählt alle Zeitreihen aus, bei denen das Label 'instance' nicht 'host1' ist und das Label 'mode' nicht 'idle' ist
node_cpu_seconds_total{instance!="host1", mode!="idle"}
Regex-Matcher können komplexere Muster abdecken und sind nützlich, um flexible und dynamische Filterkriterien zu erstellen.
Beispiele:
# Wählt alle Zeitreihen aus, bei denen das Label 'job' mit 'node_exporter' beginnt und beliebigen Zeichen folgt
node_cpu_seconds_total{job=~"node_exporter.*"}
# Wählt alle Zeitreihen aus, bei denen das Label 'mode' entweder 'user' oder 'system' ist
node_cpu_seconds_total{mode=~"^(user|system)$"}
Matcher sind ein wichtiges Werkzeug in PromQL, das Ihnen erlaubt, präzise und flexible Abfragen zu erstellen. Durch die Verwendung von Gleichheits- und Ungleichheitsmatchern, sowie regulären Ausdrücken, können Sie spezifische Zeitreihen effizient filtern und analysieren. Das Verständnis und die richtige Anwendung von Matchern sind entscheidend, um das volle Potenzial von PromQL auszuschöpfen und detaillierte Einblicke in Ihre Überwachungsdaten zu erhalten.
PromQL bietet eine Vielzahl von Möglichkeiten, um Daten abzufragen und zu analysieren. In diesem Kapitel werden verschiedene Arten von Abfragen vorgestellt, die Sie in Ihrer Überwachungsumgebung verwenden können.
Basisabfragen sind einfache Abfragen, die den aktuellen Wert einer Metrik oder eine Reihe von Metriken zurückgeben. Diese Abfragen sind nützlich, um sofortige Werte oder Zustände zu erfassen.
Beispiele:
# Gibt den aktuellen Wert der Metrik 'node_cpu_seconds_total' zurück
node_cpu_seconds_total
# Gibt die freien Speichermengen in Bytes zurück
node_memory_MemFree_bytes
Aggregationsabfragen werden verwendet, um Metriken zusammenzufassen und statistische Informationen zu erhalten. PromQL bietet mehrere Aggregationsfunktionen, die nützlich sind, um Durchschnittswerte, Summen und andere aggregierte Daten zu berechnen.
Beispiele:
# Summiert die CPU-Zeit über alle Kerne
sum(node_cpu_seconds_total)
# Durchschnittlicher Speicherverbrauch
avg(node_memory_MemAvailable_bytes)
# Maximaler Plattenplatz eines Dateisystems
max(node_filesystem_size_bytes)
# Minimaler Plattenplatz eines Dateisystems
min(node_filesystem_size_bytes)
Zeitfensterabfragen sind nützlich, um Änderungen über einen bestimmten Zeitraum zu analysieren. Sie helfen dabei, Trends und Muster zu erkennen, indem sie Daten über einen definierten Zeitraum aggregieren.
Beispiele:
# Berechnet die durchschnittliche Änderungsrate der CPU-Zeit über die letzten 5 Minuten
rate(node_cpu_seconds_total[5m])
# Berechnet die sofortige Änderungsrate der CPU-Zeit
irate(node_cpu_seconds_total[5m])
# Gesamter Anstieg des Festplattenplatzes über die letzten 24 Stunden
increase(node_filesystem_size_bytes[24h])
Vergleichende Abfragen ermöglichen es, Metriken zu vergleichen und Bedingungen zu prüfen. Sie können verwendet werden, um spezifische Werte herauszufiltern oder Beziehungen zwischen verschiedenen Metriken zu analysieren.
Beispiele:
# Filtert Zeitreihen, die größer als ein bestimmter Wert sind
node_filesystem_size_bytes > 1e12
# Kombiniert zwei Bedingungen
up == 1 and node_load1 > 0.5
Zusammengesetzte Abfragen kombinieren mehrere einfache Abfragen, um komplexere Analysen durchzuführen. Diese Abfragen können verwendet werden, um verschiedene Metriken zu vergleichen oder neue Metriken zu berechnen.
Beispiele:
# Kombination von CPU- und Speicherverbrauch
sum(node_cpu_seconds_total) / sum(node_memory_MemAvailable_bytes)
# Verhältnis von freiem zu gesamtem Speicher
(node_memory_MemFree_bytes / node_memory_MemTotal_bytes) * 100
Subqueries und verschachtelte Abfragen ermöglichen die Durchführung komplexer Abfragen, bei denen die Ergebnisse einer Abfrage als Eingabe für eine andere verwendet werden. Dies ist nützlich für detaillierte Analysen und die Erstellung komplexer Metriken.
Beispiele:
# Durchschnittlicher CPU-Verbrauch über alle Kerne in den letzten 10 Minuten
avg_over_time(sum(node_cpu_seconds_total)[10m:1m])
# Der maximale Wert des minimalen freien Speichers in den letzten 24 Stunden
max(min_over_time(node_memory_MemFree_bytes[24h:1h]))
PromQL ermöglicht auch die Verwendung mathematischer Ausdrücke und Berechnungen zur Analyse von Metriken. Dies kann verwendet werden, um neue Metriken zu erstellen oder vorhandene Metriken zu transformieren.
Beispiele:
# CPU-Auslastung in Prozent
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Verhältnis von verfügbarem zu insgesamt verfügbarem Speicher
(node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
Mit diesen Abfragetypen und Techniken können Sie leistungsstarke und detaillierte Analysen Ihrer Überwachungsdaten durchführen. PromQL bietet Ihnen die Flexibilität und die Werkzeuge, die Sie benötigen, um wertvolle Einblicke in die Leistung und den Zustand Ihrer Systeme zu gewinnen.
PromQL bietet erweiterte Techniken, die es Ihnen ermöglichen, tiefere Einblicke in Ihre Metriken zu gewinnen und komplexere Analysen durchzuführen. Dieses Kapitel behandelt einige der fortgeschritteneren Funktionen und Methoden, die in PromQL verfügbar sind.
Zusammengesetzte Abfragen kombinieren mehrere einfache Abfragen, um komplexere Analysen durchzuführen. Diese Abfragen können verwendet werden, um verschiedene Metriken zu vergleichen oder neue Metriken zu berechnen.
Beispiele:
# Kombination von CPU- und Speicherverbrauch
sum(node_cpu_seconds_total) / sum(node_memory_MemAvailable_bytes)
# Verhältnis von freiem zu gesamtem Speicher
(node_memory_MemFree_bytes / node_memory_MemTotal_bytes) * 100
Subqueries und verschachtelte Abfragen ermöglichen die Durchführung komplexer Abfragen, bei denen die Ergebnisse einer Abfrage als Eingabe für eine andere verwendet werden. Dies ist nützlich für detaillierte Analysen und die Erstellung komplexer Metriken.
Beispiele:
# Durchschnittlicher CPU-Verbrauch über alle Kerne in den letzten 10 Minuten
avg_over_time(sum(node_cpu_seconds_total)[10m:1m])
# Der maximale Wert des minimalen freien Speichers in den letzten 24 Stunden
max(min_over_time(node_memory_MemFree_bytes[24h:1h]))
PromQL ermöglicht auch die Verwendung mathematischer Ausdrücke und Berechnungen zur Analyse von Metriken. Dies kann verwendet werden, um neue Metriken zu erstellen oder vorhandene Metriken zu transformieren.
Beispiele:
# CPU-Auslastung in Prozent
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Verhältnis von verfügbarem zu insgesamt verfügbarem Speicher
(node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
Temporale Operatoren erlauben es, Daten über verschiedene Zeitpunkte hinweg zu vergleichen und zu analysieren. Dies ist besonders nützlich für die Trendanalyse und die Überwachung von Veränderungen im Laufe der Zeit.
Beispiele:
# Vergleich des aktuellen Werts mit dem vor 1 Stunde
node_memory_MemAvailable_bytes - node_memory_MemAvailable_bytes offset 1h
# Der Unterschied im CPU-Verbrauch im Vergleich zur letzten Stunde
delta(node_cpu_seconds_total[1h])
Labels spielen eine wichtige Rolle in PromQL, da sie es ermöglichen, Metriken zu filtern und zu gruppieren. Sie können Labels verwenden, um spezifische Zeitreihen zu isolieren oder aggregierte Statistiken zu erstellen.
Beispiele:
# CPU-Verbrauch nach Instanz gruppiert
sum by(instance) (rate(node_cpu_seconds_total[5m]))
# Speicherverbrauch für einen bestimmten Host
node_memory_MemAvailable_bytes{instance="host1"}
PromQL unterstützt Operatoren für Zusammenführungen und Set-Operationen, die es ermöglichen, Zeitreihen zu kombinieren oder zu vergleichen.
Beispiele:
# Union von zwei Zeitreihen
node_cpu_seconds_total{mode="user"} or node_cpu_seconds_total{mode="system"}
# Schnittmenge von zwei Zeitreihen
node_cpu_seconds_total{mode="user"} and node_cpu_seconds_total{mode="system"}
# Differenz von zwei Zeitreihen
node_cpu_seconds_total{mode="user"} unless node_cpu_seconds_total{mode="system"}
Mit diesen erweiterten Techniken können Sie tiefere Einblicke in Ihre Daten gewinnen und komplexere Analysen durchführen. PromQL bietet eine breite Palette von Funktionen und Operatoren, die es Ihnen ermöglichen, Ihre Überwachungs- und Analysefähigkeiten zu erweitern und detaillierte Einblicke in die Leistung und den Zustand Ihrer Systeme zu erhalten.