Streaming verso sistemi esterni
Panoramica
È possibile trasmettere in streaming i valori degli item e gli eventi da Zabbix a sistemi esterni tramite HTTP (vedere i dettagli del protocollo).
Il filtro dei tag può essere utilizzato per trasmettere in streaming sottoinsiemi di valori degli item o eventi.
Due tipi di processi del server Zabbix sono responsabili dello streaming dei dati: connector manager e connector worker.
Un item interno di Zabbix zabbix[connector_queue] consente di monitorare il numero di valori accodati nella coda del connettore.
Configurazione
Per configurare lo streaming dei dati verso un sistema esterno, sono necessari i seguenti passaggi:
1. Configurare un sistema remoto per ricevere i dati da Zabbix. A questo scopo sono disponibili i seguenti strumenti:
- Un esempio di semplice receiver che registra le informazioni ricevute nei file
events.ndjsonehistory.ndjson. - Kafka connector for Zabbix server - un server leggero scritto in Go, progettato per inoltrare i valori degli item e gli eventi da un server Zabbix a un broker Kafka.
2. Impostare in Zabbix il numero richiesto di processi worker del connector modificando il parametro StartConnectors in zabbix_server.conf.
Il numero di processi worker del connector deve corrispondere al numero di connector configurato nel frontend di Zabbix (o essere superiore se il numero di sessioni simultanee è maggiore di 1).
Quindi, riavviare Zabbix server.
3. Configurare un nuovo connector nel frontend di Zabbix (Administration > General > Connectors) e ricaricare la cache del server con il comando zabbix_server -R config_cache_reload.

