2 Streaming an externe Systeme
Übersicht
Es ist möglich, Datenpunktwerte und Ereignisse aus Zabbix über HTTP an externe Systeme zu streamen (siehe Protokolldetails).
Der Tag-Filter kann verwendet werden, um Teilmengen von Datenpunktwerten oder Ereignissen zu streamen.
Zwei Zabbix-Server-Prozesstypen sind für das Daten-Streaming verantwortlich: connector manager und connector worker.
Ein internes Zabbix-Datenpunkt zabbix[connector_queue] ermöglicht die Überwachung der Anzahl der in die Connector-Warteschlange eingereihten Werte.
Konfiguration
Die folgenden Schritte sind erforderlich, um das Streaming von Daten an ein externes System zu konfigurieren:
1. Richten Sie ein Remote-System für den Empfang von Daten von Zabbix ein. Zu diesem Zweck stehen die folgenden Tools zur Verfügung:
- Ein Beispiel für einen einfachen Empfänger, der die empfangenen Informationen in den Dateien
events.ndjsonundhistory.ndjsonprotokolliert. - Kafka connector for Zabbix server – ein schlanker, in Go geschriebener Server, der dafür ausgelegt ist, Datenpunktwerte und Ereignisse von einem Zabbix-Server an einen Kafka-Broker weiterzuleiten.
2. Legen Sie die erforderliche Anzahl von Connector-Workern in Zabbix fest, indem Sie den Parameter StartConnectors in zabbix_server.conf anpassen.
Die Anzahl der Connector-Worker sollte der in der Zabbix-Frontend konfigurierten Connector-Anzahl entsprechen (oder diese überschreiten, wenn mehr als eine gleichzeitige Sitzung konfiguriert ist).
Starten Sie anschließend den Zabbix-Server neu.
3. Konfigurieren Sie einen neuen Connector im Zabbix-Frontend (Administration > General > Connectors) und laden Sie den Server-Cache mit dem Befehl zabbix_server -R config_cache_reload neu.

