Monitoraggio web

Panoramica

Con Zabbix puoi verificare diversi aspetti di disponibilità dei siti web.

Per eseguire il monitoraggio web, il server Zabbix deve essere inizialmente configurato con il supporto cURL (libcurl).

Per attivare il monitoraggio web devi definire degli scenari web. Uno scenario web è composto da una o più richieste HTTP o "step". Gli step vengono eseguiti periodicamente dal server Zabbix in un ordine predefinito. Se un host è monitorato da proxy, gli step vengono eseguiti dal proxy.

Gli scenari web sono associati a host/template nello stesso modo di item, trigger, ecc. Ciò significa che gli scenari web possono anche essere creati a livello di template e poi applicati a più host in un'unica operazione.

Le seguenti informazioni vengono raccolte in qualsiasi scenario web:

  • velocità media di download al secondo per tutti gli step dell'intero scenario
  • numero dello step che è fallito
  • ultimo messaggio di errore

Le seguenti informazioni vengono raccolte in qualsiasi step dello scenario web:

  • velocità di download al secondo
  • tempo di risposta
  • codice di risposta

Per ulteriori dettagli, consulta gli item di monitoraggio web.

I dati raccolti dall'esecuzione degli scenari web vengono conservati nel database. I dati vengono utilizzati automaticamente per grafici, trigger e notifiche.

Zabbix può anche verificare se una pagina HTML recuperata contiene una stringa predefinita. Può eseguire un accesso simulato e seguire un percorso di clic del mouse simulati sulla pagina.

Il monitoraggio web di Zabbix supporta sia HTTP che HTTPS. Quando esegue uno scenario web, Zabbix può facoltativamente seguire i reindirizzamenti (vedi l'opzione Follow redirects sotto). Il numero massimo di reindirizzamenti è impostato in modo fisso a 10 (usando l'opzione cURL CURLOPT_MAXREDIRS). Tutti i cookie vengono mantenuti durante l'esecuzione di un singolo scenario.

Configurazione di uno scenario web

Per configurare uno scenario web:

  1. Vai a: Data collection > Hosts (o Templates).
  2. Fai clic su Web nella riga dell'host/template.
  3. Fai clic su Create web scenario a destra (oppure sul nome dello scenario per modificare uno scenario esistente).
  4. Inserisci i parametri dello scenario nel modulo.

La scheda Scenario consente di configurare i parametri generali di uno scenario web.

Tutti i campi di input obbligatori sono contrassegnati da un asterisco rosso.

Parametri dello scenario:

