16 Agente HTTP
Panoramica
Questo tipo di item consente il polling dei dati tramite il protocollo HTTP/HTTPS.
È inoltre possibile il trapping utilizzando l'utility Zabbix sender o il protocol di Zabbix sender (per inviare dati a Zabbix server o proxy), oppure utilizzando il metodo API history.push (per inviare dati a Zabbix server).
I controlli degli item HTTP vengono eseguiti da Zabbix server. Tuttavia, quando gli host sono monitorati da un proxy Zabbix, i controlli degli item HTTP vengono eseguiti dal proxy.
I controlli degli item HTTP non richiedono alcun agent in esecuzione su un host monitorato.
HTTP agent supporta sia HTTP che HTTPS. Zabbix può facoltativamente seguire i reindirizzamenti (vedere l'opzione Follow redirects di seguito). Il numero massimo di reindirizzamenti è fissato nel codice a 10 (utilizzando l'opzione cURL CURLOPT_MAXREDIRS).
Zabbix server/proxy deve essere inizialmente configurato con il supporto cURL (libcurl).
I controlli HTTP vengono eseguiti in modo asincrono: non è necessario ricevere la risposta a una richiesta prima di avviare altri controlli. Anche la risoluzione DNS è asincrona.
La concorrenza massima dei controlli asincroni è 1000 (definita da MaxConcurrentChecksPerPoller).
Il numero di poller asincroni HTTP agent è definito dal parametro StartHTTPAgentPollers.
La funzionalità delle connessioni persistenti di cURL è stata aggiunta ai controlli HTTP agent a partire da Zabbix 7.0.
Configurazione
Per configurare un item HTTP:
- Vai a: Raccolta dati → Host
- Fai clic su Item nella riga dell'host
- Fai clic su Crea item
- Inserisci i parametri dell'item nel modulo