Pflichtfelder sind mit einem Sternchen gekennzeichnet.
| Parameter | Beschreibung |
|---|---|
| Name | Geben Sie den Namen des Connectors ein. |
| Data type | Wählen Sie den zu streamenden Datentyp aus: Item values – Datenpunktwerte von Zabbix an externe Systeme streamen; Events – Ereignisse von Zabbix an externe Systeme streamen. |
| URL | Geben Sie die URL des Empfängers ein. Benutzermakros werden unterstützt. |
| Tag filter | Exportieren Sie nur Datenpunktwerte oder Ereignisse, die dem Tag-Filter entsprechen. Wenn kein Filter festgelegt ist, wird alles exportiert. Es ist möglich, bestimmte Tags und Tag-Werte einzuschließen oder auszuschließen. Es können mehrere Bedingungen festgelegt werden. Beim Abgleich von Tagnamen wird immer zwischen Groß- und Kleinschreibung unterschieden. Für jede Bedingung stehen mehrere Operatoren zur Verfügung: Exists – die angegebenen Tagnamen einschließen; Equals – die angegebenen Tagnamen und -werte einschließen (Groß-/Kleinschreibung wird berücksichtigt); Contains – die angegebenen Tagnamen einschließen, deren Tag-Werte die eingegebene Zeichenfolge enthalten (Teilzeichenfolgenabgleich ohne Berücksichtigung der Groß-/Kleinschreibung); Does not exist – die angegebenen Tagnamen ausschließen; Does not equal – die angegebenen Tagnamen und -werte ausschließen (Groß-/Kleinschreibung wird berücksichtigt); Does not contain – die angegebenen Tagnamen ausschließen, deren Tag-Werte die eingegebene Zeichenfolge enthalten (Teilzeichenfolgenabgleich ohne Berücksichtigung der Groß-/Kleinschreibung). Für Bedingungen stehen zwei Berechnungstypen zur Verfügung: And/Or – alle Bedingungen müssen erfüllt sein; Bedingungen mit demselben Tagnamen werden mit der Or-Bedingung gruppiert; Or – es genügt, wenn eine Bedingung erfüllt ist. |
| Type of information | Wählen Sie den Informationstyp (numerisch (unsigned), numerisch (float), Zeichen, usw.) aus, nach dem die Datenpunktwerte gefiltert werden sollen, die der Connector streamen soll. Dieses Feld ist verfügbar, wenn Data type auf „Item values“ gesetzt ist. |
| HTTP authentication | Wählen Sie die Authentifizierungsoption aus: None – keine Authentifizierung wird verwendet; Basic – die Basisauthentifizierung wird verwendet; NTLM – die NTLM-Authentifizierung (Windows NT LAN Manager) wird verwendet; Kerberos – die Kerberos-Authentifizierung wird verwendet (siehe auch: Kerberos mit Zabbix konfigurieren); Digest – die Digest-Authentifizierung wird verwendet; Bearer – die Bearer-Authentifizierung wird verwendet. |
| Username | Geben Sie den Benutzernamen ein (bis zu 255 Zeichen). Benutzermakros werden unterstützt. Dieses Feld ist verfügbar, wenn HTTP authentication auf „Basic“, „NTLM“, „Kerberos“ oder „Digest“ gesetzt ist. |
| Password | Geben Sie das Benutzerpasswort ein (bis zu 255 Zeichen). Benutzermakros werden unterstützt. Dieses Feld ist verfügbar, wenn HTTP authentication auf „Basic“, „NTLM“, „Kerberos“ oder „Digest“ gesetzt ist. |
| Bearer token | Geben Sie das Bearer-Token ein. Benutzermakros werden unterstützt. Dieses Feld ist verfügbar und erforderlich, wenn HTTP authentication auf „Bearer“ gesetzt ist. |
| Advanced configuration | Klicken Sie auf die Überschrift Advanced configuration, um die erweiterten Konfigurationsoptionen anzuzeigen (siehe unten). |
| Max records per message | Geben Sie die maximale Anzahl von Werten oder Ereignissen an, die innerhalb einer Nachricht gestreamt werden können. |
| Concurrent sessions | Wählen Sie die Anzahl der Senderprozesse aus, die für diesen Connector ausgeführt werden sollen. Es können bis zu 100 Sitzungen angegeben werden; der Standardwert ist „1“. |
| Attempts | Anzahl der Versuche zum Streamen von Daten. Es können bis zu 5 Versuche angegeben werden; der Standardwert ist „1“. |
| Attempt interval | Geben Sie an, wie lange der Connector nach einem erfolglosen Versuch, Daten zu streamen, warten soll. Es können bis zu 10 s angegeben werden; der Standardwert ist „5 s“. Dieses Feld ist verfügbar, wenn Attempts auf „2“ oder höher gesetzt ist. Als erfolglos gelten Versuche, bei denen der Verbindungsaufbau fehlgeschlagen ist oder der HTTP-Antwortcode nicht 200, 201, 202, 203 oder 204 lautet. Wiederholungen werden bei Kommunikationsfehlern oder wenn der HTTP-Antwortcode nicht 200, 201, 202, 203, 204, 400, 401, 403, 404, 405, 415 oder 422 lautet, ausgelöst. Weiterleitungen werden verfolgt, daher ist 302 -> 200 eine positive Antwort, während 302 -> 503 eine Wiederholung auslöst. |
| Timeout | Geben Sie das Nachrichten-Timeout an (1–60 Sekunden, Standardwert: 5 Sekunden). Zeit-Suffixe werden unterstützt (z. B. 30s, 1m). Benutzermakros werden unterstützt. |
| HTTP proxy | Sie können einen HTTP-Proxy im folgenden Format angeben:[protocol://][username[:password]@]proxy.example.com[:port]Benutzermakros werden unterstützt. Das optionale Präfix protocol:// kann verwendet werden, um alternative Proxy-Protokolle anzugeben (die Unterstützung für Protokollpräfixe wurde in cURL 7.21.7 hinzugefügt). Wenn kein Protokoll angegeben ist, wird der Proxy als HTTP-Proxy behandelt. Standardmäßig wird Port 1080 verwendet.Wenn HTTP proxy angegeben ist, überschreibt der Proxy umgebungsbezogene Proxy-Variablen wie http_proxy und HTTPS_PROXY. Wenn kein Proxy angegeben ist, werden Proxy-bezogene Umgebungsvariablen nicht überschrieben. Der eingegebene Wert wird unverändert weitergegeben; es findet keine Plausibilitätsprüfung statt.Sie können auch eine SOCKS-Proxyadresse eingeben. Wenn Sie das falsche Protokoll angeben, kann der Connector keine Datenpunktwerte oder Ereignisse von Zabbix streamen. Beachten Sie, dass beim HTTP-Proxy nur eine einfache Authentifizierung unterstützt wird. |
| SSL verify peer | Aktivieren Sie das Kontrollkästchen, um das SSL-Zertifikat des Webservers zu überprüfen. Das Serverzertifikat wird automatisch aus dem systemweiten Speicherort der Zertifizierungsstellen (CA) bezogen. Sie können den Speicherort der CA-Dateien mithilfe des Zabbix-Server- oder Proxy-Konfigurationsparameters SSLCALocation überschreiben. |
| SSL verify host | Aktivieren Sie das Kontrollkästchen, um zu überprüfen, ob das Feld Common Name oder das Feld Subject Alternate Name des Webserverzertifikats übereinstimmt. Dadurch wird die cURL-Option CURLOPT_SSL_VERIFYHOST festgelegt. |
| SSL certificate file | Name der SSL-Zertifikatsdatei, die für die Clientauthentifizierung verwendet wird. Die Zertifikatsdatei muss im PEM1-Format vorliegen. Benutzermakros werden unterstützt. Wenn die Zertifikatsdatei auch den privaten Schlüssel enthält, lassen Sie das Feld SSL key file leer. Wenn der Schlüssel verschlüsselt ist, geben Sie das Passwort im Feld SSL key password an. Das Verzeichnis, das diese Datei enthält, wird durch den Zabbix-Server- oder Proxy-Konfigurationsparameter SSLCertLocation angegeben. |
| SSL key file | Name der privaten SSL-Schlüsseldatei, die für die Clientauthentifizierung verwendet wird. Die private Schlüsseldatei muss im PEM1-Format vorliegen. Benutzermakros werden unterstützt. Das Verzeichnis, das diese Datei enthält, wird durch den Zabbix-Server- oder Proxy-Konfigurationsparameter SSLKeyLocation angegeben. |
| SSL key password | Passwort der privaten SSL-Schlüsseldatei. Benutzermakros werden unterstützt. |
| Description | Geben Sie die Beschreibung des Connectors ein. |
| Enabled | Aktivieren Sie das Kontrollkästchen, um den Connector zu aktivieren. |
Wenn der Kafka-Connector mit einer durch Kommas getrennten Liste von Bootstrap-Brokeradressen konfiguriert ist (zum Beispiel Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093), stellt der Kafka-Client eine Verbindung zu dem oder den Brokern her, die zuerst antworten, und verwendet deren Cluster-Metadaten.
Wenn die Liste Adressen aus verschiedenen Kafka-Clustern enthält, wird nur der am schnellsten antwortende Cluster verwendet und andere Adressen werden als nicht verfügbar protokolliert. Daher können beim Start Warnungen wie die folgende erscheinen, obwohl der Connector verbunden ist:
kafka cluster connected, but broker(s) "kafka1.example.com:9093, kafka2.example.com:9093" unavailable; will retry on message send if active brokers fail
In einigen Umgebungen (privaten Netzwerken, Container-Netzwerken oder bei nicht standardmäßigen DNS-/Hosts-Konfigurationen) können Hostnamen oder IP-Adressen in Loopback-Adressen (zum Beispiel 127.0.0.1/localhost) aufgelöst oder vom Client normalisiert werden, wodurch solche Warnungen irreführend sein können.
Um Verwirrung zu vermeiden, stellen Sie sicher, dass alle Kafka.URL-Adressen zum selben Kafka-Cluster gehören, überprüfen Sie die DNS-Auflösung vom Connector-Host sowie die advertised.listeners der Broker und bevorzugen Sie Adressen, die in die vom Broker angekündigte Adresse aufgelöst werden.
Protokoll
Die Kommunikation zwischen dem Server und dem Empfänger erfolgt über HTTP unter Verwendung der REST-API, NDJSON, „Content-Type: application/x-ndjson“.
Weitere Einzelheiten finden Sie unter Newline-delimited JSON export protocol.
Server-Anfrage
Beispiel für das Streamen von Datenpunkt-Werten:
POST /v1/history HTTP/1.1
Host: localhost:8080
Accept: */*
Accept-Encoding: deflate, gzip, br, zstd
Content-Length: 628
Content-Type: application/x-ndjson
{"host":{"host":"Zabbix server","name":"Zabbix server"},"groups":["Zabbix servers"],"item_tags":[{"tag":"foo","value":"test"}],"itemid":44457,"name":"foo","clock":1673454303,"ns":800155804,"value":0,"type":3}
{"host":{"host":"Zabbix server","name":"Zabbix server"},"groups":["Zabbix servers"],"item_tags":[{"tag":"foo","value":"test"}],"itemid":44457,"name":"foo","clock":1673454303,"ns":832290669,"value":1,"type":3}
{"host":{"host":"Zabbix server","name":"Zabbix server"},"groups":["Zabbix servers"],"item_tags":[{"tag":"bar","value":"test"}],"itemid":44458,"name":"bar","clock":1673454303,"ns":867770366,"value":123,"type":3}
Beispiel für das Streamen von Ereignissen:
POST /v1/events HTTP/1.1
Host: localhost:8080
Accept: */*
Accept-Encoding: deflate, gzip, br, zstd
Content-Length: 333
Content-Type: application/x-ndjson
{"clock":1673454303,"ns":800155804,"value":1,"eventid":5,"name":"trigger for foo being 0","severity":0,"hosts":[{"host":"Zabbix server","name":"Zabbix server"}],"groups":["Zabbix servers"],"tags":[{"tag":"foo_trig","value":"test"},{"tag":"foo","value":"test"}]}
{"clock":1673454303,"ns":832290669,"value":0,"eventid":6,"p_eventid":5}
Antwort des Empfängers
Die Antwort besteht aus dem HTTP-Antwortstatuscode und der JSON-Nutzlast. Der HTTP-Antwortstatuscode muss für erfolgreich verarbeitete Anfragen "200", "201", "202", "203" oder "204" sein, andernfalls gilt die Anfrage als fehlgeschlagen.
Beispiel für einen Erfolg:
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
Date: Tue, 21 Apr 2026 10:13:04 GMT
Content-Length: 23
{"response":"success"}
Beispiel mit Fehlern:
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
Date: Tue, 21 Apr 2026 12:15:01 GMT
Content-Length: 55
{"error":"invalid character '{' after top-level value"}