[comment]: # (tags: connector)

[comment]: # ({cdb0d4ea-b45624e8})
# 2 Strumieniowanie do systemów zewnętrznych

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

[comment]: # ({fa81590c-c479d2fd})
#### Przegląd

Możliwe jest strumieniowanie wartości pozycji i zdarzeń z Zabbix do zewnętrznych systemów przez HTTP (zobacz [szczegóły protokołu](#protocol)).

Filtr tagów może być używany do strumieniowania podzbiorów wartości pozycji lub zdarzeń.

Za strumieniowanie danych odpowiadają dwa typy procesów serwera Zabbix: `connector manager` i `connector worker`.
Wewnętrzna pozycja Zabbix `zabbix[connector_queue]` umożliwia monitorowanie liczby wartości umieszczonych w kolejce connector.

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

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

Do skonfigurowania strumieniowania danych do systemu zewnętrznego wymagane są następujące kroki:

1\. Przygotuj zdalny system do odbierania danych z Zabbix.
W tym celu dostępne są następujące narzędzia:

-   Przykład prostego [receiver](https://git.zabbix.com/projects/ZT/repos/receiver/browse), który zapisuje odebrane informacje do plików `events.ndjson` i `history.ndjson`.
-   [Kafka connector for Zabbix server](https://git.zabbix.com/projects/ZT/repos/kafka-connector/browse) - lekki serwer napisany w Go, przeznaczony do przekazywania wartości pozycji i zdarzeń z serwera Zabbix do brokera Kafka.

2\. Ustaw wymaganą liczbę procesów roboczych connectorów w Zabbix, dostosowując parametr [`StartConnectors`](/manual/appendix/config/zabbix_server#startconnectors) w pliku `zabbix_server.conf`.
Liczba procesów roboczych connectorów powinna odpowiadać skonfigurowanej liczbie connectorów w frontend Zabbix (lub ją przekraczać, jeśli liczba sesji współbieżnych jest większa niż 1).
Następnie uruchom ponownie serwer Zabbix.

3\. Skonfiguruj nowy connector w frontend Zabbix (*Administration* > *General* > *Connectors*) i przeładuj pamięć podręczną serwera poleceniem `zabbix_server -R config_cache_reload`.

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

Pola obowiązkowe są oznaczone gwiazdką.

|Parameter|Description|
|--|--------|
|*Name*|Wprowadź nazwę connectora.|
|*Data type*|Wybierz typ danych do strumieniowania:<br>**Item values** - strumieniuj wartości pozycji z Zabbix do systemów zewnętrznych;<br>**Events** - strumieniuj zdarzenia z Zabbix do systemów zewnętrznych.|
|*URL*|Wprowadź adres URL odbiornika. Obsługiwane są makra użytkownika.|
|*Tag filter*|Eksportuj tylko wartości pozycji lub zdarzenia pasujące do filtra tagów. Jeśli nie zostanie ustawiony, eksportowane będą wszystkie dane.<br>Można zarówno uwzględniać, jak i wykluczać określone tagi oraz wartości tagów. Można ustawić kilka warunków. Dopasowanie nazwy tagu jest zawsze rozróżniane wielkością liter.<br><br>Dla każdego warunku dostępnych jest kilka operatorów:<br>**Exists** - uwzględnij określone nazwy tagów;<br>**Equals** - uwzględnij określone nazwy tagów i wartości (rozróżniane wielkością liter);<br>**Contains** - uwzględnij określone nazwy tagów, których wartości zawierają wprowadzony ciąg znaków (dopasowanie podciągu, bez rozróżniania wielkości liter);<br>**Does not exist** - wyklucz określone nazwy tagów;<br>**Does not equal** - wyklucz określone nazwy tagów i wartości (rozróżniane wielkością liter);<br>**Does not contain** - wyklucz określone nazwy tagów, których wartości zawierają wprowadzony ciąg znaków (dopasowanie podciągu, bez rozróżniania wielkości liter).<br><br>Dostępne są dwa typy obliczania warunków:<br>**And/Or** - wszystkie warunki muszą być spełnione, warunki o tej samej nazwie tagu będą grupowane według warunku Or;<br>**Or** - wystarczy, że spełniony będzie jeden warunek.|
|*Type of information*|Wybierz typ informacji (liczbowy (bez znaku), liczbowy (zmiennoprzecinkowy), znakowy itp.), według którego mają być filtrowane wartości pozycji, które connector ma strumieniować.<br>Pole to jest dostępne, jeśli *Data type* ma ustawioną wartość "Item values".|
|*HTTP authentication*|Wybierz opcję uwierzytelniania:<br>**None** - bez uwierzytelniania;<br>**Basic** - używane jest uwierzytelnianie podstawowe;<br>**NTLM** - używane jest uwierzytelnianie NTLM ([Windows NT LAN Manager](http://en.wikipedia.org/wiki/NTLM));<br>**Kerberos** - używane jest uwierzytelnianie Kerberos (zobacz też: [Konfigurowanie Kerberos z Zabbix](/manual/appendix/items/kerberos));<br>**Digest** - używane jest uwierzytelnianie Digest;<br>**Bearer** - używane jest uwierzytelnianie Bearer.|
|*Username*|Wprowadź nazwę użytkownika (do 255 znaków). Obsługiwane są makra użytkownika.<br>Pole to jest dostępne, jeśli *HTTP authentication* ma ustawioną wartość "Basic", "NTLM", "Kerberos" lub "Digest".|
|*Password*|Wprowadź hasło użytkownika (do 255 znaków). Obsługiwane są makra użytkownika.<br>Pole to jest dostępne, jeśli *HTTP authentication* ma ustawioną wartość "Basic", "NTLM", "Kerberos" lub "Digest".|
|*Bearer token*|Wprowadź token Bearer. Obsługiwane są makra użytkownika.<br>Pole to jest dostępne i wymagane, jeśli *HTTP authentication* ma ustawioną wartość "Bearer".|
|*Advanced configuration*|Kliknij nagłówek *Advanced configuration*, aby wyświetlić zaawansowane opcje konfiguracji (patrz poniżej).|
|*Max records per message*|Określ maksymalną liczbę wartości lub zdarzeń, które mogą zostać przesłane w jednej wiadomości.|
|*Concurrent sessions*|Wybierz liczbę procesów wysyłających, które mają być uruchomione dla tego connectora. Można określić do 100 sesji; wartość domyślna to "1".|
|*Attempts*|Liczba prób strumieniowania danych. Można określić do 5 prób; wartość domyślna to "1".|
|*Attempt interval*|Określ, jak długo connector ma czekać po nieudanej próbie strumieniowania danych. Można określić do 10 s; wartość domyślna to "5s".<br>Pole to jest dostępne, jeśli *Attempts* ma ustawioną wartość "2" lub większą.<br>Nieudane próby to takie, w których nie udało się nawiązać połączenia lub kod odpowiedzi HTTP nie jest równy 200, 201, 202, 203, 204. Ponowne próby są **wyzwalane** w przypadku błędów komunikacji lub gdy kod odpowiedzi HTTP nie jest równy 200, 201, 202, 203, 204, 400, 401, 403, 404, 405, 415, 422. Przekierowania są obsługiwane, więc 302 -> 200 jest odpowiedzią pozytywną; natomiast 302 -> 503 spowoduje ponowną próbę.|
|*Timeout*|Określ limit czasu wiadomości (1-60 sekund, domyślnie - 5 sekund).<br>Obsługiwane są sufiksy czasu, np. 30s, 1m. Obsługiwane są makra użytkownika.|
|*HTTP proxy*|Możesz określić proxy HTTP w następującym formacie:<br>`[protocol://][username[:password]@]proxy.example.com[:port]`<br>Obsługiwane są makra użytkownika.<br><br>Opcjonalny prefiks `protocol://` może być użyty do określenia alternatywnych protokołów proxy (obsługa prefiksu protokołu została dodana w cURL 7.21.7). Jeśli nie zostanie określony żaden protokół, proxy będzie traktowane jako proxy HTTP. Domyślnie używany będzie port 1080.<br><br>Jeśli *HTTP proxy* zostanie określone, proxy nadpisze zmienne środowiskowe związane z proxy, takie jak `http_proxy`, `HTTPS_PROXY`. Jeśli nie zostanie określone, proxy nie będzie nadpisywać zmiennych środowiskowych związanych z proxy. Wprowadzona wartość jest przekazywana bez zmian, bez sprawdzania poprawności.<br>Możesz również podać adres proxy SOCKS. Jeśli określisz niewłaściwy protokół, connector nie będzie w stanie strumieniować wartości pozycji ani zdarzeń z Zabbix.<br><br>Pamiętaj, że z proxy HTTP obsługiwane jest tylko proste uwierzytelnianie.|
|*SSL verify peer*|Zaznacz pole wyboru, aby zweryfikować certyfikat SSL serwera WWW.<br>Certyfikat serwera zostanie automatycznie pobrany z systemowej lokalizacji urzędu certyfikacji (CA). Lokalizację plików CA można zmienić za pomocą parametru konfiguracji serwera Zabbix lub proxy [`SSLCALocation`](/manual/appendix/config/zabbix_server#sslcalocation).|
|*SSL verify host*|Zaznacz pole wyboru, aby zweryfikować, czy pole *Common Name* lub pole *Subject Alternate Name* certyfikatu serwera WWW jest zgodne.<br>Ustawia to opcję cURL [`CURLOPT_SSL_VERIFYHOST`](http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html).|
|*SSL certificate file*|Nazwa pliku certyfikatu SSL używanego do uwierzytelniania klienta. Plik certyfikatu musi być w formacie PEM^1^. Obsługiwane są makra użytkownika.<br>Jeśli plik certyfikatu zawiera również klucz prywatny, pozostaw pole *SSL key file* puste. Jeśli klucz jest zaszyfrowany, podaj hasło w polu *SSL key password*. Katalog zawierający ten plik jest określany przez parametr konfiguracji serwera Zabbix lub proxy [`SSLCertLocation`](/manual/appendix/config/zabbix_server#sslcertlocation).|
|*SSL key file*|Nazwa pliku prywatnego klucza SSL używanego do uwierzytelniania klienta. Plik klucza prywatnego musi być w formacie PEM^1^. Obsługiwane są makra użytkownika.<br>Katalog zawierający ten plik jest określany przez parametr konfiguracji serwera Zabbix lub proxy [`SSLKeyLocation`](/manual/appendix/config/zabbix_server#sslkeylocation).|
|*SSL key password*|Hasło pliku prywatnego klucza SSL. Obsługiwane są makra użytkownika.|
|*Description*|Wprowadź opis connectora.|
|*Enabled*|Zaznacz pole wyboru, aby włączyć connector.|

Gdy Kafka connector jest skonfigurowany z listą adresów bootstrap brokerów rozdzielonych przecinkami (na przykład `Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093`), klient Kafka łączy się z brokerem lub brokerami, które odpowiedzą jako pierwsze, i używa ich metadanych klastra.
Jeśli lista zawiera adresy z różnych klastrów Kafka, użyty zostanie tylko najszybciej odpowiadający klaster, a pozostałe adresy zostaną zapisane w logu jako niedostępne; w rezultacie mogą pojawić się ostrzeżenia podczas uruchamiania, takie jak poniższe, mimo że connector jest połączony:

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

W niektórych środowiskach (sieci prywatne, sieci kontenerowe lub niestandardowe konfiguracje DNS/hosts) nazwy hostów lub adresy IP mogą być rozwiązywane do adresów loopback (na przykład `127.0.0.1`/`localhost`) albo normalizowane przez klienta, co może sprawiać, że takie ostrzeżenia będą mylące.
Aby ograniczyć niejasności, upewnij się, że wszystkie adresy `Kafka.URL` należą do tego samego klastra Kafka, zweryfikuj rozwiązywanie DNS z hosta connectora oraz `advertised.listeners` brokerów i preferuj adresy, które rozwiązują się do adresu ogłaszanego przez brokera.

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

[comment]: # ({3208b284-b67df609})
#### Protokół

Komunikacja między serwerem a odbiorcą odbywa się przez HTTP z użyciem REST API, NDJSON, „Content-Type: application/x-ndjson”.

Więcej informacji można znaleźć w [protokole eksportu JSON rozdzielanego znakami nowej linii](/manual/appendix/protocols/real_time_export).

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

[comment]: # ({fd0d393d-ae5d9204})
##### Żądanie serwera

Przykład strumieniowania wartości pozycji:

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

Przykład strumieniowania zdarzeń:

```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})
##### Odpowiedź odbiorcy

Odpowiedź składa się z kodu statusu odpowiedzi HTTP oraz ładunku JSON.
Kod statusu odpowiedzi HTTP musi mieć wartość "200", "201", "202", "203" lub "204" dla żądań, które zostały obsłużone pomyślnie, inny dla żądań zakończonych niepowodzeniem.

Przykład powodzenia:

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

Przykład z błędami:

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