Tutti i campi di input obbligatori sono contrassegnati con un asterisco rosso.
I campi che richiedono informazioni specifiche per gli item HTTP sono:
| Parameter | Description |
|---|---|
| Type | Seleziona qui HTTP agent. |
| Key | Inserisci una chiave item univoca. |
| URL | URL a cui connettersi e da cui recuperare i dati. Ad esempio: https://www.example.com http://www.example.com/download I nomi di dominio possono essere specificati con caratteri Unicode. Vengono convertiti automaticamente in punycode ASCII durante l'esecuzione del controllo HTTP. Il pulsante Parse può essere usato per separare i campi di query opzionali (come ?name=Admin&password=mypassword) dall'URL, spostando attributi e valori in Query fields per la codifica URL automatica. Limitato a 2048 caratteri. Macro supportate: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macro utente, macro di low-level discovery. Questo imposta l'opzione cURL CURLOPT_URL. |
| Query fields | Variabili per l'URL (vedi sopra). Specificate come coppie attributo-valore. I valori sono codificati automaticamente come URL. I valori provenienti dalle macro vengono risolti e quindi codificati automaticamente come URL. Macro supportate: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macro utente, macro di low-level discovery. Questo imposta l'opzione cURL CURLOPT_URL. |
| Request type | Seleziona il tipo di metodo della richiesta: GET, POST, PUT o HEAD |
| Request body type | Seleziona il tipo di corpo della richiesta: Raw data - corpo della richiesta HTTP personalizzato; le macro vengono sostituite ma non viene eseguita alcuna codifica JSON data - corpo della richiesta HTTP in formato JSON. Le macro possono essere usate come stringa, numero, true e false; le macro usate come stringhe devono essere racchiuse tra virgolette doppie. I valori provenienti dalle macro vengono risolti e quindi automaticamente escaped. Se "Content-Type" non è specificato negli header, verrà usato per impostazione predefinita "Content-Type: application/json" XML data - corpo della richiesta HTTP in formato XML. Le macro possono essere usate come nodo di testo, attributo o sezione CDATA. I valori provenienti dalle macro vengono risolti e quindi automaticamente escaped in un nodo di testo e in un attributo. Se "Content-Type" non è specificato negli header, verrà usato per impostazione predefinita "Content-Type: application/xml" |
| Request body | Inserisci il corpo della richiesta. Macro supportate: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macro utente, macro di low-level discovery. |
| Headers | Header HTTP personalizzati che verranno inviati durante l'esecuzione di una richiesta. Specificati come coppie attributo-valore. Macro supportate: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macro utente, macro di low-level discovery. Questo imposta l'opzione cURL CURLOPT_HTTPHEADER. |
| Required status codes | Elenco dei codici di stato HTTP previsti. Se Zabbix riceve un codice che non è presente nell'elenco, l'item diventerà non supportato. Se vuoto, non viene eseguito alcun controllo. Ad esempio: 200,201,210-299 Macro supportate nell'elenco: macro utente, macro di low-level discovery. Questo usa l'opzione cURL CURLINFO_RESPONSE_CODE. |
| Follow redirects | Seleziona la casella per seguire i reindirizzamenti HTTP. Questo imposta l'opzione cURL CURLOPT_FOLLOWLOCATION. |
| Retrieve mode | Seleziona la parte della risposta che deve essere recuperata: Body - solo corpo Headers - solo header Body and headers - corpo e header |
| Convert to JSON | Gli header vengono salvati come coppie attributo-valore sotto la chiave "header" se Retrieve mode non è impostato su Body. Se viene rilevato 'Content-Type: application/json', il corpo viene salvato come oggetto; altrimenti viene memorizzato come stringa, ad esempio: ![]() |
| HTTP proxy | Puoi specificare un proxy HTTP da usare, nel formato [protocol://][username[:password]@]proxy.example.com[:port].Il prefisso opzionale protocol:// può essere usato per specificare protocolli proxy alternativi (ad es. https, socks4, socks5; vedi documentation; il supporto del prefisso di protocollo è stato aggiunto in cURL 7.21.7). Se non viene specificato alcun protocollo, il proxy verrà trattato come proxy HTTP. Se specifichi il protocollo sbagliato, la connessione fallirà e l'item diventerà non supportato.Per impostazione predefinita verrà usata la porta 1080. Se specificato, il proxy sovrascriverà le variabili d'ambiente relative al proxy come http_proxy, 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à. Nota che con il proxy HTTP è supportata solo l'autenticazione semplice. Macro supportate: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macro utente, macro di low-level discovery. Questo imposta l'opzione cURL CURLOPT_PROXY. |
| HTTP authentication | Seleziona l'opzione di autenticazione: None - nessuna autenticazione usata; Basic - viene usata l'autenticazione di base; NTLM - viene usata l'autenticazione NTLM (Windows NT LAN Manager); Kerberos - viene usata l'autenticazione Kerberos (vedi anche: Configuring Kerberos with Zabbix); Digest - viene usata l'autenticazione Digest. Questo imposta l'opzione cURL CURLOPT_HTTPAUTH. |
| User name | Inserisci il nome utente (fino a 255 caratteri). Questo campo è disponibile se HTTP authentication è impostato su Basic, NTLM, Kerberos o Digest. Sono supportate le macro utente e le macro di low-level discovery. |
| Password | Inserisci la password dell'utente (fino a 255 caratteri). Questo campo è disponibile se HTTP authentication è impostato su Basic, NTLM, Kerberos o Digest. Sono supportate le macro utente e le macro di low-level discovery. |
| SSL verify peer | Seleziona la casella per verificare il certificato SSL del server web. Il certificato del server verrà prelevato automaticamente dalla posizione dell'autorità di certificazione (CA) a livello di sistema. Puoi sovrascrivere la posizione dei file CA usando il parametro di configurazione del server o proxy Zabbix SSLCALocation. Questo imposta l'opzione cURL CURLOPT_SSL_VERIFYPEER. |
| SSL verify host | Seleziona la casella per verificare che il campo Common Name o il campo Subject Alternate Name del certificato del server web corrisponda. Questo imposta l'opzione cURL CURLOPT_SSL_VERIFYHOST. |
| SSL certificate file | Nome del file di certificato SSL usato per l'autenticazione del client. Il file del certificato deve essere in formato PEM1. Se il file del certificato contiene anche la chiave privata, lascia vuoto il campo del file chiave SSL. Se la chiave è cifrata, specifica la password nel campo della password della chiave SSL. La directory che contiene questo file è specificata dal parametro di configurazione del server o proxy Zabbix SSLCertLocation. Macro supportate: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macro utente, macro di low-level discovery. Questo imposta l'opzione cURL CURLOPT_SSLCERT. |
| SSL key file | Nome del file della chiave privata SSL usato per l'autenticazione del client. Il file della chiave privata deve essere in formato PEM1. La directory che contiene questo file è specificata dal parametro di configurazione del server o proxy Zabbix SSLKeyLocation. Macro supportate: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macro utente, macro di low-level discovery. Questo imposta l'opzione cURL CURLOPT_SSLKEY. |
| SSL key password | Password del file della chiave privata SSL. Macro supportate: macro utente, macro di low-level discovery. Questo imposta l'opzione cURL CURLOPT_KEYPASSWD. |
| Timeout | Zabbix non impiegherà più del tempo impostato per elaborare l'URL (1-600 secondi). In realtà questo parametro definisce il tempo massimo per stabilire una connessione all'URL e il tempo massimo per eseguire una richiesta HTTP. Pertanto, Zabbix non impiegherà più di 2 x Timeout secondi per un singolo controllo. Questo imposta l'opzione cURL CURLOPT_TIMEOUT. Per ulteriori informazioni sul parametro Timeout, vedi attributi generali dell'item. |
| Enable trapping | Con questa casella selezionata, l'item funzionerà anche come item trapper e accetterà dati inviati al server o proxy Zabbix usando l'utilità Zabbix sender o il protocol di Zabbix sender, oppure accetterà dati inviati al server Zabbix usando il metodo API history.push. Per ulteriori informazioni sull'invio dei dati, vedi: Item trapper. |
| Allowed hosts | Visibile solo se la casella Enable trapping è selezionata. Elenco di indirizzi IP separati da virgole, facoltativamente in notazione CIDR, oppure nomi DNS. Se specificato, le connessioni in ingresso saranno accettate solo dagli host elencati qui. Se il supporto IPv6 è abilitato, allora '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' sono trattati allo stesso modo e '::/0' consentirà qualsiasi indirizzo IPv4 o IPv6. '0.0.0.0/0' può essere usato per consentire qualsiasi indirizzo IPv4. Nota che gli "indirizzi IPv6 compatibili con IPv4" (prefisso 0000::/96) sono supportati ma deprecati da RFC4291. Esempio: 127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, ::1,2001:db8::/32, mysqlserver1, zabbix.example.com, {HOST.HOST} In questo campo sono consentiti spazi e macro utente. In questo campo sono consentite le macro host: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN}. |
Se il campo HTTP proxy viene lasciato vuoto, un altro modo per usare un proxy HTTP è impostare le variabili d'ambiente relative al proxy.
Per HTTP - imposta la variabile d'ambiente http_proxy per l'utente del server Zabbix. Ad esempio:
http_proxy=http://proxy_ip:proxy_port.
Per HTTPS - imposta la variabile d'ambiente HTTPS_PROXY. Ad esempio:
HTTPS_PROXY=http://proxy_ip:proxy_port. Maggiori dettagli sono disponibili
eseguendo un comando della shell: # man curl.
[1] Zabbix supporta solo file di certificato e chiave privata in formato PEM. Nel caso in cui i dati del certificato e della chiave privata siano in un file in formato PKCS #12 (di solito con estensione *.p12 o *.pfx), puoi generare il file PEM da esso usando i seguenti comandi:
openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes -out ssl-cert.key
Esempi
Esempio 1
Invia semplici richieste GET per recuperare dati da servizi come Elasticsearch:
- Crea un item GET con URL:
localhost:9200/?pretty - Osserva la risposta:
{
"name" : "YQ2VAY-",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg",
"version" : {
"number" : "6.1.3",
"build_hash" : "af51318",
"build_date" : "2018-01-26T18:22:55.523Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You know, for search"
}
- Ora estrai il numero di versione utilizzando un passaggio di preprocessing JSONPath:
$.version.number
Esempio 2
Invia semplici richieste POST per recuperare dati da servizi come Elasticsearch:
- Crea un item POST con URL:
http://localhost:9200/str/values/_search?scroll=10s - Configura il seguente corpo POST per ottenere il carico del processore (media di 1 minuto per core)
{
"query": {
"bool": {
"must": [{
"match": {
"itemid": 28275
}
}],
"filter": [{
"range": {
"clock": {
"gt": 1517565836,
"lte": 1517566137
}
}
}]
}
}
}
- Ricevuto:
{
"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
"took": 18,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.0,
"hits": [{
"_index": "dbl",
"_type": "values",
"_id": "dqX9VWEBV6sEKSMyk6sw",
"_score": 1.0,
"_source": {
"itemid": 28275,
"value": "0.138750",
"clock": 1517566136,
"ns": 25388713,
"ttl": 604800
}
}]
}
}
- Ora utilizza un passaggio di preprocessing JSONPath per ottenere il valore dell'item:
$.hits.hits[0]._source.value
Esempio 3
Verifica che la API di Zabbix sia attiva, utilizzando apiinfo.version.
- Configurazione dell'item:

