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 Daten-Streaming an ein externes System zu konfigurieren:
1. Richten Sie ein entferntes System für den Empfang von Daten von Zabbix ein. Dafür stehen die folgenden Tools zur Verfügung:
- Ein Beispiel für einen einfachen Receiver, der die empfangenen Informationen in den Dateien
events.ndjsonundhistory.ndjsonprotokolliert. - Kafka connector for Zabbix server - ein schlanker Server, geschrieben in Go, der dafür ausgelegt ist, Item-Werte 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 mit der in der Zabbix Frontend konfigurierten Connector-Anzahl übereinstimmen (oder diese überschreiten, wenn die Anzahl gleichzeitiger Sitzungen größer als 1 ist).
Starten Sie anschließend den Zabbix Server neu.
3. Konfigurieren Sie einen neuen Connector in der Zabbix Frontend (Administration > Allgemein > Connectors) und laden Sie den Server-Cache mit dem Befehl zabbix_server -R config_cache_reload neu.

Pflichtfelder sind mit einem Sternchen markiert.
| Parameter | Beschreibung |
|---|---|
| Name | Geben Sie den Namen des Connectors ein. |
| Datentyp | Wählen Sie den zu streamenden Datentyp aus: Item values - streamt Item-Werte von Zabbix an externe Systeme; Events - streamt Ereignisse von Zabbix an externe Systeme. |
| URL | Geben Sie die URL des Receivers ein. Benutzer-Makros werden unterstützt. |
| Tag filter | Exportieren Sie nur Item-Werte oder Ereignisse, die dem Tag-Filter entsprechen. Wenn nicht gesetzt, wird alles exportiert. Es ist möglich, bestimmte Tags und Tag-Werte einzuschließen oder auszuschließen. Es können mehrere Bedingungen festgelegt werden. Die Übereinstimmung des Tag-Namens ist immer groß-/kleinschreibungssensitiv. Für jede Bedingung stehen mehrere Operatoren zur Verfügung: Exists - die angegebenen Tag-Namen einschließen; Equals - die angegebenen Tag-Namen und Werte einschließen (groß-/kleinschreibungssensitiv); Contains - die angegebenen Tag-Namen einschließen, deren Tag-Werte die eingegebene Zeichenfolge enthalten (Teilzeichenfolgenabgleich, nicht groß-/kleinschreibungssensitiv); Does not exist - die angegebenen Tag-Namen ausschließen; Does not equal - die angegebenen Tag-Namen und Werte ausschließen (groß-/kleinschreibungssensitiv); Does not contain - die angegebenen Tag-Namen ausschließen, deren Tag-Werte die eingegebene Zeichenfolge enthalten (Teilzeichenfolgenabgleich, nicht groß-/kleinschreibungssensitiv). Für Bedingungen gibt es zwei Berechnungstypen: And/Or - alle Bedingungen müssen erfüllt sein, Bedingungen mit demselben Tag-Namen werden durch die Or-Bedingung gruppiert; Or - es genügt, wenn eine Bedingung erfüllt ist. |
| Type of information | Wählen Sie den Informationstyp (numeric (unsigned), numeric (float), character usw.) aus, nach dem die vom Connector zu streamenden Item-Werte gefiltert werden sollen. Dieses Feld ist verfügbar, wenn Data type auf "Item values" gesetzt ist. |
| HTTP authentication | Wählen Sie die Authentifizierungsoption aus: None - keine Authentifizierung verwendet; Basic - Basic-Authentifizierung wird verwendet; NTLM - NTLM-Authentifizierung (Windows NT LAN Manager) wird verwendet; Kerberos - Kerberos-Authentifizierung wird verwendet (siehe auch: Kerberos mit Zabbix konfigurieren); Digest - Digest-Authentifizierung wird verwendet; Bearer - Bearer-Authentifizierung wird verwendet. |
| Username | Geben Sie den Benutzernamen ein (bis zu 255 Zeichen). Benutzer-Makros 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). Benutzer-Makros 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. Benutzer-Makros 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 erweiterte Konfigurationsoptionen anzuzeigen (siehe unten). |
| Max records per message | Geben Sie die maximale Anzahl von Werten oder Ereignissen an, die in einer Nachricht gestreamt werden können. |
| Concurrent sessions | Wählen Sie die Anzahl der für diesen Connector auszuführenden Sender-Prozesse aus. 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 zum Streamen von Daten warten soll. Es können bis zu 10s angegeben werden; der Standardwert ist "5s". Dieses Feld ist verfügbar, wenn Attempts auf "2" oder höher gesetzt ist. Erfolglose Versuche sind solche, bei denen der Verbindungsaufbau fehlgeschlagen ist oder der HTTP-Antwortcode nicht 200, 201, 202, 203, 204 ist. Wiederholungen werden ausgelöst bei Kommunikationsfehlern oder wenn der HTTP-Antwortcode nicht 200, 201, 202, 203, 204, 400, 401, 403, 404, 405, 415, 422 ist. Weiterleitungen werden verfolgt, daher ist 302 -> 200 eine positive Antwort; 302 -> 503 löst hingegen einen erneuten Versuch aus. |
| Timeout | Geben Sie das Nachrichten-Timeout an (1-60 Sekunden, Standard - 5 Sekunden). Zeitsuffixe werden unterstützt, z. B. 30s, 1m. Benutzer-Makros werden unterstützt. |
| HTTP proxy | Sie können einen zu verwendenden HTTP-Proxy im folgenden Format angeben:[protocol://][username[:password]@]proxy.example.com[:port]Benutzer-Makros werden unterstützt. Das optionale Präfix protocol:// kann verwendet werden, um alternative Proxy-Protokolle anzugeben (die Unterstützung des Protokollpräfixes 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 proxybezogene Umgebungsvariablen wie http_proxy, HTTPS_PROXY. Wenn nichts angegeben ist, überschreibt der Proxy keine proxybezogenen Umgebungsvariablen. Der eingegebene Wert wird unverändert übergeben, es findet keine Plausibilitätsprüfung statt.Sie können auch eine SOCKS-Proxy-Adresse eingeben. Wenn Sie das falsche Protokoll angeben, kann der Connector keine Item-Werte oder Ereignisse von Zabbix streamen. Beachten Sie, dass mit HTTP-Proxy nur 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 Zertifizierungsstelle (CA) übernommen. Sie können den Speicherort der CA-Dateien mit dem Konfigurationsparameter SSLCALocation des Zabbix Server oder Proxy ü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 Webserver-Zertifikats übereinstimmt. Dadurch wird die cURL-Option CURLOPT_SSL_VERIFYHOST gesetzt. |
| SSL certificate file | Name der SSL-Zertifikatsdatei, die für die Client-Authentifizierung verwendet wird. Die Zertifikatsdatei muss im PEM1-Format vorliegen. Benutzer-Makros 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 Konfigurationsparameter SSLCertLocation des Zabbix Server oder Proxy angegeben. |
| SSL key file | Name der SSL-Datei mit dem privaten Schlüssel, die für die Client-Authentifizierung verwendet wird. Die Datei mit dem privaten Schlüssel muss im PEM1-Format vorliegen. Benutzer-Makros werden unterstützt. Das Verzeichnis, das diese Datei enthält, wird durch den Konfigurationsparameter SSLKeyLocation des Zabbix Server oder Proxy angegeben. |
| SSL key password | Passwort der SSL-Datei mit dem privaten Schlüssel. Benutzer-Makros 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-Broker-Adressen konfiguriert ist (zum Beispiel Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093), verbindet sich der Kafka-Client mit dem bzw. den Brokern, 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; dadurch können Startwarnungen 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 (private Netzwerke, Container-Netzwerke oder nicht standardmäßige DNS-/Hosts-Einrichtungen) können Hostnamen oder IPs in Loopback-Adressen aufgelöst werden (zum Beispiel 127.0.0.1/localhost) oder vom Client normalisiert werden, was solche Warnungen irreführend erscheinen lassen kann.
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 aus sowie die advertised.listeners der Broker und bevorzugen Sie Adressen, die zur angekündigten Adresse des Brokers 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"}