Superviser un service HTTPS avec Zabbix 7.4 : disponibilité, temps de réponse et alertes
Introduction
Surveiller qu’un service HTTPS n’accepte pas seulement une connexion TCP sur le port 443 mérite toute l’attention d’un administrateur homelab. Un simple contrôle de port (avec icmpping ou un check natif du type tcpconn) ne vérifie que la présence du processus écoutant. Il ne garantit ni le code HTTP retourné, ni la validité du certificat TLS, ni le temps de réponse réel perçu par un client. C’est précisément ce qu’apportent les scénarios web (web scenarios) dans Zabbix : une série pas-à-pas de requêtes HTTP(S) simulées, exécutées par le serveur Zabbix lui-même via cURL, avec retour sur le code de réponse, la durée et le contenu.
Cet article montre comment configurer un scénario web basique, extraire les métriques clés, créer des déclencheurs d’alerte pertinents, et diagnostiquer les erreurs courantes — le tout dans Zabbix 7.4.
Prérequis
- Zabbix 7.4 (server ou proxy) installé et opérationnel.
- Le serveur Zabbix doit être compilé avec le support cURL (
libcurl). C’est le cas par défaut sur les paquets officiels [1]. - Un accès à l’interface web de Zabbix (Web UI), avec des droits suffisants pour créer des scénarios web (
Configuration → Hosts, onglet Web). - Un hôte ou service cible déjà enregistré dans Zabbix, sur lequel le serveur a une connectivité réseau.
Note : la surveillance directe du certificat SSL/TLS (expiration, chaîne de certificats) utilise une clé distincte —
web.certificate.getvia l’agent 2 [6]. Elle ne fait pas partie des scénarios web mais complète idéalement cette approche.
Configurer un scénario web dans Zabbix 7.4
Créer le scénario
Depuis la configuration de l’hôte cible :
- Cliquez sur Web dans la ligne de l’hôte.
- Puis Create web scenario.
- Renseignez :
- Name : un nom explicite, par exemple
HTTPS Homepage check. - Update interval : fréquence d’exécution —
1mpour une minute,5m, etc. - Agent (User-Agent) : le type d’agent simulé (
Zabbix,Mozilla,Custom). - Authentication : aucune,
Basic, ouNegotiate/NTLM. - Sauvegardez.
Ajouter les étapes du scénario
Chaque étape correspond à une requête HTTP(S) exécute dans l’ordre. Cliquez sur Add dans le bloc Steps.
Étape 1 — Page d’accueil :
| Paramètre | Valeur |
|---|---|
| Name | Homepage |
| No | 1 (numéro séquentiel) |
| URL | https://exemple.local/health |
| Follow redirects | 1 par défaut (suit jusqu’à 10 redirections max, fixé par CURLOPT_MAXREDIRS) [2] |
| Timeout | 30s — durée maximale pour établir la connexion + effectuer la requête |
| HTTP method | GET |
| Headers | Exemple : Accept: application/json (une ligne de header par entrée) |
| Required status codes | 200,201 — codes acceptés ; le scénario échoue autrement [2] |
| Required string | "ok" — texte obligatoire dans le corps de la réponse |
Étape 2 — Endpoint secondaire (optionnel) :
| Paramètre | Valeur |
|---|---|
| Name | API health |
| No | 2 |
| URL | https://exemple.local/api/health |
| HTTP method | GET |
| Timeout | 15s |
| Required status codes | 200 |
L’ordre des étapes est déterminé par le champ No. Le numéro 1 s’exécute avant le numéro 2.
Paramètres au niveau du scénario (rappel)
Les champs globaux du scénario — Agent, Authentication (nom d’utilisateur/mot de passe), HTTP proxy, verify_peer / verify_host pour TLS — s’appliquent à toutes les étapes, sauf si une étape redéfinit un header. La documentation rappelle que définir un header au niveau de l’étape remplace tous les headers préalablement définis au niveau du scénario [2].
Métriques extraites par Zabbix
Dès la création d’un scénario web, Zabbix crée automatiquement des items liés :
Items au niveau du scénario :
| Nom (description) | Clé de l’item | Type |
|---|---|---|
| Download speed for scenario | web.test.in[Scenario,,bps] |
Numeric(float) |
| Failed step of scenario | web.test.fail[Scenario] |
Numeric(unsigned) |
| Error for scenario | web.test.error[Scenario] |
Character |
Items au niveau de chaque étape (Step) :
| Nom (description) | Clé de l’item | Type |
|---|---|---|
| Download speed for step | web.test.in[Scenario,Step,bps] |
Numeric(float) |
| Response time for step | web.test.time[Scenario,Step,resp] |
Numeric(float) |
| Response code for step | web.test.rspcode[Scenario,Step] |
Numeric(unsigned) |
| Failed step of scenario | web.test.fail[Scenario,Step] |
Numeric(unsigned) [1] |
Le scénario web est visible via Monitoring → Web [3].
Ces item clés sont documentées dans la section officielle « 1 Web monitoring items » de Zabbix 7.4 [1].
Exemples de triggers (déclencheurs)
1. Scénario web échoué
Le scénario a échoué sur au moins une étape :
last(/hote/cible,web.test.fail[HTTPS Homepage check])<>0
Pour un descriptif dans le nom du trigger, on peut inclure le texte d’erreur :
Web scenario "HTTPS Homepage check": {ITEM.VALUE}
2. Échecs répétés (dern())
Si le scénario doit échouer 3 fois de suite pour déclencher l’alerte :
last(/hote/cible,web.test.fail[HTTPS Homepage check])<>0 and last(/hote/cible,web.test.fail[HTTPS Homepage check],#2)=last(/hote/cible,web.test.fail[HTTPS Homepage check]) and last(/hote/cible,web.test.fail[HTTPS Homepage check],#3)=last(/hote/cible,web.test.fail[HTTPS Homepage check])
Une formulation plus concise utilise count() :
count(/hote/cible,web.test.fail[HTTPS Homepage check],5m,0)=5
Cela détecte 5 échecs consécutifs dans les 5 dernières minutes. La fonction last() prend en charge la notation ,#N pour le n-ème valeur précédente [4].
3. Temps de réponse anormalement élevé
On vérifie ici le temps de réponse de l’étape « Homepage » du scénario :
last(/hote/cible,web.test.time[HTTPS Homepage check,Homepage,resp])>3
Si la moyenne glissante dépasse 3 secondes sur les 2 dernières remontées :
max(/hote/cible,web.test.time[HTTPS Homepage check,Homepage,resp],2m)>3
4. Code HTTP inattendu sur une étape
Superviser qu’une étape retourne systématiquement le code 200 :
last(/hote/cible,web.test.rspcode[HTTPS Homepage check,Homepage])<>200
Remarque importante : les expressions de trigger citées ici utilisent la syntaxe de Zabbix 7.4 (nouvelle syntaxe depuis 5.4) avec la fonction
last()en forme standard/host/key[params][4]. La syntaxe ancienne au format{HOST.KEY}.func()est encore acceptée mais considérée comme obsolète dans les récentes versions de Zabbix.
Vérification des alertes et notification
Pour s’assurer que le mécanisme d’alerte fonctionne à l’aide d’un scénario web :
- Fausser manuellement un résultat en modifiant temporairement la valeur attendue dans zéro (par exemple changer
Required status codesde200à200,500pour désactiver ou mettre un code erroné comme404seul). - Patienter le temps que l’intervalle d’exécution effectue au moins deux cycles (ex. 2 × 1 min = 2 min si l’intervalle est de 1 minute) [5].
- Consulter Monitoring → Problems : si un événement Problem apparaît, la notification est opérationnelle. Le problème doit inclure le trigger associé et le statut
PROBLEM. - Restaurer la configuration correcte du scénario immédiatement après le test.
Cette méthode est une procédure de validation manuelle non documentée dans l’interface ; aucun bouton officiel n’existe pour « simuler » un scénario web. La seule manière fiable reste d’attendre qu’une condition de trigger soit réellement atteinte par les données collectées [5].
Limites et erreurs courantes
Erreurs SSL/TLS invalides
Zabbix 7.4 gère la vérification du certificat via verify_peer et verify_host au niveau du scénario [2] : si leur valeur impose une validation stricte mais que le certificat de l’hôte cible est auto-signé, le scénario échouera systématiquement avec un code d’erreur SSL. Dans ce cas, soit placer ces deux paramètres à 0, ou ajouter l’autorité racine au dépôt de confiance (SSLCertLocation dans la configuration du serveur Zabbix [2]).
Timeouts trop courts par défaut
Chaque étape dispose d’un Timeout (par défaut 15 s). Si le service est lent, un timeout de 15 s peut être insuffisant. La valeur maximale est de 1 heure (1h), exprimée avec suffixe : 30s, 1m, 1h [2]. Attention : Zabbix consomme jusqu’à 2 × Timeout secondes par étape au maximum (temps de connexion + temps de requête).
Résolution DNS masquée
Si un nom de domaine utilisé dans une URL ne peut pas être résolu, le scénario échouera avec une erreur Couldn't resolve host name, sans distinguer si c’est le timeout ou le DNS qui a causé l’échec. Pour diagnostiquer, consulter l’item web.test.error[Scenario] pour obtenir le message d’erreur exact [1]. Il n’existe pas de résulateur DNS explicite — ce comportement est celui de cURL sous-jacent ; la documentation officielle ne mentionne aucune étape DNS séparée dans un scénario web [2]. Pour contourner : utiliser une adresse IP brute (IPv4/IPv6) dans l’URL, ou vérifier que le serveur Zabbix resolve correctement le nom (dig ou nslookup en ligne de commande).
Proxy non configuré pour les check HTTPS
Pour les vérifications HTTPS via proxy, la variable d’environnement HTTPS_PROXY (en majuscule selon la convention curl) doit être définie pour l’utilisateur du serveur Zabbix [2]. De même, HTTP_PROXY pour les requêtes HTTP. Ces variables ne sont pas dans un champ de la configuration Zabbix classique : elles relèvent de l’environnement système du processus zabbix_server ou zabbix_proxy.
Sources et vérifications
- Clés d’items web monitoring (
web.test.fail[],web.test.time[],web.test.rspcode[]) — Documentation Zabbix 7.4 « 1 Web monitoring items » — https://www.zabbix.com/documentation/current/en/manual/web_monitoring/items — relevé le 2026-11-06 - Propriétés du web scenario step URL (timeout, follow_redirects, status_codes) — Documentation Zabbix 7.4 API reference « Web scenario object » — https://www.zabbix.com/documentation/7.4/en/manual/api/reference/httptest/object — relevé le 2026-11-06
- Page d’exemple réel (real life scenario) web monitoring — Documentation Zabbix 7.4 « 2 Real-life scenario » — https://www.zabbix.com/documentation/current/en/manual/web_monitoring/example — relevé le 2026-11-06
- Syntaxe des expressions de trigger (fonction
last(), notation,#N) — Documentation Zabbix 7.4 « Trigger expression and functions » — https://www.zabbix.com/documentation/7.4/en/manual/config/triggers/expression — relevé le 2026-11-06 - Accès Web scenario via Monitoring → Web, création du scénario — Documentation Zabbix 7.4 « 9 Web monitoring » — https://www.zabbix.com/documentation/current/en/manual/web_monitoring — relevé le 2026-11-06
- Surveillance de certificat SSL/TLS via
web.certificate.get(clé agent 2) — Documentation Zabbix 7.4 « Website certificate by Zabbix agent 2 » — https://www.zabbix.com/integrations/ssl — relevé le 2026-11-06