I campi obbligatori sono contrassegnati da un asterisco.
| Parametro | Descrizione |
|---|---|
| Name | Inserire il nome del connector. |
| Data type | Selezionare il tipo di dati da trasmettere: Item values - trasmette i valori degli item da Zabbix ai sistemi esterni; Events - trasmette gli eventi da Zabbix ai sistemi esterni. |
| URL | Inserire l'URL del receiver. Sono supportate le macro utente. |
| Tag filter | Esporta solo i valori degli item o gli eventi che corrispondono al filtro dei tag. Se non è impostato, viene esportato tutto. È possibile includere o escludere tag e valori dei tag specifici. È possibile impostare diverse condizioni. La corrispondenza dei nomi dei tag distingue sempre tra maiuscole e minuscole. Per ogni condizione sono disponibili diversi operatori: Exists - include i nomi dei tag specificati; Equals - include i nomi e i valori dei tag specificati (con distinzione tra maiuscole e minuscole); Contains - include i nomi dei tag i cui valori contengono la stringa inserita (corrispondenza di sottostringa, senza distinzione tra maiuscole e minuscole); Does not exist - esclude i nomi dei tag specificati; Does not equal - esclude i nomi e i valori dei tag specificati (con distinzione tra maiuscole e minuscole); Does not contain - esclude i nomi dei tag i cui valori contengono la stringa inserita (corrispondenza di sottostringa, senza distinzione tra maiuscole e minuscole). Per le condizioni sono disponibili due tipi di calcolo: And/Or - devono essere soddisfatte tutte le condizioni; le condizioni con lo stesso nome di tag vengono raggruppate tramite la condizione Or; Or - è sufficiente che venga soddisfatta una condizione. |
| Type of information | Selezionare il tipo di informazione (numerico (senza segno), numerico (virgola mobile), carattere, ecc.) in base al quale filtrare i valori degli item che il connector deve trasmettere. Questo campo è disponibile se Data type è impostato su "Item values". |
| HTTP authentication | Selezionare l'opzione di autenticazione: None - non viene utilizzata alcuna autenticazione; Basic - viene utilizzata l'autenticazione di base; NTLM - viene utilizzata l'autenticazione NTLM (Windows NT LAN Manager); Kerberos - viene utilizzata l'autenticazione Kerberos (vedere anche: Configurazione di Kerberos con Zabbix); Digest - viene utilizzata l'autenticazione Digest; Bearer - viene utilizzata l'autenticazione Bearer. |
| Username | Inserire il nome utente (fino a 255 caratteri). Sono supportate le macro utente. Questo campo è disponibile se HTTP authentication è impostato su "Basic", "NTLM", "Kerberos" o "Digest". |
| Password | Inserire la password dell'utente (fino a 255 caratteri). Sono supportate le macro utente. Questo campo è disponibile se HTTP authentication è impostato su "Basic", "NTLM", "Kerberos" o "Digest". |
| Bearer token | Inserire il token Bearer. Sono supportate le macro utente. Questo campo è disponibile ed è obbligatorio se HTTP authentication è impostato su "Bearer". |
| Advanced configuration | Fare clic sull'intestazione Advanced configuration per visualizzare le opzioni di configurazione avanzate (vedere di seguito). |
| Max records per message | Specificare il numero massimo di valori o eventi che possono essere trasmessi in un singolo messaggio. |
| Concurrent sessions | Selezionare il numero di processi sender da eseguire per questo connector. È possibile specificare fino a 100 sessioni; il valore predefinito è "1". |
| Attempts | Numero di tentativi per la trasmissione dei dati. È possibile specificare fino a 5 tentativi; il valore predefinito è "1". |
| Attempt interval | Specificare per quanto tempo il connector deve attendere dopo un tentativo non riuscito di trasmettere i dati. È possibile specificare fino a 10s; il valore predefinito è "5s". Questo campo è disponibile se Attempts è impostato su "2" o più. I tentativi non riusciti sono quelli in cui non è stato possibile stabilire una connessione o in cui il codice di risposta HTTP non è 200, 201, 202, 203, 204. I nuovi tentativi vengono attivati in caso di errori di comunicazione o quando il codice di risposta HTTP non è 200, 201, 202, 203, 204, 400, 401, 403, 404, 405, 415, 422. I reindirizzamenti vengono seguiti, quindi 302 -> 200 è una risposta positiva, mentre 302 -> 503 attiverà un nuovo tentativo. |
| Timeout | Specificare il timeout del messaggio (1-60 secondi, valore predefinito - 5 secondi). Sono supportati i suffissi temporali (ad esempio, 30s, 1m). Sono supportate le macro utente. |
| HTTP proxy | È possibile specificare un proxy HTTP nel seguente formato:[protocol://][username[:password]@]proxy.example.com[:port]Sono supportate le macro utente. Il prefisso facoltativo protocol:// può essere utilizzato per specificare protocolli proxy alternativi (il supporto per il prefisso del protocollo è stato aggiunto in cURL 7.21.7). Se non viene specificato alcun protocollo, il proxy verrà trattato come proxy HTTP. Per impostazione predefinita, verrà utilizzata la porta 1080.Se HTTP proxy è specificato, il proxy sovrascriverà le variabili d'ambiente relative al proxy, come http_proxy e HTTPS_PROXY. Se non è specificato, il proxy non sovrascriverà le variabili d'ambiente relative al proxy. Il valore inserito viene passato così com'è, senza alcun controllo di validità.È inoltre possibile inserire l'indirizzo di un proxy SOCKS. Se si specifica il protocollo errato, il connector non riuscirà a trasmettere i valori degli item o gli eventi da Zabbix. Si noti che con il proxy HTTP è supportata solo l'autenticazione semplice. |
| SSL verify peer | Selezionare la casella per verificare il certificato SSL del web server. Il certificato del server verrà prelevato automaticamente dalla posizione delle autorità di certificazione (CA) a livello di sistema. È possibile sovrascrivere la posizione dei file CA utilizzando il parametro di configurazione di Zabbix server o proxy SSLCALocation. |
| SSL verify host | Selezionare la casella per verificare che il campo Common Name o il campo Subject Alternate Name del certificato del web server corrisponda. Questa opzione imposta l'opzione cURL CURLOPT_SSL_VERIFYHOST. |
| SSL certificate file | Nome del file del certificato SSL utilizzato per l'autenticazione del client. Il file del certificato deve essere in formato PEM1. Sono supportate le macro utente. Se il file del certificato contiene anche la chiave privata, lasciare vuoto il campo SSL key file. Se la chiave è crittografata, specificare la password nel campo SSL key password. La directory contenente questo file è specificata dal parametro di configurazione di Zabbix server o proxy SSLCertLocation. |
| SSL key file | Nome del file della chiave privata SSL utilizzato per l'autenticazione del client. Il file della chiave privata deve essere in formato PEM1. Sono supportate le macro utente. La directory contenente questo file è specificata dal parametro di configurazione di Zabbix server o proxy SSLKeyLocation. |
| SSL key password | Password del file della chiave privata SSL. Sono supportate le macro utente. |
| Description | Inserire la descrizione del connector. |
| Enabled | Selezionare la casella per abilitare il connector. |
Quando il connector Kafka è configurato con un elenco separato da virgole di indirizzi dei broker bootstrap (ad esempio, Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093), il client Kafka si connette al broker o ai broker che rispondono per primi e utilizza i relativi metadati del cluster.
Se l'elenco contiene indirizzi appartenenti a cluster Kafka diversi, verrà utilizzato solo il cluster che risponde più rapidamente e gli altri indirizzi verranno registrati come non disponibili; di conseguenza, potrebbero comparire avvisi all'avvio come il seguente anche se il connector è connesso:
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 alcuni ambienti (reti private, reti di container o configurazioni DNS/hosts non standard), i nomi host o gli indirizzi IP possono risolversi in indirizzi di loopback (ad esempio, 127.0.0.1/localhost) oppure essere normalizzati dal client, rendendo fuorvianti tali avvisi.
Per ridurre la confusione, assicurarsi che tutti gli indirizzi Kafka.URL appartengano allo stesso cluster Kafka, verificare la risoluzione DNS dall'host del connector e i valori advertised.listeners dei broker, e preferire gli indirizzi che si risolvono nell'indirizzo pubblicizzato del broker.
Protocollo
La comunicazione tra il server e il receiver avviene tramite HTTP usando REST API, NDJSON, "Content-Type: application/x-ndjson".
Per ulteriori dettagli, vedere Newline-delimited JSON export protocol.
Richiesta del server
Esempio di streaming dei valori degli item:
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}
Esempio di streaming degli eventi:
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}
Risposta del receiver
La risposta è composta dal codice di stato della risposta HTTP e dal payload JSON. Il codice di stato della risposta HTTP deve essere "200", "201", "202", "203" o "204" per le richieste gestite correttamente, altri per le richieste non riuscite.
Esempio di successo:
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"}
Esempio con errori:
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"}