Parameter Description
Name Nome univoco dello scenario.
Sono supportati i user macros. Nota che, se vengono usati user macros, questi macro rimarranno non risolti nei nomi degli web monitoring item.
Update interval Con quale frequenza verrà eseguito lo scenario.
Sono supportati i time suffixes, ad esempio 30s, 1m, 2h, 1d.
Sono supportati i user macros. Nota che, se viene usato un user macro e il suo valore viene modificato (ad esempio, 5m → 30s), il controllo successivo verrà eseguito in base al valore precedente (più avanti nel futuro con i valori dell'esempio).
I nuovi scenari web verranno controllati entro 60 secondi dalla loro creazione.
Attempts Numero di tentativi per l'esecuzione dei passi dello scenario web. In caso di problemi di rete (timeout, assenza di connettività, ecc.), Zabbix può ripetere l'esecuzione di un passo più volte. Il valore impostato influirà in egual misura su ogni passo dello scenario. È possibile specificare fino a 10 tentativi, il valore predefinito è 1.
Nota: Zabbix non ripeterà un passo a causa di un codice di risposta errato o della mancata corrispondenza di una stringa richiesta.
Agent Seleziona un client agent.
Zabbix si comporterà come il browser selezionato. Questo è utile quando un sito web restituisce contenuti diversi per browser diversi.
In questo campo è possibile usare user macros.
HTTP proxy È possibile specificare un proxy HTTP da usare, nel formato [protocol://][username[:password]@]proxy.example.com[:port].
Questa impostazione definisce l'opzione cURL CURLOPT_PROXY.
Il prefisso opzionale protocol:// può essere usato per specificare protocolli proxy alternativi (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.
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à.
È anche possibile inserire l'indirizzo di un proxy SOCKS. Se si specifica il protocollo errato, la connessione fallirà e l'item diventerà non supportato.
Nota che con il proxy HTTP è supportata solo l'autenticazione semplice.
In questo campo è possibile usare user macros.
Variables Variabili che possono essere usate nei passi dello scenario (URL, variabili post).
Hanno il seguente formato:
{macro1}=value1
{macro2}=value2
{macro3}=regex:<regular expression>
{macro4}=jsonpath:<jsonpath>
{macro5}=xmlxpath:<xmlxpath>
{macro6}={{macro}.function()} (vedi macro functions)
Ad esempio:
{username}=Alexei
{password}=kj3h5kJ34bd
{hostid}=regex:hostid is ([0-9]+)
{url}=jsonpath:$.host_url
{status}=xmlxpath://host/response/status
{newvar}={{myvar}.btoa()}
I macro possono quindi essere richiamati nei passi come {username}, {password}, {hostid}, ecc. Zabbix li sostituirà automaticamente con i valori effettivi. Nota che le variabili con regex: richiedono un passo per ottenere il valore dell'espressione regolare, quindi il valore estratto può essere applicato solo al passo successivo.
Se la parte del valore inizia con regex:, la parte successiva viene trattata come un'espressione regolare che cerca nella pagina web e, se trovata, memorizza la corrispondenza nella variabile. Deve essere presente almeno un sottogruppo, in modo che il valore corrispondente possa essere estratto.
Sono supportati i user macros e i macros {HOST.*}.
Le variabili vengono codificate automaticamente in URL quando vengono usate nei campi di query o nei dati dei moduli per le variabili post, ma devono essere codificate manualmente quando vengono usate nel post raw o direttamente nell'URL.
Headers Gli header HTTP vengono usati durante l'esecuzione di una richiesta. È possibile usare header predefiniti e personalizzati.
Gli header verranno assegnati usando le impostazioni predefinite in base al tipo di Agent selezionato da un elenco a discesa a livello di scenario e verranno applicati a tutti i passi, a meno che non siano definiti in modo personalizzato a livello di passo.
Si noti che la definizione dell'header a livello di passo scarta automaticamente tutti gli header definiti in precedenza, tranne un header predefinito assegnato selezionando 'User-Agent' da un elenco a discesa a livello di scenario.
Tuttavia, anche l'header predefinito 'User-Agent' può essere sovrascritto specificandolo a livello di passo.
Per rimuovere l'header a livello di scenario, l'header deve essere nominato e attribuito senza valore a livello di passo.
Gli header devono essere elencati usando la stessa sintassi con cui apparirebbero nel protocollo HTTP, eventualmente usando alcune funzionalità aggiuntive supportate dall'opzione cURL CURLOPT_HTTPHEADER.
Ad esempio:
Accept-Charset=utf-8
Accept-Language=en-US
Content-Type=application/xml; charset=utf-8
Sono supportati i user macros e i macros {HOST.*}.
Enabled Lo scenario è attivo se questa casella è selezionata, altrimenti è disabilitato.

Nota che, quando si modifica uno scenario esistente, nel modulo sono disponibili due pulsanti aggiuntivi:

Crea un altro scenario basato sulle proprietà di quello esistente.
Elimina i dati storici e di trend per lo scenario. In questo modo il server eseguirà lo scenario immediatamente dopo l'eliminazione dei dati.

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 i controlli HTTP - imposta la variabile di ambiente http_proxy per l'utente del server Zabbix. Ad esempio, http_proxy=http://proxy_ip:proxy_port.

Per i controlli 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.

La scheda Steps consente di configurare i passi dello scenario web. Per aggiungere un passo dello scenario web, fai clic su Add nel blocco Steps.

I user macros segreti non devono essere usati negli URL, poiché verranno risolti in "******".

Configurazione dei passi

Parametri del passo:

Parameter Description
Name Nome univoco del passo.
Sono supportate le macro utente. Nota che, se vengono utilizzate macro utente, queste macro rimarranno non risolte nei nomi degli item di web monitoring.
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. Durante l'esecuzione del passo dello scenario web, vengono convertiti automaticamente in punycode e ASCII.
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'URL-encoding automatico.
Le variabili possono essere usate nell'URL, usando la sintassi {macro}. Le variabili possono essere codificate manualmente in URL usando la sintassi {{macro}.urlencode()}.
Sono supportate le macro utente e le macro {HOST.*} macros.
Limitato a 2048 caratteri.
Query fields Variabili HTTP GET per l'URL.
Specificate come coppie attributo-valore.
I valori vengono codificati automaticamente in URL. I valori provenienti da variabili dello scenario, macro utente o macro {HOST.*} vengono risolti e poi codificati automaticamente in URL. L'uso della sintassi {{macro}.urlencode()} li codificherà due volte in URL.
Sono supportate le macro utente e le macro {HOST.*} macros.
Post Variabili HTTP POST.
In modalità Form data, specificate come coppie attributo-valore.
I valori vengono codificati automaticamente in URL. I valori provenienti da variabili dello scenario, macro utente o macro {HOST.*} vengono risolti e poi codificati automaticamente in URL.
In modalità Raw data, attributi/valori vengono visualizzati su una singola riga e concatenati con il simbolo &.
I valori raw possono essere codificati/decodificati manualmente in URL usando la sintassi {{macro}.urlencode()} o {{macro}.urldecode()}.
Ad esempio: id=2345&userid={user}
Se {user} è definita come variabile dello scenario web, verrà sostituita dal suo valore quando il passo viene eseguito. Se si desidera codificare la variabile in URL, sostituire {user} con {{user}.urlencode()}.
Sono supportate le macro utente e le macro {HOST.*} macros.
Variables Variabili a livello di passo che possono essere usate per le funzioni GET e POST.
Specificate come coppie attributo-valore.
Le variabili a livello di passo sovrascrivono le variabili a livello di scenario o le variabili del passo precedente. Tuttavia, il valore di una variabile a livello di passo influisce solo sul passo successivo (e non sul passo corrente).
Hanno il seguente formato:
{macro}=value
{macro}=regex:<regular expression>
Per ulteriori informazioni, vedere la descrizione delle variabili a livello di scenario.
Le variabili vengono codificate automaticamente in URL quando usate nei campi di query o nei dati del form per le variabili post, ma devono essere codificate manualmente in URL quando usate nel post raw o direttamente nell'URL.
Headers Header HTTP personalizzati che verranno inviati durante l'esecuzione di una richiesta.
Specificate come coppie attributo-valore.
Un header definito a livello di passo verrà usato per quel passo specifico.
Si noti che la definizione dell'header a livello di passo scarta automaticamente tutti gli header definiti in precedenza, eccetto un header predefinito assegnato selezionando 'User-Agent' da un elenco a discesa a livello di scenario.
Tuttavia, anche l'header predefinito 'User-Agent' può essere sovrascritto specificandolo a livello di passo.
Ad esempio, assegnando il nome a un header ma senza impostarne il valore, l'header predefinito a livello di scenario verrà rimosso.
Sono supportate le macro utente e le macro {HOST.*}.
Questo imposta l'opzione cURL CURLOPT_HTTPHEADER.
Follow redirects Selezionare la casella per seguire i redirect HTTP.
Questo imposta l'opzione cURL CURLOPT_FOLLOWLOCATION.
Retrieve mode Selezionare la modalità di recupero:
Body - recupera solo il body dalla risposta HTTP
Headers - recupera solo gli header dalla risposta HTTP
Body and headers - recupera body e header dalla risposta HTTP
Timeout Zabbix non dedicherà più del tempo impostato all'elaborazione dell'URL (da un secondo fino a un massimo di 1 ora). In realtà, questo parametro definisce il tempo massimo per stabilire la connessione all'URL e il tempo massimo per eseguire una richiesta HTTP. Pertanto, Zabbix non dedicherà più di 2 x Timeout secondi al passo.
Sono supportati i suffissi di tempo, ad esempio 30s, 1m, 1h. Sono supportate le macro utente.
Required string Pattern di espressione regolare richiesto.
A meno che il contenuto recuperato (HTML) non corrisponda al pattern richiesto, il passo fallirà. Se vuoto, non viene eseguito alcun controllo sulla stringa richiesta.
Ad esempio:
Homepage of Zabbix
Welcome.*admin
Nota: in questo campo non è supportato il riferimento a espressioni regolari create nel frontend di Zabbix.
Sono supportate le macro utente e le macro {HOST.*} macros.
Required status codes Elenco dei codici di stato HTTP attesi. Se Zabbix riceve un codice che non è presente nell'elenco, il passo fallirà.
Se vuoto, non viene eseguito alcun controllo sui codici di stato.
Ad esempio: 200,201,210-299
Sono supportate le macro utente.

Eventuali modifiche ai passi dello scenario web verranno salvate solo quando l'intero scenario verrà salvato.

Vedere anche un esempio reale di come possono essere configurati i passi del web monitoring.

Configurazione dei tag

La scheda Tag consente di definire il livello di scenario tag.

Il tagging permette di filtrare gli scenari web e il monitoraggio web items.

Configurazione dell'autenticazione

La scheda Authentication consente di configurare le opzioni di autenticazione dello scenario. Un punto verde accanto al nome della scheda indica che è abilitato un qualche tipo di autenticazione HTTP.

Parametri di autenticazione:

Parameter Description
HTTP authentication Selezionare l'opzione di autenticazione:
None - nessuna autenticazione utilizzata;
Basic - viene utilizzata l'autenticazione di base;
NTLM - viene utilizzata l'autenticazione NTLM (Windows NT LAN Manager);
Kerberos - viene utilizzata l'autenticazione Kerberos (vedere anche: Configurazione di Kerberos con Zabbix);
Digest - viene utilizzata l'autenticazione Digest.
User 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.
Password Inserire 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.
SSL verify peer Selezionare la casella di controllo per verificare il certificato SSL del web server.
Il certificato del server verrà automaticamente prelevato dalla posizione dell'autorità di certificazione (CA) a livello di sistema. È possibile sovrascrivere la posizione dei file CA usando il parametro di configurazione di Zabbix server o proxy SSLCALocation.
Questo imposta l'opzione cURL CURLOPT_SSL_VERIFYPEER.
SSL verify host Selezionare la casella di controllo per verificare che il campo Common Name o il campo Subject Alternate Name del certificato del web server corrisponda.
Questo imposta l'opzione cURL CURLOPT_SSL_VERIFYHOST.
SSL certificate file 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, lasciare vuoto il campo SSL key file. Se la chiave è crittografata, specificare la password nel campo SSL key password. La directory contenente questo file è specificata dal parametro di configurazione di Zabbix server o proxy SSLCertLocation.
In questo campo è possibile usare macro HOST.* e macro utente.
Questo imposta l'opzione cURL CURLOPT_SSLCERT.
SSL key file 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 di Zabbix server o proxy SSLKeyLocation.
In questo campo è possibile usare macro HOST.* e macro utente.
Questo imposta l'opzione cURL CURLOPT_SSLKEY.
SSL key password Password del file della chiave privata SSL.
In questo campo è possibile usare macro utente.
Questo imposta l'opzione cURL CURLOPT_KEYPASSWD.

[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 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

Zabbix server rileva le modifiche nei certificati senza richiedere un riavvio.

Se si dispone del certificato client e della chiave privata in un unico file, è sufficiente specificarlo nel campo "SSL certificate file" e lasciare vuoto il campo "SSL key file". Il certificato e la chiave devono comunque essere in formato PEM. Unire certificato e chiave è semplice:

cat client.crt client.key > client.pem

Visualizzazione

Per visualizzare gli scenari web configurati per un host, andare in Monitoring > Hosts, individuare l'host nell'elenco e fare clic sul collegamento ipertestuale Web nell'ultima colonna. Fare clic sul nome dello scenario per ottenere informazioni dettagliate.

Una panoramica degli scenari web può essere visualizzata anche in Dashboards tramite il widget di monitoraggio web.

I risultati recenti dell'esecuzione dello scenario web sono disponibili nella sezione Monitoring > Latest data.

Monitoraggio esteso

A volte è necessario registrare il contenuto della pagina HTML ricevuta.
Questo è particolarmente utile se un passaggio dello scenario web fallisce.
Il livello di debug 5 (trace) serve a questo scopo.
Questo livello può essere impostato nei file di configurazione di server e proxy oppure usando un'opzione di runtime control (-R log_level_increase="http poller,N", dove N è il numero del processo).
I seguenti esempi mostrano come avviare il monitoraggio esteso, a condizione che il livello di debug 4 sia già impostato:

# Increase log level of all http pollers:
zabbix_server -R log_level_increase="http poller"

# Increase log level of second http poller:
zabbix_server -R log_level_increase="http poller,2"

Se il monitoraggio web esteso non è richiesto, può essere interrotto usando l'opzione -R log_level_decrease.