9 HTTP agent
Panoramica
Questo tipo di item consente il polling dei dati tramite il protocollo HTTP/HTTPS.
È anche possibile il trapping usando l'utilità Zabbix sender o il protocollo di Zabbix sender (per inviare dati a Zabbix server o proxy), oppure usando 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 Zabbix proxy, i controlli degli item HTTP vengono eseguiti dal proxy.
I controlli degli item HTTP non richiedono alcun agent in esecuzione sull'host monitorato.
HTTP agent supporta sia HTTP sia HTTPS. Zabbix seguirà facoltativamente i reindirizzamenti (vedere l'opzione Segui reindirizzamenti più sotto). Il numero massimo di reindirizzamenti è fissato a 10 (usando l'opzione CURLOPT_MAXREDIRS di cURL).
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 che vengano avviati altri controlli. Anche la risoluzione DNS è asincrona.
La concorrenza massima dei controlli asincroni è 1000 (definita da MaxConcurrentChecksPerPoller).
Il numero di poller asincroni di HTTP agent è definito dal parametro StartHTTPAgentPollers.
La funzionalità delle connessioni persistenti di cURL è stata aggiunta ai controlli di HTTP agent a partire da Zabbix 7.0.
Configurazione
Per configurare un item HTTP:
- Vai su Data collection > Hosts.
- Fai clic su Items nella riga dell'host.
- Fai clic su Create item.
- Inserisci i parametri dell'item nel modulo.

