9 HTTP agent
Panoramica
Questo tipo di item consente il polling dei dati tramite il protocollo HTTP/HTTPS.
È possibile anche 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 Follow redirects più sotto).
Il numero massimo di reindirizzamenti è impostato in modo fisso a 10 (usando 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 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 di input obbligatori sono contrassegnati da 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 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 gli attributi e i valori in Query fields per l'URL-encoding automatico. 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 URL-encoded automaticamente. I valori provenienti dalle macro vengono risolti e poi URL-encoded automaticamente. 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 provenienti dalle 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 provenienti dalle 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" |
| 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 previsti. 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 reindirizzamenti 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). Senza un protocollo specificato, il proxy sarà 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 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 discovery a basso livello.Imposta l'opzione cURL CURLOPT_PROXY. |
| HTTP authentication | Seleziona l'opzione di autenticazione: None - nessuna autenticazione usata; 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 le macro utente e le 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 le macro utente e le 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 dell'autorità di certificazione (CA) a livello di sistema. Puoi sovrascrivere la posizione dei file CA usando il parametro di configurazione SSLCALocation di Zabbix server o proxy. 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 SSL key file. Se la chiave è crittografata, specifica la password nel campo SSL key password. La directory contenente questo file è specificata dal parametro di configurazione SSLCertLocation di Zabbix server o proxy. 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 Zabbix server o proxy. 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 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. 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 Zabbix server o proxy tramite l'utilità Zabbix sender o il protocollo Zabbix sender, oppure accetterà i dati inviati a Zabbix server 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 (facoltativamente in notazione CIDR) o nomi DNS. Il valore predefinito è la macro utente {$TRAPPER.ALLOWED_HOSTS}. Per impostazione predefinita, {$TRAPPER.ALLOWED_HOSTS} è 127.0.0.1,::1. Puoi inserire gli indirizzi direttamente nel campo oppure modificare il valore della macro. Se lasciato vuoto, le connessioni in ingresso saranno rifiutate da tutti gli host. Se specificato, le connessioni in ingresso saranno accettate solo dagli host elencati qui.Se il supporto IPv6 è abilitato, 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. Sono consentite le macro host: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} in questo campo. |
Se il campo HTTP proxy viene lasciato vuoto, un altro modo per usare un proxy HTTP è impostare le variabili di ambiente relative al proxy.
Per HTTP - imposta la variabile di ambiente http_proxy per l'utente di Zabbix server.
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 un comando shell: # man curl.
[1] Zabbix supporta solo file di certificato e chiave privata 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" : "You know, for search"
}
- 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 min 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:
- Preprocessing 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.
- Configura un item master per la raccolta di dati in blocco in un singolo JSON:

Nota l'uso delle macro nei campi di query. Consulta le 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 è configurare gli item dipendenti che estraggono i dati dal JSON.
- Configura 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:

- Controlla il risultato dei dati meteo in Latest data:

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

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

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

- Verifica il risultato completo dal modulo stub in Latest data:

