17 Prometheus-Prüfungen
Übersicht
Zabbix kann Metriken abfragen, die im Prometheus-Zeilenformat bereitgestellt werden.
Zum Starten der Erfassung von Prometheus-Daten sind zwei Schritte erforderlich:
- ein HTTP-Master-Datenpunkt, der
auf den entsprechenden Datenendpunkt verweist, z. B.
https://<prometheus host>/metrics - abhängige Datenpunkte, die eine Prometheus-Vorverarbeitungsoption verwenden, um die erforderlichen Daten aus den vom Master-Datenpunkt erfassten Metriken abzufragen
Es gibt zwei Vorverarbeitungsoptionen für Prometheus-Daten:
- Prometheus-Muster - wird in normalen Datenpunkten verwendet, um Prometheus-Daten abzufragen
- Prometheus zu JSON - wird in normalen Datenpunkten und für Low-Level-Discovery verwendet. In diesem Fall werden die abgefragten Prometheus-Daten im JSON-Format zurückgegeben.
Stapelverarbeitung
Die Stapelverarbeitung wird für abhängige Datenpunkte unterstützt. Um Caching und Indizierung zu aktivieren,
muss die Vorverarbeitung Prometheus pattern der erste Vorverarbeitungsschritt sein.
Wenn Prometheus pattern der erste Vorverarbeitungsschritt ist, werden die geparsten Prometheus-Daten
zwischengespeichert und anhand der ersten Bedingung <label>==<value> im
Vorverarbeitungsschritt Prometheus pattern indiziert. Dieser Cache wird bei der Verarbeitung
anderer abhängiger Datenpunkte in diesem Stapel wiederverwendet. Für eine optimale Leistung
sollte das erste Label dasjenige mit den meisten unterschiedlichen Werten sein.
Falls vor dem ersten Schritt weitere Vorverarbeitung erforderlich ist, sollte sie entweder in den Master-Datenpunkt verschoben werden oder in einen neuen abhängigen Datenpunkt, der als Master-Datenpunkt für die abhängigen Datenpunkte verwendet wird.
Konfiguration
Vorausgesetzt, dass Sie den HTTP-Master-Datenpunkt konfiguriert haben, müssen Sie einen abhängigen Datenpunkt erstellen, der einen Prometheus-Präprozessierungsschritt verwendet:
- Geben Sie die allgemeinen Parameter für den abhängigen Datenpunkt im Konfigurationsformular ein
- Wechseln Sie auf die Registerkarte „Preprocessing“
- Wählen Sie eine Prometheus-Präprozessierungsoption aus (Prometheus pattern oder Prometheus to JSON)