Tutti i campi obbligatori sono contrassegnati da un asterisco rosso.
I campi che richiedono informazioni specifiche per gli item HTTP sono:
| Parameter | Description |
|---|---|
| Type | Seleziona HTTP agent qui. |
| 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 in 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 l'auto-encoding dell'URL. 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 discovery a basso livello. Imposta l'opzione cURL CURLOPT_URL. |
| Query fields | Variabili per l'URL (vedi sopra). Specificate come coppie attributo-valore. I valori vengono codificati automaticamente in URL-encoding. I valori delle macro vengono risolti e poi codificati automaticamente in URL-encoding. 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 discovery a basso livello. 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 delle macro vengono risolti e poi escapati automaticamente. Se "Content-Type" non è specificato nelle intestazioni, il valore predefinito sarà "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 delle macro vengono risolti e poi escapati automaticamente in un nodo di testo e in un attributo. Se "Content-Type" non è specificato nelle intestazioni, il valore predefinito sarà "Content-Type: application/xml" Nota che la selezione di XML data richiede libxml2. |
| 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 discovery a basso livello. |
| Headers | Intestazioni HTTP personalizzate che verranno inviate durante l'esecuzione di una richiesta. Specificate 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 discovery a basso livello. Imposta l'opzione cURL CURLOPT_HTTPHEADER. |
| Required status codes | Elenco dei codici di stato HTTP attesi. Se Zabbix riceve un codice che non è 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 discovery a basso livello. Usa l'opzione cURL CURLINFO_RESPONSE_CODE. |
| Follow redirects | Seleziona la casella per seguire i redirect HTTP. Imposta l'opzione cURL CURLOPT_FOLLOWLOCATION. |
| Retrieve mode | Seleziona la parte della risposta che deve essere recuperata: Body - solo body Headers - solo intestazioni Body and headers - body e intestazioni |
| Convert to JSON | Le intestazioni vengono salvate come coppie attributo-valore sotto la chiave "header" se Retrieve mode non è impostato su Body. Se viene rilevato 'Content-Type: application/json', il body 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 esempio https, socks4, socks5; vedi documentazione; il supporto del prefisso del protocollo è stato aggiunto in cURL 7.21.7). Se non viene specificato alcun protocollo, il proxy verrà trattato come un proxy HTTP. Se specifichi il protocollo errato, la connessione fallirà e l'item diventerà non supportato.Per impostazione predefinita, verrà usata la porta 1080. Se specificato, il proxy sovrascriverà le variabili di ambiente relative al proxy come http_proxy, HTTPS_PROXY. Se non specificato, il proxy non sovrascriverà le variabili di ambiente relative al proxy. Il valore inserito viene passato "così com'è", senza alcun controllo di validità. Nota che con HTTP proxy è 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 discovery a basso livello. Imposta l'opzione cURL CURLOPT_PROXY. |
| HTTP authentication | Seleziona l'opzione di autenticazione: None - nessuna autenticazione utilizzata; Basic - viene usata l'autenticazione basic; NTLM - viene usata l'autenticazione NTLM (Windows NT LAN Manager); Kerberos - viene usata l'autenticazione Kerberos (vedi anche: Configurazione di Kerberos con Zabbix); Digest - viene usata l'autenticazione Digest. 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 macro utente e macro di discovery a basso livello. |
| 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 macro utente e macro di discovery a basso livello. |
| SSL verify peer | Seleziona la casella per verificare il certificato SSL del web server. Il certificato del server verrà preso automaticamente dalla posizione globale dell'autorità di certificazione (CA) del sistema. Puoi sovrascrivere la posizione dei file CA usando il parametro di configurazione SSLCALocation di server o proxy di Zabbix. 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 web server corrisponda. Imposta l'opzione cURL CURLOPT_SSL_VERIFYHOST. |
| SSL certificate file | Nome del file del 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 della chiave SSL. Se la chiave è crittografata, specifica la password nel campo della password della chiave SSL. La directory contenente questo file è specificata dal parametro di configurazione SSLCertLocation di server o proxy di Zabbix. 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 discovery a basso livello. 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 contenente questo file è specificata dal parametro di configurazione SSLKeyLocation di server o proxy di Zabbix. 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 discovery a basso livello. Imposta l'opzione cURL CURLOPT_SSLKEY. |
| SSL key password | Password del file della chiave privata SSL. Macro supportate: macro utente, macro di discovery a basso livello. Imposta l'opzione cURL CURLOPT_KEYPASSWD. |
| Timeout | Zabbix non spenderà più del tempo impostato per l'elaborazione dell'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 spenderà più di 2 x Timeout secondi per un singolo controllo. Imposta l'opzione cURL CURLOPT_TIMEOUT. Per ulteriori informazioni sul parametro Timeout, vedi gli attributi generali dell'item. |
| Enable trapping | Con questa casella selezionata, l'item funzionerà anche come item trapper e accetterà i dati inviati a server o proxy di Zabbix tramite l'utilità Zabbix sender o il protocollo Zabbix sender, oppure accetterà i dati inviati a server di Zabbix tramite 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, opzionalmente 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 HTTP proxy è impostare le variabili di ambiente relative al proxy.
Per HTTP - imposta la variabile di ambiente http_proxy per l'utente di server di Zabbix. Ad esempio:
http_proxy=http://proxy_ip:proxy_port.
Per HTTPS - imposta la variabile di ambiente HTTPS_PROXY. Ad esempio:
HTTPS_PROXY=http://proxy_ip:proxy_port. Ulteriori dettagli sono disponibili
eseguendo il comando shell: # man curl.
[1] Zabbix supporta file di certificato e chiave privata solo in formato PEM. Nel caso in cui tu abbia i dati del certificato e della chiave privata in un file in formato PKCS #12 (di solito con estensione *.p12 o *.pfx) puoi generare da esso il file PEM 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" : "Sai, per la ricerca"
}
- Ora estrai il numero di versione usando 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 usa un passaggio di preprocessing JSONPath per ottenere il valore dell'item:
$.hits.hits[0]._source.value
Esempio 3
Verifica se Zabbix API è attiva, usando apiinfo.version.
- Configurazione dell'item:

Si noti 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 Latest data:

Esempio 4
Recupero delle informazioni meteo collegandosi al servizio pubblico Openweathermap.
- Configurare un item master per la raccolta di dati in blocco in un singolo JSON:

Si noti l'uso delle macro nei campi di query. Fare riferimento alle Openweathermap API per sapere come compilarli.
Esempio di JSON restituito in risposta all'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
}
}
Il passo successivo consiste nel configurare gli 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 di un item dipendente con JSONPath:

- Verificare il risultato dei dati meteo in Latest data:

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

Esempio di output stub status di Nginx:
Active connections: 1 Active connections:
server accepts handled requests
52 52 52
Reading: 0 Writing: 1 Waiting: 0
Il passaggio successivo consiste nel configurare gli item dipendenti che estraggono i dati.
- Configurare un item dipendente di esempio per le richieste al secondo:

- Pre-elaborazione del valore di un item dipendente di esempio con espressione regolare
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

- Verificare il risultato completo del modulo stub in Latest data:

