Chapitre 04

Déclencheurs, corrélation et escalades

Une supervision se juge à ses alertes. Trop, et plus personne ne les lit ; trop peu, et l'on apprend la panne par un client. Ce chapitre règle le curseur.

Niveau avancé  ·  Lecture 13 min  ·  Base Zabbix 8.0 LTS

01Une grille de gravité qui veut dire quelque chose

Zabbix propose six niveaux de gravité. Sans convention écrite, chacun les utilise à sa façon et plus aucun ne veut rien dire. Nous associons chaque niveau à une réaction attendue, et c'est cette grille qui pilote ensuite les escalades.

GravitéSignificationRéaction attendue
Non classéeInutiliséeAucune
InformationUn fait utile, sans actionVisible dans l'interface, aucune notification
AvertissementÀ traiter dans la semaineTicket ou message dans le canal de l'équipe
MoyenneÀ traiter dans la journée ouvréeMessage à l'équipe, pas d'astreinte
HauteService dégradéAstreinte en heures ouvrées, équipe le reste du temps
DésastreService rendu indisponibleAstreinte immédiate, de jour comme de nuit

02Des expressions qui prévoient

Le déclencheur le plus courant constate un dépassement. Les plus utiles anticipent, évitent le clignotement ou détectent un silence.

Expressions types, syntaxe actuelle
# moyenne sur 10 minutes plutot que derniere valeur : ignore les pointes
avg(/Linux serveur/system.cpu.util,10m)>90

# hysteresis : se declenche a 90 %, ne se retablit que sous 80 %
#   expression           : last(/Linux serveur/vfs.fs.dependent.size[/srv,pused])>90
#   expression de retour : last(/Linux serveur/vfs.fs.dependent.size[/srv,pused])<80

# prevoir : le volume sera plein dans moins de 24 heures
timeleft(/Linux serveur/vfs.fs.dependent.size[/srv,pused],6h,100)<24h

# le silence : plus aucune donnee de l'agent depuis 5 minutes
nodata(/Linux serveur/agent.ping,5m)=1

# la tendance longue : le mois ecoule depasse de 30 % le mois d'avant
trendavg(/Routeur/net.if.in[wan],1M:now/M)>1.3*trendavg(/Routeur/net.if.in[wan],1M:now/M-1M)
Gardez la logique dans les modèles

Écrivez ces expressions dans des modèles, avec des macros pour les seuils, jamais sur des hôtes isolés. Un déclencheur posé à la main sur un hôte est invisible pour le collègue qui reprend la plateforme, et ne survit pas à une recréation de l'hôte.

03Dépendances et maintenances

Les dépendances éteignent les cascades

Quand le routeur d'un site tombe, tout ce qui est derrière devient injoignable. Sans dépendance, vous recevez une alerte par hôte et cherchez la cause au milieu de cinquante messages. Avec une dépendance de l'agent de chaque hôte vers la disponibilité du routeur, vous n'en recevez qu'une : la bonne.

Pour un site derrière un proxy, la dépendance naturelle est la disponibilité du proxy lui-même. Pour les invités d'un cluster, c'est l'hôte « cluster » du chapitre 03.

Les maintenances font taire ce qui est prévu

Une période de maintenance suspend les notifications d'un groupe d'hôtes ou d'étiquettes pendant une plage donnée, en continuant ou non la collecte. Nous la posons pour chaque intervention planifiée, et automatiquement par l'API depuis nos scripts d'exploitation (chapitre 05) : une mise à jour de noeud Proxmox commence par la maintenance du noeud et finit par sa levée.

Collecter pendant la maintenance

Gardez la collecte active pendant la maintenance. Les graphiques de l'intervention sont précieux pour comprendre un comportement inhabituel le lendemain, et les problèmes encore ouverts à la fin de la plage sont notifiés normalement : c'est le filet de sécurité de l'intervention qui ne s'est pas bien terminée.

04La corrélation d'événements