Die folgenden Parameter sind spezifisch für die Präprozessierungsoption Prometheus pattern:
| Parameter | Beschreibung | Beispiele |
|---|---|---|
| Pattern | Um das erforderliche Datenmuster zu definieren, können Sie eine Abfragesprache verwenden, die der Prometheus-Abfragesprache ähnelt (siehe Vergleichstabelle), z. B.: <metric name> - Auswahl nach Metriknamen {__name__="<metric name>"} - Auswahl nach Metriknamen {__name__=\~"<regex>"} - Auswahl nach Metriknamen, die einem regulären Ausdruck entsprechen {<label name>="<label value>",...} - Auswahl nach Label-Namen {<label name>=\~"<regex>",...} - Auswahl nach Label-Namen, die einem regulären Ausdruck entsprechen {__name__=\~".*"}==<value> - Auswahl nach Metrikwert Oder eine Kombination aus den obigen Angaben: <metric name>{<label1 name>="<label1 value>",<label2 name>=\~"<regex>",...}==<value> Der Label-Wert kann eine beliebige Folge von UTF-8-Zeichen sein, aber Backslash, doppeltes Anführungszeichen und Zeilenvorschub müssen jeweils als \\, \" und \n maskiert werden; andere Zeichen dürfen nicht maskiert werden. |
wmi_os_physical_memory_free_bytes cpu_usage_system{cpu="cpu-total"} cpu_usage_system{cpu=\~".*"} cpu_usage_system{cpu="cpu-total",host=\~".*"} wmi_service_state{name="dhcp"}==1 wmi_os_timezone{timezone=\~".*"}==1 |
| Result processing | Geben Sie an, ob der Wert oder das Label zurückgegeben oder die entsprechende Funktion angewendet werden soll (wenn das Muster mit mehreren Zeilen übereinstimmt und das Ergebnis aggregiert werden muss): value - Metrikwert zurückgeben (Fehler, wenn mehrere Zeilen übereinstimmen) label - Wert des im Feld Label angegebenen Labels zurückgeben (Fehler, wenn mehrere Metriken übereinstimmen) sum - Summe der Werte zurückgeben min - Minimalwert zurückgeben max - Maximalwert zurückgeben avg - Durchschnittswert zurückgeben count - Anzahl der Werte zurückgeben Dieses Feld ist nur für die Option Prometheus pattern verfügbar. |
Siehe auch die folgenden Beispiele zur Verwendung der Parameter. |
| Output | Definieren Sie den Label-Namen (optional). In diesem Fall wird der dem Label-Namen entsprechende Wert zurückgegeben. Dieses Feld ist nur für die Option Prometheus pattern verfügbar, wenn im Feld Result processing „Label“ ausgewählt ist. |
Beispiele für die Verwendung von Parametern
- Der häufigste Anwendungsfall ist die Rückgabe des Werts. Um
den Wert von
/var/dbaus
node_disk_usage_bytes{path="/var/cache"} 2.1766144e+09
node_disk_usage_bytes{path="/var/db"} 20480
node_disk_usage_bytes{path="/var/dpkg"} 8192
node_disk_usage_bytes{path="/var/empty"} 4096
zurückzugeben, verwenden Sie die folgenden Parameter:
- Pattern -
node_disk_usage_bytes{path="/var/db"} - Result processing - wählen Sie „value“
- Möglicherweise interessiert Sie auch der Durchschnittswert aller
Parameter
node_disk_usage_bytes:
- Pattern -
node_disk_usage_bytes - Result processing - wählen Sie „avg“
- Obwohl Prometheus nur numerische Daten unterstützt, ist es üblich, einen Workaround zu verwenden, der es ermöglicht, auch die relevante textuelle Beschreibung zurückzugeben. Dies kann mit einem Filter und durch Angabe des Labels erreicht werden. Um also den Wert des Labels „color“ aus
elasticsearch_cluster_health_status{cluster="elasticsearch",color="green"} 1
elasticsearch_cluster_health_status{cluster="elasticsearch",color="red"} 0
elasticsearch_cluster_health_status{cluster="elasticsearch",color="yellow"} 0
zurückzugeben, verwenden Sie die folgenden Parameter:
- Pattern -
elasticsearch_cluster_health_status {cluster="elasticsearch"} == 1 - Result processing - wählen Sie „label“
- Label - geben Sie „color“ an
Der Filter (basierend auf dem numerischen Wert „1“) findet die entsprechende Zeile, während das Label die Beschreibung des Gesundheitsstatus zurückgibt (derzeit „green“, potenziell aber auch „red“ oder „yellow“).
Prometheus zu JSON
Daten aus Prometheus können für die Low-Level-Discovery verwendet werden. In diesem Fall werden Daten im JSON-Format benötigt, und die Vorverarbeitungsoption Prometheus zu JSON liefert genau diese.
Weitere Details finden Sie unter Discovery using Prometheus data.
Vergleich der Abfragesprachen
Die folgende Tabelle listet Unterschiede und Gemeinsamkeiten zwischen PromQL und der Zabbix-Prometheus-Preprocessing-Abfragesprache auf.
| PromQL instant vector selector | Zabbix-Prometheus-Preprocessing | |
|---|---|---|
| Unterschiede | ||
| Abfrageziel | Prometheus-Server | Klartext im Prometheus-Expositionsformat |
| Gibt zurück | Instant-Vektor | Metrik- oder Label-Wert (Prometheus-Muster) Array von Metriken für einen einzelnen Wert in JSON (Prometheus zu JSON) |
| Label-Matching-Operatoren | =, !=, =\~, !\~ | =, !=, =\~, !\~ |
| Für das Matching von Labeln oder Metriknamen verwendeter regulärer Ausdruck | RE2 | PCRE |
| Vergleichsoperatoren | Siehe Liste | Für die Wertfilterung wird nur == (gleich) unterstützt |
| Gemeinsamkeiten | ||
| Auswahl nach Metrikname, der einer Zeichenfolge entspricht | <metric name> oder {__name__="<metric name>"} | <metric name> oder {__name__="<metric name>"} |
| Auswahl nach Metrikname, der einem regulären Ausdruck entspricht | {__name__=\~"<regex>"} | {__name__=\~"<regex>"} |
| Auswahl nach Wert von <label name>, der einer Zeichenfolge entspricht | {<label name>="<label value>",...} | {<label name>="<label value>",...} |
| Auswahl nach Wert von <label name>, der einem regulären Ausdruck entspricht | {<label name>=\~"<regex>",...} | {<label name>=\~"<regex>",...} |
| Auswahl nach Wert, der einer Zeichenfolge entspricht | {__name__=\~".*"} == <value> | {__name__=\~".*"} == <value> |