1 Prometheus-Prüfung
Ü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 Prometheus-Datenvorverarbeitungsoptionen:
- Prometheus pattern - wird in normalen Datenpunkten verwendet, um Prometheus-Daten abzufragen
- Prometheus to JSON - wird in normalen Datenpunkten und für die Low-Level-Erkennung 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 Indexierung zu aktivieren, muss die Vorverarbeitung Prometheus pattern der erste Vorverarbeitungsschritt sein. Wenn Prometheus pattern der erste Vorverarbeitungsschritt ist, werden die geparsten Prometheus-Daten durch die erste <label>==<value>-Bedingung im Vorverarbeitungsschritt Prometheus pattern zwischengespeichert und indexiert. Dieser Cache wird bei der Verarbeitung anderer abhängiger Datenpunkte in diesem Batch wiederverwendet. Für eine optimale Leistung sollte das erste Label dasjenige mit den meisten unterschiedlichen Werten sein.
Wenn vor dem ersten Schritt noch weitere Vorverarbeitung durchgeführt werden muss, sollte sie entweder auf den Master-Datenpunkt oder auf einen neuen abhängigen Datenpunkt verschoben werden, der dann als Master-Datenpunkt für die abhängigen Datenpunkte verwendet wird.
Konfiguration
Vorausgesetzt, Sie haben den HTTP-Master-Datenpunkt konfiguriert, müssen Sie einen abhängigen Datenpunkt erstellen, der einen Prometheus-Preprocessing-Schritt verwendet:
- Geben Sie die allgemeinen Parameter des abhängigen Datenpunkts im Konfigurationsformular ein
- Wechseln Sie zur Registerkarte Preprocessing
- Wählen Sie eine Prometheus-Preprocessing-Option (Prometheus pattern oder Prometheus to JSON)

Die folgenden Parameter sind spezifisch für die Preprocessing-Option 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 Labelnamen {<label name>=\~"<regex>",...} - Auswahl nach Labelnamen, die einem regulären Ausdruck entsprechen {__name__=\~".*"}==<value> - Auswahl nach Metrikwert Oder eine Kombination der oben genannten: <metric name>{<label1 name>="<label1 value>",<label2 name>=\~"<regex>",...}==<value> Der Labelwert kann eine beliebige Folge von UTF-8-Zeichen sein, jedoch müssen der Backslash, das doppelte Anführungszeichen und das Zeilenumbruchzeichen 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 werden soll oder ob die entsprechende Funktion angewendet werden soll (wenn das Muster mehrere Zeilen trifft 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 von Parametern. |
| Output | Labelnamen definieren (optional). In diesem Fall wird der dem Labelnamen 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 - 'value' auswählen
- Möglicherweise interessiert Sie auch der Durchschnittswert aller
node_disk_usage_bytes-Parameter:
- Pattern -
node_disk_usage_bytes - Result processing - 'avg' auswählen
- Obwohl Prometheus nur numerische Daten unterstützt, ist ein Workaround verbreitet, mit dem auch die relevante textuelle Beschreibung zurückgegeben werden kann. Dies kann mit einem Filter und der 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 - 'label' auswählen
- Label - 'color' angeben
Der Filter (basierend auf dem numerischen Wert '1') stimmt mit der entsprechenden Zeile überein, während das Label die Beschreibung des Gesundheitsstatus zurückgibt (derzeit 'green'; möglicherweise aber auch 'red' oder 'yellow').
Prometheus zu JSON
Daten aus Prometheus können für Low-Level-Discovery verwendet werden. In diesem Fall werden Daten im JSON-Format benötigt, und die Vorverarbeitungsoption Prometheus to JSON liefert genau das.
Weitere Details finden Sie unter Discovery using Prometheus data.
Vergleich der Abfragesprache
Die folgende Tabelle listet Unterschiede und Gemeinsamkeiten zwischen PromQL und der Zabbix-Preprocessing-Abfragesprache für Prometheus auf.
| PromQL instant vector selector | Zabbix Prometheus preprocessing | |
|---|---|---|
| Unterschiede | ||
| Abfrageziel | Prometheus Server | Einfacher Text im Prometheus-Expositionsformat |
| Rückgabewert | Instant Vector | Metrik- oder Labelwert (Prometheus-Muster) Array von Metriken für einen einzelnen Wert in JSON (Prometheus zu JSON) |
| Label-Matching-Operatoren | =, !=, =\~, !\~ | =, !=, =\~, !\~ |
| Bei der Übereinstimmung von Label- oder Metriknamen verwendeter regulärer Ausdruck | RE2 | PCRE |
| Vergleichsoperatoren | Siehe Liste | Für die Wertfilterung wird nur == (gleich) unterstützt |
| Gemeinsamkeiten | ||
| Auswahl nach Metriknamen, der mit einer Zeichenfolge übereinstimmt | <metric name> oder {__name__="<metric name>"} | <metric name> oder {__name__="<metric name>"} |
| Auswahl nach Metriknamen, der mit einem regulären Ausdruck übereinstimmt | {__name__=\~"<regex>"} | {__name__=\~"<regex>"} |
| Auswahl nach <label name>-Wert, der mit einer Zeichenfolge übereinstimmt | {<label name>="<label value>",...} | {<label name>="<label value>",...} |
| Auswahl nach <label name>-Wert, der mit einem regulären Ausdruck übereinstimmt | {<label name>=\~"<regex>",...} | {<label name>=\~"<regex>",...} |
| Auswahl nach einem Wert, der mit einer Zeichenfolge übereinstimmt | {__name__=\~".*"} == <value> | {__name__=\~".*"} == <value> |