Notare l'uso del metodo POST con dati JSON, l'impostazione delle intestazioni della richiesta e la richiesta di restituire solo le intestazioni:
- Pre-elaborazione del valore dell'item con espressione regolare per ottenere il codice HTTP:

- Verifica del risultato in Ultimi dati:

Esempio 4
Recupero delle informazioni meteo collegandosi al servizio pubblico Openweathermap.
- Configurare un item principale per la raccolta massiva dei dati in un unico JSON:

Notare l'uso delle macro nei campi della query. Fare riferimento alla API di Openweathermap per sapere come compilarli.
JSON di esempio restituito in risposta da HTTP agent:
{
"body": {
"coord": {
"lon": 40.01,
"lat": 56.11
},
"weather": [{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
}],
"base": "stations",
"main": {
"temp": 15.14,
"pressure": 1012.6,
"humidity": 66,
"temp_min": 15.14,
"temp_max": 15.14,
"sea_level": 1030.91,
"grnd_level": 1012.6
},
"wind": {
"speed": 1.86,
"deg": 246.001
},
"clouds": {
"all": 20
},
"dt": 1526509427,
"sys": {
"message": 0.0035,
"country": "RU",
"sunrise": 1526432608,
"sunset": 1526491828
},
"id": 487837,
"name": "Stavrovo",
"cod": 200
}
}
L'attività successiva consiste nel configurare item dipendenti che estraggono i dati dal JSON.
- Configurare un item dipendente di esempio per l'umidità:

Altre metriche meteo come 'Temperature' vengono aggiunte nello stesso modo.
- Esempio di preprocessing del valore dell'item dipendente con JSONPath:

- Verificare il risultato dei dati meteo in Ultimi dati:

Esempio 5
Connessione alla pagina di stato di Nginx e acquisizione in blocco delle sue metriche.
- Configurare Nginx seguendo la guida ufficiale.
- Configurare un item master per la raccolta dei dati in blocco:

Esempio di output dello stato stub di Nginx:
Active connections: 1 Active connections:
server accepts handled requests
52 52 52
Reading: 0 Writing: 1 Waiting: 0
L'attività successiva consiste nel configurare item dipendenti che estraggano i dati.
- Configurare un item dipendente di esempio per le richieste al secondo:

- Esempio di preprocessing del valore dell'item dipendente con l'espressione regolare
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

- Verificare il risultato completo del modulo stub in Ultimi dati:

