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:
- Andare in: Raccolta dati → Host
- Fare clic su Item nella riga dell'host
- Fare clic su Crea item
- Inserire 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:
| Parametro | Descrizione |
|---|---|
| Type | Selezionare qui HTTP agent. |
| Key | Inserire 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. Verranno convertiti automaticamente in punycode ASCII durante l'esecuzione del controllo HTTP. Il pulsante Parse può essere utilizzato 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 (vedere sopra). Specificate come coppie attributo-valore. I valori vengono 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 | Selezionare il tipo di metodo della richiesta: GET, POST, PUT o HEAD |
| Request body type | Selezionare 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 sottoposti automaticamente a escape. 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 sottoposti automaticamente a escape 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 | Inserire 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 non presente nell'elenco, l'item diventerà unsupported. 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 | Selezionare la casella per seguire i reindirizzamenti HTTP. Questo imposta l'opzione cURL CURLOPT_FOLLOWLOCATION. |
| Retrieve mode | Selezionare 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 | È possibile specificare un proxy HTTP da usare, nel formato [protocol://][username[:password]@]proxy.example.com[:port].Il prefisso facoltativo protocol:// può essere usato per specificare protocolli proxy alternativi (ad es. https, socks4, socks5; vedere la 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 proxy HTTP. Se si specifica il protocollo errato, la connessione fallirà e l'item diventerà unsupported.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: 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 | Selezionare l'opzione di autenticazione: None - non viene usata alcuna autenticazione; Basic - viene usata l'autenticazione di base; NTLM - viene usata l'autenticazione NTLM (Windows NT LAN Manager); Kerberos - viene usata l'autenticazione Kerberos (vedere anche: Configurazione di Kerberos con Zabbix); Digest - viene usata l'autenticazione Digest. Questo imposta l'opzione cURL CURLOPT_HTTPAUTH. |
| User name | Inserire 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 | Inserire la password 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 | Selezionare 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. È possibile 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 | Selezionare la casella per verificare che il campo Common Name o il campo Subject Alternate Name del certificato del server web corrispondano. Questo 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, lasciare vuoto il campo del file della chiave SSL. Se la chiave è cifrata, specificare la password nel campo SSL key password. 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 controllo. Questo imposta l'opzione cURL CURLOPT_TIMEOUT. Per ulteriori informazioni sul parametro Timeout, vedere attributi generali dell'item. |
| Enable trapping | Con questa casella selezionata, l'item funzionerà anche come item trapper e accetterà i dati inviati al server o proxy Zabbix usando l'utilità Zabbix sender o il protocol di Zabbix sender, oppure accetterà i dati inviati al server Zabbix usando il metodo API history.push. Per ulteriori informazioni sull'invio dei dati, vedere: 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' vengono 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. Si noti 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 di ambiente relative al proxy.
Per HTTP - impostare la variabile di ambiente http_proxy per l'utente del server Zabbix. Ad esempio:
http_proxy=http://proxy_ip:proxy_port.
Per HTTPS - impostare la variabile di ambiente HTTPS_PROXY. Ad esempio:
HTTPS_PROXY=http://proxy_ip:proxy_port. Maggiori dettagli sono disponibili eseguendo il comando 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), è possibile 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:

