[comment]: # translation:outdated

[comment]: # ({cdb0d4ea-b45624e8})
# 2 Streaming an externe Systeme

[comment]: # ({/cdb0d4ea-b45624e8})

[comment]: # ({fa81590c-c479d2fd})
#### Übersicht

Es ist möglich, Datenpunktwerte und Ereignisse aus Zabbix über HTTP an externe Systeme zu streamen (siehe [Protokolldetails](#protocol)).

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.

[comment]: # ({/fa81590c-c479d2fd})

[comment]: # ({695ba0a3-cfad3c2f})
#### 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.
Zu diesem Zweck stehen die folgenden Werkzeuge zur Verfügung:

-   Ein Beispiel für einen einfachen [Empfänger](https://git.zabbix.com/projects/ZT/repos/receiver/browse), der die empfangenen Informationen in den Dateien `events.ndjson` und `history.ndjson` protokolliert.
-   [Kafka connector for Zabbix server](https://git.zabbix.com/projects/ZT/repos/kafka-connector/browse) - ein leichtgewichtiger in Go geschriebener Server, der dafür ausgelegt ist, Datenpunkt-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`](/manual/appendix/config/zabbix_server#startconnectors) in `zabbix_server.conf` anpassen.
Die Anzahl der Connector-Worker sollte mit der in Zabbix Frontend konfigurierten Anzahl von Connectors übereinstimmen (oder diese überschreiten, wenn mehr als 1 gleichzeitige Sitzung verwendet wird).
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.

![](../../../../assets/en/manual/config/connector.png){width="600"}

Pflichtfelder sind mit einem Sternchen markiert.

|Parameter|Beschreibung|
|--|--------|
|*Name*|Geben Sie den Namen des Connectors ein.|
|*Data type*|Wählen Sie den zu streamenden Datentyp aus:<br>**Item values** - Datenpunkt-Werte von Zabbix an externe Systeme streamen;<br>**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 Datenpunkt-Werte oder Ereignisse, die dem Tag-Filter entsprechen. Wenn nichts festgelegt ist, wird alles exportiert.<br>Es ist möglich, bestimmte Tags und Tag-Werte sowohl einzuschließen als auch auszuschließen. Es können mehrere Bedingungen festgelegt werden. Der Abgleich von Tag-Namen ist immer groß-/kleinschreibungssensitiv.<br><br>Für jede Bedingung stehen mehrere Operatoren zur Verfügung:<br>**Exists** - die angegebenen Tag-Namen einschließen;<br>**Equals** - die angegebenen Tag-Namen und Werte einschließen (groß-/kleinschreibungssensitiv);<br>**Contains** - die angegebenen Tag-Namen einschließen, bei denen die Tag-Werte die eingegebene Zeichenfolge enthalten (Teilzeichenfolgenabgleich, nicht groß-/kleinschreibungssensitiv);<br>**Does not exist** - die angegebenen Tag-Namen ausschließen;<br>**Does not equal** - die angegebenen Tag-Namen und Werte ausschließen (groß-/kleinschreibungssensitiv);<br>**Does not contain** - die angegebenen Tag-Namen ausschließen, bei denen die Tag-Werte die eingegebene Zeichenfolge enthalten (Teilzeichenfolgenabgleich, nicht groß-/kleinschreibungssensitiv).<br><br>Für Bedingungen gibt es zwei Berechnungstypen:<br>**And/Or** - alle Bedingungen müssen erfüllt sein; Bedingungen mit demselben Tag-Namen werden durch die Oder-Bedingung gruppiert;<br>**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 Datenpunkt-Werte gefiltert werden sollen, die der Connector streamen soll.<br>Dieses Feld ist verfügbar, wenn *Data type* auf "Item values" gesetzt ist.|
|*HTTP authentication*|Wählen Sie die Authentifizierungsoption aus:<br>**None** - es wird keine Authentifizierung verwendet;<br>**Basic** - Basic-Authentifizierung wird verwendet;<br>**NTLM** - NTLM-Authentifizierung ([Windows NT LAN Manager](http://en.wikipedia.org/wiki/NTLM)) wird verwendet;<br>**Kerberos** - Kerberos-Authentifizierung wird verwendet (siehe auch: [Configuring Kerberos with Zabbix](/manual/appendix/items/kerberos));<br>**Digest** - Digest-Authentifizierung wird verwendet;<br>**Bearer** - Bearer-Authentifizierung wird verwendet.|
|*Username*|Geben Sie den Benutzernamen ein (bis zu 255 Zeichen). Benutzermakros werden unterstützt.<br>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.<br>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.<br>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 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 für das Streaming 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 des Daten-Streamings warten soll. Es können bis zu 10s angegeben werden; der Standardwert ist "5s".<br>Dieses Feld ist verfügbar, wenn *Attempts* auf "2" oder höher gesetzt ist.<br>Erfolglose Versuche sind solche, bei denen der Verbindungsaufbau fehlgeschlagen ist oder bei denen der HTTP-Antwortcode nicht 200, 201, 202, 203, 204 ist. Wiederholungsversuche werden **ausgelöst**, wenn Kommunikationsfehler auftreten 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 hingegen löst einen Wiederholungsversuch aus.|
|*Timeout*|Geben Sie das Nachrichten-Timeout an (1-60 Sekunden, Standard - 5 Sekunden).<br>Zeitsuffixe werden unterstützt, z. B. 30s, 1m. Benutzermakros werden unterstützt.|
|*HTTP proxy*|Sie können einen HTTP-Proxy im folgenden Format angeben:<br>`[protocol://][username[:password]@]proxy.example.com[:port]`<br>Benutzermakros werden unterstützt.<br><br>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.<br><br>Wenn *HTTP proxy* angegeben ist, überschreibt der Proxy proxy-bezogene Umgebungsvariablen wie `http_proxy`, `HTTPS_PROXY`. Wenn nichts angegeben ist, überschreibt der Proxy keine proxy-bezogenen Umgebungsvariablen. Der eingegebene Wert wird unverändert weitergegeben; es findet keine Plausibilitätsprüfung statt.<br>Sie können auch eine SOCKS-Proxy-Adresse eingeben. Wenn Sie das falsche Protokoll angeben, kann der Connector keine Datenpunkt-Werte oder Ereignisse von Zabbix streamen.<br><br>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.<br>Das Serverzertifikat wird automatisch vom systemweiten Speicherort der Zertifizierungsstelle (CA) übernommen. Sie können den Speicherort der CA-Dateien mit dem Konfigurationsparameter [`SSLCALocation`](/manual/appendix/config/zabbix_server#sslcalocation) von 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.<br>Dadurch wird die cURL-Option [`CURLOPT_SSL_VERIFYHOST`](http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html) gesetzt.|
|*SSL certificate file*|Name der SSL-Zertifikatsdatei, die für die Client-Authentifizierung verwendet wird. Die Zertifikatsdatei muss im PEM^1^-Format vorliegen. Benutzermakros werden unterstützt.<br>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`](/manual/appendix/config/zabbix_server#sslcertlocation) von 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 PEM^1^-Format vorliegen. Benutzermakros werden unterstützt.<br>Das Verzeichnis, das diese Datei enthält, wird durch den Konfigurationsparameter [`SSLKeyLocation`](/manual/appendix/config/zabbix_server#sslkeylocation) von Zabbix Server oder Proxy angegeben.|
|*SSL key password*|Passwort der Datei mit dem privaten SSL-Schlüssel. 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-Broker-Adressen konfiguriert ist (zum Beispiel `Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093`), verbindet sich der Kafka-Client mit dem/den Broker(n), die zuerst antworten, und verwendet deren Cluster-Metadaten.
Wenn die Liste Adressen aus verschiedenen Kafka-Clustern enthält, wird nur das am schnellsten antwortende Cluster verwendet und die anderen Adressen werden als nicht verfügbar protokolliert; infolgedessen können beim Start Warnungen wie die folgende erscheinen, obwohl der Connector verbunden ist:

```default
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-Setups) können Hostnamen oder IPs zu Loopback-Adressen (zum Beispiel `127.0.0.1`/`localhost`) aufgelöst oder vom Client normalisiert werden, was solche Warnungen irreführend machen 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 sowie die `advertised.listeners` der Broker und bevorzugen Sie Adressen, die zur vom Broker beworbenen Adresse aufgelöst werden.

[comment]: # ({/695ba0a3-cfad3c2f})

[comment]: # ({3208b284-b67df609})
#### 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](/manual/appendix/protocols/real_time_export).

[comment]: # ({/3208b284-b67df609})

[comment]: # ({fd0d393d-ae5d9204})
##### Server-Anfrage

Beispiel für das Streamen von Datenpunkt-Werten:

```json
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:

```json
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}
```

[comment]: # ({/fd0d393d-ae5d9204})

[comment]: # ({d6988482-89101d44})
##### 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:

```json
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:

```json
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"}
```

[comment]: # ({/d6988482-89101d44})
