Sidebar

Zabbix Summit 2022
View presentations

9. Web monitoring

Aperçu

Avec Zabbix, vous pouvez vérifier plusieurs aspects de la disponibilité des sites Web.

Pour effectuer une supervision Web, le serveur Zabbix doit être initialement configuré avec le support cURL (libcurl).

Pour activer la supervision Web, vous devez définir des scénarios Web. Un scénario Web consiste en une ou plusieurs requêtes HTTP ou "étapes". Les étapes sont exécutées périodiquement par le serveur Zabbix dans un ordre prédéfini. Si un hôte est supervisé par proxy, les étapes sont exécutées par le proxy.

Depuis Zabbix 2.2, les scénarios Web sont associés aux hôtes/modèles de la même manière que les éléments, les déclencheurs, etc. Cela signifie que les scénarios Web peuvent également être créés au niveau du modèle, puis appliqués à plusieurs hôtes en même temps.

Les informations suivantes sont collectées dans n'importe quel scénario Web :

  • vitesse moyenne de téléchargement par seconde pour toutes les étapes du scénario entier
  • numéro de l'étape qui a échouée
  • dernier message d'erreur

Les informations suivantes sont collectées dans chaque étape de scénario Web :

  • vitesse de téléchargement par seconde
  • Temps de réponse
  • Code de réponse

Pour plus de détails, voir les éléments de supervision web.

Les données collectées lors de l'exécution de scénarios Web sont conservées dans la base de données. Les données sont automatiquement utilisées pour les graphiques, les déclencheurs et les notifications.

Zabbix peut également vérifier si une page HTML récupérée contient une chaîne prédéfinie. Il peut exécuter une connexion simulée et suivre un chemin de clics simulés sur la page.

La supervision Web Zabbix prend en charge à la fois HTTP et HTTPS. Lors de l'exécution d'un scénario Web, Zabbix suit éventuellement les redirections (voir l'option Suivre les redirections en dessous). Le nombre maximal de redirections est codé en dur à 10 (en utilisant l'option cURL CURLOPT_MAXREDIRS). Tous les cookies sont conservés lors de l'exécution d'un scénario unique.

Voir aussi les problèmes connus pour la supervision Web à l'aide du protocole HTTPS.

Configurer un scenario web

Pour configurer un scenario web :

  • Allez dans : Configuration → Hôtes (ou Modèles)
  • Cliquez sur Web dans la ligne de l'hôte/modèle
  • Cliquez sur Créer un scénario web à droite (ou sur le nom du scénario pour modifier un scénario existant)
  • Entrez les paramètres du scénario dans le formulaire

L'onglet Scénario vous permet de configurer les paramètres généraux d'un scénario Web.

Tous les champs de saisie obligatoires sont marqués d'un astérisque rouge.

Paramètres de scénario :