La corrélation ferme ou regroupe automatiquement des problèmes liés. Deux usages couvrent l'essentiel :

  • La corrélation par déclencheur, réglée dans le déclencheur lui-même : un problème par valeur d'étiquette, et la fermeture ne concerne que l'événement qui porte la même valeur. C'est ce qui permet à un unique déclencheur sur un journal de suivre séparément plusieurs services.
  • La corrélation globale, réglée dans les paramètres de données : un nouvel événement portant une étiquette donnée ferme les anciens problèmes portant la même. Par exemple, l'événement « service rétabli » envoyé par un système externe ferme le problème « service en panne » ouvert par le même système.

05Actions et escalades

Une action réunit des conditions (gravité, étiquettes, groupe d'hôtes, période) et des opérations échelonnées. Voici le schéma que nous appliquons pour les alertes de production d'un client sous contrat d'astreinte.

ÉtapeDélaiDestinataireCanal
1ImmédiatÉquipe du client concernéCanal de discussion de l'équipe
215 minutes sans acquittementPersonne d'astreinteNotification mobile prioritaire
330 minutes sans acquittementSecond niveau d'astreinteNotification mobile et appel
41 heure sans acquittementResponsable techniqueNotification mobile
Retour à la normaleÀ la résolutionTous ceux qui ont été notifiésMême canal que l'alerte

La condition « problème non acquitté » sur chaque étape est ce qui rend l'escalade supportable : dès qu'un humain a pris l'incident en charge, les étapes suivantes ne partent pas. Les opérations de mise à jour notifient l'équipe quand quelqu'un acquitte ou commente, ce qui évite que deux personnes traitent le même incident sans le savoir.

06Les canaux de notification

Zabbix fournit de nombreux types de médias sous forme de webhooks : Telegram, Mattermost, Microsoft Teams, Slack, ntfy, et la plupart des outils de ticket. Trois principes :

  • Deux canaux indépendants pour l'astreinte, dont au moins un qui ne passe pas par votre propre infrastructure.
  • Des messages qui se lisent sur un écran de verrouillage : hôte, problème, gravité, durée en une ligne. Le détail suit dans le corps, avec le lien vers l'événement.
  • Un test après chaque modification, avec le bouton prévu dans le type de média. Un webhook cassé ne prévient personne qu'il est cassé.
Un sujet de message qui se lit d'un coup d'oeil
[{EVENT.SEVERITY}] {HOST.NAME} : {EVENT.NAME}

Depuis {EVENT.DATE} {EVENT.TIME} ({EVENT.AGE})
Valeur : {EVENT.OPDATA}
Etiquettes : {EVENT.TAGS}
https://zabbix.exemple.fr/zabbix.php?action=problem.view&filter_eventid={EVENT.ID}

07L'hygiène des alertes

Une plateforme d'alertes se dégrade si personne ne l'entretient. Une demi-heure par mois suffit :

  • consulter le rapport des cent déclencheurs les plus actifs, et traiter les cinq premiers : seuil à relever, hystérésis à ajouter, ou vrai problème à corriger ;
  • supprimer les déclencheurs qui n'ont jamais provoqué la moindre action ;
  • vérifier qu'aucun hôte n'est resté en maintenance depuis l'intervention du mois dernier ;
  • relire les problèmes ouverts depuis plus de trente jours : ils sont soit à résoudre, soit à supprimer, jamais à garder pour décorer.
L'indicateur qui résume tout

Le nombre de notifications d'astreinte par semaine qui n'ont donné lieu à aucune action. L'objectif est zéro. Chaque alerte de nuit inutile use la confiance de l'équipe dans l'outil, et c'est cette confiance qui fait qu'on se lève pour la suivante.

Une supervision qui veille pendant que vous dormez

Nous concevons, installons et exploitons des plateformes de supervision pour des PME, des hébergeurs et des collectivités : Zabbix, Prometheus et Grafana, ou plus léger quand le besoin l'est. Reprise d'une supervision existante, réglage des alertes qui sonnent pour rien, astreinte : nous intervenons au forfait comme au long cours.