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:

  1. Vai a Raccolta dati > Host.
  2. Fai clic su Item nella riga dell'host.
  3. Fai clic su Crea item.
  4. 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:

Parametro Descrizione
Tipo Seleziona qui HTTP agent.
Chiave Inserisci una chiave univoca per l'item.
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 utilizzando caratteri Unicode. Vengono convertiti automaticamente in punycode ASCII durante l'esecuzione del controllo HTTP.
Il pulsante Analizza può essere utilizzato per separare dall'URL i campi di query facoltativi (come ?name=Admin&password=mypassword), spostando attributi e valori in Campi di query per la codifica automatica 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 low-level discovery.
Imposta l'opzione cURL CURLOPT_URL.
Campi di query Variabili per l'URL (vedi sopra).
Specificati come coppie attributo e valore.
I valori vengono codificati automaticamente nell'URL. I valori delle macro vengono risolti e quindi codificati automaticamente nell'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.
Imposta l'opzione cURL CURLOPT_URL.
Tipo di richiesta Seleziona il tipo di metodo della richiesta: GET, POST, PUT o HEAD
Tipo di corpo della richiesta Seleziona il tipo di corpo della richiesta:
Dati grezzi - corpo della richiesta HTTP personalizzato; le macro vengono sostituite, ma non viene eseguita alcuna codifica
Dati JSON - corpo della richiesta HTTP in formato JSON. Le macro possono essere utilizzate come stringhe, numeri, true e false; le macro utilizzate come stringhe devono essere racchiuse tra virgolette doppie. I valori delle macro vengono risolti e quindi sottoposti automaticamente a escape. Se "Content-Type" non è specificato nelle intestazioni, il valore predefinito sarà "Content-Type: application/json"
Dati XML - corpo della richiesta HTTP in formato XML. Le macro possono essere utilizzate come nodo di testo, attributo o sezione CDATA. I valori delle macro vengono risolti e quindi sottoposti automaticamente a escape 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: la selezione di Dati XML richiede libxml2.
Corpo della richiesta 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.
Intestazioni Intestazioni HTTP personalizzate che verranno inviate durante l'esecuzione di una richiesta.
Specificate come coppie attributo e 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.
Imposta l'opzione cURL CURLOPT_HTTPHEADER.
Codici di stato richiesti Elenco dei codici di stato HTTP previsti. Se Zabbix riceve un codice non incluso 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.
Utilizza l'opzione cURL CURLINFO_RESPONSE_CODE.
Segui reindirizzamenti Seleziona la casella per seguire i reindirizzamenti HTTP.
Imposta l'opzione cURL CURLOPT_FOLLOWLOCATION.
Modalità di recupero Seleziona la parte della risposta da recuperare:
Corpo - solo il corpo
Intestazioni - solo le intestazioni
Corpo e intestazioni - corpo e intestazioni
Converti in JSON Le intestazioni vengono salvate come coppie attributo e valore sotto la chiave "header" se Modalità di recupero non è impostata su Corpo.
Se viene rilevato 'Content-Type: application/json', il corpo viene salvato come oggetto; altrimenti viene memorizzato come stringa, ad esempio:
Proxy HTTP È possibile specificare un proxy HTTP da utilizzare, nel formato [protocol://][username[:password]@]proxy.example.com[:port].
Il prefisso facoltativo protocol:// può essere utilizzato per specificare protocolli proxy alternativi (ad esempio https, socks4, socks5; vedere la documentazione; 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. Se si specifica il protocollo errato, la connessione avrà esito negativo e l'item diventerà non supportato.
Per impostazione predefinita, verrà utilizzata la porta 1080.
Se 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à.
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.
Imposta l'opzione cURL CURLOPT_PROXY.
Autenticazione HTTP Seleziona l'opzione di autenticazione:
Nessuna - 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 (vedi anche: Configurazione di Kerberos con Zabbix);
Digest - viene utilizzata l'autenticazione Digest.
Imposta l'opzione cURL CURLOPT_HTTPAUTH.
Nome utente Inserisci il nome utente (fino a 255 caratteri).
Questo campo è disponibile se Autenticazione HTTP è impostata 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 Autenticazione HTTP è impostata su Basic, NTLM, Kerberos o Digest. Sono supportate le macro utente e le macro di low-level discovery.
Verifica peer SSL Seleziona la casella per verificare il certificato SSL del web server. Il certificato del server viene verificato rispetto ai certificati delle autorità di certificazione (CA) attendibili disponibili nella posizione CA a livello di sistema. È possibile sovrascrivere la posizione dei file CA utilizzando il parametro di configurazione SSLCALocation del server o del proxy Zabbix.
Imposta l'opzione cURL CURLOPT_SSL_VERIFYPEER.
Verifica host SSL Seleziona la casella per verificare che il campo Common Name o Subject Alternate Name del certificato del web server corrisponda.
Imposta l'opzione cURL CURLOPT_SSL_VERIFYHOST.
File del certificato SSL Nome del file del certificato SSL utilizzato 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 del server o del proxy 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 low-level discovery.
Imposta l'opzione cURL CURLOPT_SSLCERT.
File della chiave SSL Nome del file della chiave privata SSL utilizzato 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 del server o del proxy 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 low-level discovery.
Imposta l'opzione cURL CURLOPT_SSLKEY.
Password della chiave SSL Password del file della chiave privata SSL.
Macro supportate: macro utente, macro di low-level discovery.
Imposta l'opzione cURL CURLOPT_KEYPASSWD.
Timeout Zabbix non dedicherà più del tempo impostato all'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 dedicherà più di 2 x Timeout secondi a un singolo controllo.
Imposta l'opzione cURL CURLOPT_TIMEOUT.
Per ulteriori informazioni sul parametro Timeout, vedi attributi generali degli item.
Abilita trapping Se questa casella è selezionata, l'item funzionerà anche come item trapper e accetterà i dati inviati al server o al proxy Zabbix utilizzando l'utility Zabbix sender o il protocollo Zabbix sender, oppure accetterà i dati inviati al server Zabbix utilizzando il metodo API history.push. Per ulteriori informazioni sull'invio dei dati, vedi: Item trapper.
Host consentiti Visibile solo se la casella Abilita trapping è selezionata.
Elenco di indirizzi IP separati da virgole, facoltativamente in notazione CIDR, o nomi DNS.
Se specificato, le connessioni in ingresso verranno accettate solo dagli host elencati qui.
Se il supporto IPv6 è abilitato, '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 utilizzato 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 Proxy HTTP viene lasciato vuoto, un altro modo per utilizzare un proxy HTTP consiste nell'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. Ulteriori dettagli sono disponibili eseguendo un comando shell: # man curl.

[1] Zabbix supporta solo i file del certificato e della chiave privata in formato PEM. Se i dati del certificato e della chiave privata sono contenuti in un file in formato PKCS #12 (solitamente con estensione *.p12 o *.pfx), è possibile generare il file PEM utilizzando 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: