2 Strumieniowanie do systemów zewnętrznych
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).
Filtr tagów może być używany do strumieniowania podzbiorów wartości pozycji lub zdarzeń.
Za strumieniowanie danych odpowiadają dwa procesy serwera Zabbix: connector manager i connector worker.
Wewnętrzna pozycja Zabbix zabbix[connector_queue] umożliwia monitorowanie liczby wartości umieszczonych w kolejce connector.
Konfiguracja
Aby skonfigurować strumieniowanie danych do systemu zewnętrznego, wymagane są następujące kroki:
1. Należy przygotować zdalny system do odbierania danych z Zabbix. W tym celu dostępne są następujące narzędzia:
- Przykład prostego odbiornika, który zapisuje odebrane informacje w plikach
events.ndjsonihistory.ndjson. - Kafka connector for Zabbix server — 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 connectora w Zabbix, dostosowując parametr StartConnectors w pliku zabbix_server.conf.
Liczba procesów roboczych connectora powinna odpowiadać (lub być większa, jeśli liczba współbieżnych sesji jest większa niż 1) skonfigurowanej liczbie connectorów w Zabbix frontend.
Następnie uruchom ponownie serwer Zabbix.
3. Skonfiguruj nowy connector w Zabbix frontend (Administration > General > Connectors) i przeładuj pamięć podręczną serwera poleceniem zabbix_server -R config_cache_reload.