Paramètre Description
Hôte Nom de l'hôte/modèle auquel le scénario appartient.
Nom Nom unique du scénario.
Les macros utilisateurs et les macros {HOST.*} sont supportées depuis Zabbix 2.2.
Application Sélectionnez une application à laquelle le scénario appartiendra.
Les éléments du scénario Web seront regroupés sous l'application sélectionnée dans // Surveillance → Dernières données . | |Nouvelle application//
Entrez le nom de la nouvelle application pour le scénario.
Intervalle de mise à jour A quelle fréquence le scénario sera exécuté.
Les suffixes de temps sont supportés, ex : 30s, 1m, 2h, 1d, depuis Zabbix 3.4.0.
Les macros utilisateurs sont supportées depuis Zabbix 3.4.0.
Notez que si une macro utilisateur est utilisée et que sa valeur change (e.g. 5m → 30s), la prochaine vérification sera exécutée selon la valeur précédente (plus tard dans le futur avec les valeurs d'exemple).
Tentatives Nombre de tentatives d'exécution des étapes du scénario Web. En cas de problèmes réseau (timeout, absence de connectivité, etc.), Zabbix peut répéter plusieurs fois l'exécution d'une étape. Le chiffre positionné affectera également chaque étape du scénario. Vous pouvez spécifier jusqu'à 10 tentatives, la valeur par défaut est 1.
// Note //: Zabbix ne répètera pas une étape en raison d'un code de réponse erroné ou d'une non-concordance d'une chaîne requise.
Ce paramètre est pris en charge à partir de Zabbix 2.2.
Agent Sélectionnez un agent client.
Zabbix fera semblant d'être le navigateur sélectionné. Ceci est utile lorsqu'un site Web renvoie un contenu différent pour différents navigateurs.
Les macros utilisateur peuvent être utilisées dans ce champ, // à partir de Zabbix 2.2 . | |Proxy HTTP//
Vous pouvez spécifier un proxy HTTP à utiliser, en utilisant le format suivant : http://[username[:password]@]proxy.mycompany.com[:port]
Par défaut, le port 1080 sera utilisé.
Si spécifié, le proxy remplacera les variables d'environnement liées au proxy, telles que http_proxy, HTTPS_PROXY. S'il n'est pas spécifié, le proxy n'écrasera pas les variables d'environnement liées au proxy.
La valeur saisie est transmise "telle quelle", aucune vérification de la validité n'est effectuée. Vous pouvez également entrer une adresse proxy SOCKS. Si vous spécifiez le mauvais protocole, la connexion échouera et l'élément ne sera plus pris en charge. En l'absence de protocole spécifié, le proxy sera traité comme un proxy HTTP.
//Remarque //: Seule une authentification simple est prise en charge avec le proxy HTTP.
Les macros utilisateur peuvent être utilisées dans ce champ.
Ce paramètre est pris en charge à partir de // Zabbix 2.2 . | |Variables//
Variables pouvant être utilisées dans les étapes du scénario (URL, variables post).
Elles ont le format suivant :
{macro1}=value1
{macro2}=value2
{macro3}=regex:<regular expression>
Par exemple :
{username}=Alexei
{password}=kj3h5kJ34bd
{hostid}=regex:hostid is ([0-9]+)
Les macros peuvent ensuite être référencées dans les étapes sous la forme {username}, {password} et {hostid}. Zabbix les remplacera automatiquement par des valeurs réelles. Notez que les variables avec regex: ont besoin d'une étape pour obtenir la valeur de l'expression régulière afin que la valeur extraite ne puisse être appliquée qu'à l'étape suivante.
Si la partie valeur commence par "regex:", la partie après celle-ci est traitée comme une expression régulière qui recherche la page Web et, si elle est trouvée, stocke la correspondance dans la variable. Au moins un sous-groupe doit être présent pour que la valeur correspondante puisse être extraite. La correspondance des expressions régulières dans les variables est prise en charge // depuis Zabbix 2.2 .
Les macros utilisateur et les macros {HOST.*} sont pris en charge, depuis Zabbix 2.2.
Les variables sont automatiquement encodées en URL lorsqu'elles sont utilisées dans des champs de requête ou des données de formulaire pour des variables post, mais doivent être encodées manuellement lorsqu'elles sont utilisées en post brut ou directement dans l'URL. | |
Headers//
Les en-têtes HTTP personnalisés qui seront envoyés lors de l'exécution d'une requête.
Les en-têtes doivent être répertoriés en utilisant la même syntaxe qu'ils apparaîssent dans le protocole HTTP, en utilisant éventuellement certaines fonctionnalités supplémentaires prises en charge par l'option cURL CURLOPT_HTTPHEADER.
Par exemple :
Accept-Charset=utf-8
Accept-Language=en-US
Content-Type=application/xml; charset=utf-8
Les macros utilisateur et les macros {HOST.*} sont supportées.
La spécification des en-têtes personnalisées est supportée à partir de Zabbix 2.4.
Activer Le scénario est activé sur cette case est cochée, sinon - désactivé.

Notez que lors de l'édition d'un scénario existant, deux boutons supplémentaires sont disponibles dans le formulaire :

Créez un autre scénario basé sur les propriétés d'un scénario existant.
Supprimer l'historique et les données de tendance du scénario. Cela obligera le serveur à exécuter le scénario immédiatement après la suppression des données.

Si le champs proxy HTTP est laissé vide, un autre moyen d'utiliser un proxy HTTP est de positionner les variables d'environnement liés au proxy.

Pour les vérifications HTTP - positionnez la variable d'environnement http_proxypour l'utilisateur du serveur Zabbix server user. Par exemple : //http_proxy=http:%%//%%proxy_ip:proxy_port//.

Pour les vérifications HTTPS - positionnez la variable d'environnement HTTPS_PROXY. Par exemple, //HTTPS_PROXY=http:%%//%%proxy_ip:proxy_port//. Plus de détails sont disponibles en exécutant la commande : # man curl.

L'onglet Etapes vous permet de configurer les étapes du scénario web. Pour ajouter une étape d'un scénario web, cliquez sur Ajouter dans le bloc Etapes.

Configuring steps

Step parameters:

Parameter Description
Name Unique step name.
User macros and {HOST.*} macros are supported, since Zabbix 2.2.
URL URL to connect to and retrieve data. For example:
https://www.google.com
http://www.zabbix.com/download
Domain names can be specified in Unicode characters since Zabbix 3.4. They are automatically punycode-converted to ASCII when executing the web scenario step.
The Parse button can be used to separate optional query fields (like ?name=Admin&password=mypassword) from the URL, moving the attributes and values into Query fields for automatic URL-encoding.
Variables can be used in the URL, using the {macro} syntax. Variables can be URL-encoded manually using a {{macro}.urlencode()} syntax.
User macros and {HOST.*} macros are supported, since Zabbix 2.2.
Limited to 2048 characters starting with Zabbix 2.4.
Query fields HTTP GET variables for the URL.
Specified as attribute and value pairs.
Values are URL-encoded automatically. Values from scenario variables, user macros or {HOST.*} macros are resolved and then URL-encoded automatically. Using a {{macro}.urlencode()} syntax will double URL-encode them.
User macros and {HOST.*} macros are supported since Zabbix 2.2.
Post HTTP POST variables.
In Form data mode, specified as attribute and value pairs.
Values are URL-encoded automatically. Values from scenario variables, user macros or {HOST.*} macros are resolved and then URL-encoded automatically.
In Raw data mode, attributes/values are displayed on a single line and concatenated with a & symbol.
Raw values can be URL-encoded/decoded manually using a {{macro}.urlencode()} or {{macro}.urldecode()} syntax.
For example: id=2345&userid={user}
If {user} is defined as a variable of the web scenario, it will be replaced by its value when the step is executed. If you wish to URL-encode the variable, substitute {user} with {{user}.urlencode()}.
User macros and {HOST.*} macros are supported, since Zabbix 2.2.
Variables Step-level variables that may be used for GET and POST functions.
Specified as attribute and value pairs.
Step-level variables override scenario-level variables or variables from the previous step. However, the value of a step-level variable only affects the step after (and not the current step).
They have the following format:
{macro}=value
{macro}=regex:<regular expression>
For more information see variable description on the scenario level.
Having step-level variables is supported since Zabbix 2.2.
Variables are automatically URL-encoded when used in query fields or form data for post variables, but must be URL-encoded manually when used in raw post or directly in URL.
Headers Custom HTTP headers that will be sent when performing a request.
Specified as attribute and value pairs.
Headers on the step level will overwrite the headers specified for the scenario.
For example, setting a 'User-Agent' attribute with no value will remove the User-Agent value set on scenario level.
User macros and {HOST.*} macros are supported.
This sets the CURLOPT_HTTPHEADER cURL option.
Specifying custom headers is supported starting with Zabbix 2.4.
Follow redirects Mark the checkbox to follow HTTP redirects.
This sets the CURLOPT_FOLLOWLOCATION cURL option.
This option is supported starting with Zabbix 2.4.
Retrieve only headers Mark the checkbox to retrieve only headers from the HTTP response.
This sets the CURLOPT_NOBODY cURL option.
This option is supported starting with Zabbix 2.4.
Timeout Zabbix will not spend more than the set amount of time on processing the URL (maximum is 1 hour). Actually this parameter defines the maximum time for making connection to the URL and maximum time for performing an HTTP request. Therefore, Zabbix will not spend more than 2 x Timeout seconds on the step.
Time suffixes are supported, e.g. 30s, 1m, 1h. User macros are supported.
Required string Required regular expressions pattern.
Unless retrieved content (HTML) matches required pattern the step will fail. If empty, no check is performed.
For example:
Homepage of Zabbix
Welcome.*admin
Note: Referencing regular expressions created in the Zabbix frontend is not supported in this field.
User macros and {HOST.*} macros are supported, since Zabbix 2.2.
Required status codes List of expected HTTP status codes. If Zabbix gets a code which is not in the list, the step will fail.
If empty, no check is performed.
For example: 200,201,210-299
User macros are supported since Zabbix 2.2.

Any changes in web scenario steps will only be saved when the whole scenario is saved.

See also a real-life example of how web monitoring steps can be configured.

Configuring authentication

The Authentication tab allows you to configure scenario authentication options.

Authentication parameters:

Parameter Description
Authentication Authentication options.
None - no authentication used.
Basic authentication - basic authentication is used.
NTLM authentication - NTLM (Windows NT LAN Manager) authentication is used.
Selecting an authentication method will provide two additional fields for entering a user name and password.
User macros can be used in user and password fields, starting with Zabbix 2.2.
SSL verify peer Mark the checkbox to verify the SSL certificate of the web server.
The server certificate will be automatically taken from system-wide certificate authority (CA) location. You can override the location of CA files using Zabbix server or proxy configuration parameter SSLCALocation.
This sets the CURLOPT_SSL_VERIFYPEER cURL option.
This option is supported starting with Zabbix 2.4.
SSL verify host Mark the checkbox to verify that the Common Name field or the Subject Alternate Name field of the web server certificate matches.
This sets the CURLOPT_SSL_VERIFYHOST cURL option.
This option is supported starting with Zabbix 2.4.
SSL certificate file Name of the SSL certificate file used for client authentication. The certificate file must be in PEM1 format. If the certificate file contains also the private key, leave the SSL key file field empty. If the key is encrypted, specify the password in SSL key password field. The directory containing this file is specified by Zabbix server or proxy configuration parameter SSLCertLocation.
HOST.* macros and user macros can be used in this field.
This sets the CURLOPT_SSLCERT cURL option.
This option is supported starting with Zabbix 2.4.
SSL key file Name of the SSL private key file used for client authentication. The private key file must be in PEM1 format. The directory containing this file is specified by Zabbix server or proxy configuration parameter SSLKeyLocation.
HOST.* macros and user macros can be used in this field.
This sets the CURLOPT_SSLKEY cURL option.
This option is supported starting with Zabbix 2.4.
SSL key password SSL private key file password.
User macros can be used in this field.
This sets the CURLOPT_KEYPASSWD cURL option.
This option is supported starting with Zabbix 2.4.

[1] Zabbix supports certificate and private key files in PEM format only. In case you have your certificate and private key data in PKCS #12 format file (usually with extention *.p12 or *.pfx) you may generate the PEM file from it using the following commands:

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 picks up changes in certificates without a restart.

If you have client certificate and private key in a single file just specify it in a "SSL certificate file" field and leave "SSL key file" field empty. The certificate and key must still be in PEM format. Combining certificate and key is easy:

cat client.crt client.key > client.pem

Display

To view detailed data of defined web scenarios, go to Monitoring → Web or Latest data. Click on the scenario name to see more detailed statistics.

An overview of web monitoring scenarios can be viewed in Monitoring → Dashboard.

Extended monitoring

Sometimes it is necessary to log received HTML page content. This is especially useful if some web scenario step fails. Debug level 5 (trace) serves that purpose. This level can be set in server and proxy configuration files or using a runtime control option (-R log_level_increase="http poller,N", where N is the process number). The following examples demonstrate how extended monitoring can be started provided debug level 4 is already set:

Increase log level of all http pollers:
       shell> zabbix_server -R log_level_increase="http poller"
       
       Increase log level of second http poller:
       shell> zabbix_server -R log_level_increase="http poller,2"

If extended web monitoring is not required it can be stopped using the -R log_level_decrease option.

Extended monitoring

Sometimes it is necessary to log received HTML page content. This is especially useful if some web scenario step fails. Debug level 5 (trace) serves that purpose. This level can be set in server and proxy configuration files or using a runtime control option (-R log_level_increase="http poller,N", where N is the process number). The following examples demonstrate how extended monitoring can be started provided debug level 4 is already set:

Increase log level of all http pollers:
       shell> zabbix_server -R log_level_increase="http poller"
       
       Increase log level of second http poller:
       shell> zabbix_server -R log_level_increase="http poller,2"

If extended web monitoring is not required it can be stopped using the -R log_level_decrease option.