Pola obowiązkowe są oznaczone gwiazdką.
| Parameter | Description |
|---|---|
| Name | Wprowadź nazwę connectora. |
| Data type | Wybierz typ danych do strumieniowania: Item values — strumieniowanie wartości pozycji z Zabbix do systemów zewnętrznych; Events — strumieniowanie zdarzeń z Zabbix do systemów zewnętrznych. |
| URL | Wprowadź URL odbiornika. Makra użytkownika są obsługiwane. |
| Tag filter | Eksportuj tylko wartości pozycji lub zdarzenia pasujące do filtra tagów. Jeśli nie ustawiono, eksportowane będzie wszystko. Można zarówno uwzględniać, jak i wykluczać określone tagi oraz wartości tagów. Można ustawić kilka warunków. Dopasowanie nazw tagów zawsze uwzględnia wielkość liter. Dla każdego warunku dostępnych jest kilka operatorów: Exists — uwzględnij określone nazwy tagów; Equals — uwzględnij określone nazwy i wartości tagów (z uwzględnieniem wielkości liter); Contains — uwzględnij określone nazwy tagów, których wartości zawierają wprowadzony ciąg (dopasowanie podciągu, bez uwzględniania wielkości liter); Does not exist — wyklucz określone nazwy tagów; Does not equal — wyklucz określone nazwy i wartości tagów (z uwzględnieniem wielkości liter); Does not contain — wyklucz określone nazwy tagów, których wartości zawierają wprowadzony ciąg (dopasowanie podciągu, bez uwzględniania wielkości liter). Dla warunków dostępne są dwa typy obliczeń: And/Or — wszystkie warunki muszą być spełnione, a warunki mające tę samą nazwę tagu będą grupowane operatorem Or; Or — wystarczy spełnienie jednego warunku. |
| Type of information | Wybierz typ informacji (numeric (unsigned), numeric (float), character itp.), według którego mają być filtrowane wartości pozycji strumieniowane przez connector. To pole jest dostępne, jeśli Data type jest ustawione na „Item values”. |
| HTTP authentication | Wybierz opcję uwierzytelniania: None — bez uwierzytelniania; Basic — używane jest uwierzytelnianie podstawowe; NTLM — używane jest uwierzytelnianie NTLM (Windows NT LAN Manager); Kerberos — używane jest uwierzytelnianie Kerberos (zobacz także: Configuring Kerberos with Zabbix); Digest — używane jest uwierzytelnianie Digest; Bearer — używane jest uwierzytelnianie Bearer. |
| Username | Wprowadź nazwę użytkownika (do 255 znaków). Makra użytkownika są obsługiwane. To pole jest dostępne, jeśli HTTP authentication jest ustawione na „Basic”, „NTLM”, „Kerberos” lub „Digest”. |
| Password | Wprowadź hasło użytkownika (do 255 znaków). Makra użytkownika są obsługiwane. To pole jest dostępne, jeśli HTTP authentication jest ustawione na „Basic”, „NTLM”, „Kerberos” lub „Digest”. |
| Bearer token | Wprowadź token Bearer. Makra użytkownika są obsługiwane. To pole jest dostępne i wymagane, jeśli HTTP authentication jest ustawione na „Bearer”. |
| Advanced configuration | Kliknij etykietę 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ą być strumieniowane w jednej wiadomości. |
| Concurrent sessions | Wybierz liczbę procesów nadawczych uruchamianych 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 powinien czekać po nieudanej próbie strumieniowania danych. Można określić do 10s; wartość domyślna to „5s”. To pole jest dostępne, jeśli Attempts jest ustawione na „2” lub więcej. Nieudane próby to takie, w których nie udało się nawiązać połączenia lub kod odpowiedzi HTTP nie wynosi 200, 201, 202, 203, 204. Ponowne próby są wyzwalane w przypadku błędów komunikacji lub gdy kod odpowiedzi HTTP nie wynosi 200, 201, 202, 203, 204, 400, 401, 403, 404, 405, 415, 422. Przekierowania są śledzone, 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). Obsługiwane są sufiksy czasu, np. 30s, 1m. Makra użytkownika są obsługiwane. |
| HTTP proxy | Możesz określić HTTP proxy do użycia w następującym formacie:[protocol://][username[:password]@]proxy.example.com[:port]Makra użytkownika są obsługiwane. 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 określono protokołu, proxy będzie traktowane jako HTTP proxy. Domyślnie użyty zostanie port 1080.Jeśli określono HTTP proxy, proxy nadpisze zmienne środowiskowe związane z proxy, takie jak http_proxy, HTTPS_PROXY. Jeśli nie określono, proxy nie nadpisze zmiennych środowiskowych związanych z proxy. Wprowadzona wartość jest przekazywana bez zmian, bez sprawdzania poprawności.Możesz także wprowadzić adres proxy SOCKS. Jeśli określisz niewłaściwy protokół, połączenie nie powiedzie się, a pozycja stanie się nieobsługiwana. Należy pamiętać, że w przypadku HTTP proxy obsługiwane jest tylko proste uwierzytelnianie. |
| SSL verify peer | Zaznacz pole wyboru, aby weryfikować certyfikat SSL serwera WWW. Certyfikat serwera zostanie automatycznie pobrany z systemowej lokalizacji urzędu certyfikacji (CA). Możesz nadpisać lokalizację plików CA za pomocą parametru konfiguracyjnego serwera Zabbix lub proxy SSLCALocation. |
| SSL verify host | Zaznacz pole wyboru, aby zweryfikować, czy pole Common Name lub pole Subject Alternate Name certyfikatu serwera WWW jest zgodne. Ustawia to opcję cURL CURLOPT_SSL_VERIFYHOST. |
| SSL certificate file | Nazwa pliku certyfikatu SSL używanego do uwierzytelniania klienta. Plik certyfikatu musi być w formacie PEM1. Makra użytkownika są obsługiwane. 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 konfiguracyjny serwera Zabbix lub proxy SSLCertLocation. |
| SSL key file | Nazwa pliku klucza prywatnego SSL używanego do uwierzytelniania klienta. Plik klucza prywatnego musi być w formacie PEM1. Makra użytkownika są obsługiwane. Katalog zawierający ten plik jest określany przez parametr konfiguracyjny serwera Zabbix lub proxy SSLKeyLocation. |
| SSL key password | Hasło do pliku klucza prywatnego SSL. Makra użytkownika są obsługiwane. |
| Description | Wprowadź opis connectora. |
| Enabled | Zaznacz pole wyboru, aby włączyć connector. |
Gdy connector Kafka jest skonfigurowany z rozdzieloną przecinkami listą adresów brokerów bootstrap (na przykład Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093), klient Kafka łączy się z brokerem (brokerami), który odpowie jako pierwszy, i używa jego metadanych klastra.
Jeśli lista zawiera adresy z różnych klastrów Kafka, użyty zostanie tylko klaster odpowiadający najszybciej, a pozostałe adresy zostaną zapisane w logu jako niedostępne; w rezultacie podczas uruchamiania mogą pojawić się ostrzeżenia takie jak poniższe, mimo że connector jest połączony:
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 pętli zwrotnej (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ć nieporozumienia, upewnij się, że wszystkie adresy Kafka.URL należą do tego samego klastra Kafka, zweryfikuj rozwiązywanie DNS z hosta connectora oraz ustawienie advertised.listeners brokerów, a także preferuj adresy, które są rozwiązywane do adresu rozgłaszanego przez brokera.
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.
Żądanie serwera
Przykład strumieniowania wartości pozycji:
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ń:
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}
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; inne wartości oznaczają nieudane żądania.
Przykład powodzenia:
localhost:8080/v1/history": HTTP/1.1 200 OK
Date: Wed, 11 Jan 2023 16:40:30 GMT
Content-Length: 0
Przykład z błędami:
localhost:8080/v1/history": HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Date: Wed, 11 Jan 2023 17:07:36 GMT
Content-Length: 55
{"error":"invalid character '{' after top-level value"}