Zabbix : de l'alerte reactive a la supervision proactive

Comment NexTool deploie et maintient Zabbix a cote de GLPI : triggers predictifs (timeleft), hysteresis contre le flapping et un webhook qui devient un ticket avec responsable via le module Automatisations.

Zabbix devient une supervision proactive lorsque l'alerte cesse d'etre un e-mail que personne ne lit et devient un ticket GLPI avec un responsable, une priorite et du contexte. Chez NexTool, Zabbix ne fonctionne pas de maniere isolee : il se place a cote du GLPI que nous maintenons deja pour le client, et chaque trigger pertinent nait relie a un flux de reponse. Cet article montre comment nous deployons et maintenons ce duo - de l'architecture au trigger reel et a l'integration avec le module Automatisations de NexTool.

Architecture : Zabbix a cote de GLPI, sans le concurrencer

L'erreur classique est de traiter Zabbix et GLPI comme des mondes separes : Zabbix crie, quelqu'un le voit et ouvre le ticket a la main. Cela ajoute des minutes (ou des heures) entre la detection et l'action, et cela depend d'un humain qui surveille le tableau de bord. Dans notre deploiement, Zabbix Server tourne dans un conteneur a cote de la stack du client, avec Zabbix Agent 2 sur les hotes supervises. Le point d'integration est le media type webhook de Zabbix, qui declenche un POST vers le endpoint stateless du module Automatisations de NexTool - et c'est Automatisations qui cree le ticket GLPI, avec une authentification HMAC SHA-256 par flux.

Cette separation des roles compte : Zabbix decide ce qui est un signal digne d'action (le trigger) ; Automatisations decide comment cela devient du travail dans le service desk (categorie, entite, urgence, technicien). Modifier l'un sans toucher a l'autre devient trivial.

Triggers qui comptent : fenetre temporelle et recovery, pas un pic isole

En maintenance, la cause numero un du "tout le monde coupe le son de Zabbix" est le flapping : un pic CPU de 2 secondes leve et efface l'alerte des dizaines de fois par heure. La defense est double - evaluer sur une fenetre temporelle et utiliser une expression de recovery distincte (hysteresis), afin que le probleme ne se ferme que lorsqu'il s'est reellement stabilise. Un trigger de disque qui se remplit, ecrit pour predire la panne avant qu'elle n'arrive, ressemble a ceci :

# Trigger : le filesystem racine se remplira dans les 24h a venir (prediction, pas reaction)
# name: "Disque {HOST.NAME} : prediction de saturation de / sous 24h"
timeleft(/Linux by Zabbix agent/vfs.fs.size[/,pfree],1h,0)<24h
  and
last(/Linux by Zabbix agent/vfs.fs.size[/,pused])>80

# Trigger avec hysteresis (recovery different du probleme) pour eviter le flapping CPU
# Expression de probleme :
avg(/Linux by Zabbix agent/system.cpu.util,5m)>90
# Expression de recovery (n'efface que si ca baisse vraiment) :
avg(/Linux by Zabbix agent/system.cpu.util,5m)<70

La fonction timeleft() est le coeur du "proactif" : a partir de la tendance, elle projette combien de temps il reste avant que le disque ne se remplisse - et alerte tant qu'il est encore temps d'agir, pas quand le service est deja tombe. L'erreur courante ici est d'utiliser last() sur une valeur d'usage de 95% et d'appeler cela proactif ; ce n'est pas le cas, c'est du reactif avec un seuil plus lache.

Modeles et macros : coherence entre hotes

Nous standardisons serveurs, reseau et applications via un modele (template) lie, avec les seuils exposes sous forme de macros ({$CPU.UTIL.CRIT}, {$VFS.FS.PUSED.MAX.CRIT}). Ainsi un hote qui vit legitimement avec un usage eleve (une base de donnees, par exemple) recoit un override de la macro sur l'hote lui-meme, sans dupliquer le trigger ni casser le modele des 200 autres hotes. Cela accelere l'onboarding des nouveaux hotes et evite la derive silencieuse qui corrompt toute supervision mature.

Integration avec GLPI : le webhook qui devient un ticket

Le media type webhook de Zabbix est un script JavaScript qui construit le payload et fait le POST. Ce que nous envoyons a Automatisations porte de quoi faire naitre le ticket avec du contexte - severite, hote, item, valeur et le {EVENT.ID}, que nous utilisons comme cle d'idempotence pour ne pas ouvrir deux tickets pour le meme evenement :

// Zabbix media type (webhook) -> Automatisations NexTool -> GLPI
var req = new HttpRequest();
req.addHeader('Content-Type: application/json');
req.addHeader('X-Signature: ' + hmacSha256(params.payload, params.secret));

var payload = JSON.stringify({
  event_id:   '{EVENT.ID}',        // cle d'idempotence
  severite:   '{EVENT.SEVERITY}',  // mappee vers l'urgence GLPI
  hote:       '{HOST.NAME}',
  declencheur:'{TRIGGER.NAME}',
  valeur:     '{ITEM.VALUE}',
  statut:     '{EVENT.VALUE}'      // 1=probleme, 0=retabli
});

var resp = req.post('https://glpi.client.com/automatisations/hook/zabbix', payload);
return JSON.stringify({ tags: [{ tag: '__glpi_ticket', value: resp }] });

Cote GLPI, le flux Automatisations mappe la severite Zabbix a l'urgence du ticket, choisit la bonne categorie et la bonne entite et l'assigne au groupe technique responsable. Quand l'evenement se retablit (statut : 0), le meme flux peut ajouter un suivi "resolu automatiquement" ou fermer le ticket - bouclant le cycle detection -> action -> resolution sans intervention manuelle.

Reactif vs proactif, en pratique

DimensionSupervision reactiveSupervision proactive
DeclencheurService deja tombe (last() = 0)La tendance predit la panne (timeleft(), forecast())
FenetreValeur instantanee, pic isoleMoyenne/tendance sur une fenetre (5m, 1h)
Faux positifEleve (flapping)Faible (hysteresis/recovery)
Resultat dans GLPITicket ouvert tard, sans contexteTicket avec responsable, urgence et valeur de l'evenement
Effet sur l'equipeFatigue d'alerte, tableau de bord ignorePeu d'alertes, toutes actionnables

Erreurs courantes que nous corrigeons en maintenance

  • Sans expression de recovery : probleme et retablissement utilisent la meme condition, l'alerte clignote. Definissez toujours une hysteresis sur les metriques volatiles (CPU, latence).
  • Severite sans mapping : tout arrive dans GLPI en "moyenne". Mappez Disaster/High vers une urgence elevee et laissez Information sur le tableau de bord seulement, sans creer de ticket.
  • Sans idempotence : les reessais du webhook creent des tickets en double. Utiliser {EVENT.ID} comme cle resout le probleme.
  • Alerter sans responsable : un trigger qui ne pointe pas vers un groupe/technicien est du bruit. Toute alerte actionnable a besoin d'une route d'assignation dans le flux Automatisations.

Si vous avez deja GLPI et voulez que Zabbix cesse de produire des e-mails ignores et se mette a produire des tickets avec un responsable et du contexte, ce travail de deploiement et de maintenance est ce que NexTool livre - du modele au flux d'integration. Parlez-nous du support et maintenance de votre environnement GLPI + supervision.


Ce contenu a ete produit avec l'aide de l'intelligence artificielle et revise par l'equipe Nextool Solutions.

Questions fréquentes

Configurez un media type webhook dans Zabbix qui fait un POST vers le endpoint stateless du module Automatisations de NexTool. Le payload porte l'hote, la severite, l'item, la valeur et l'EVENT.ID ; le flux Automatisations mappe cela vers categorie, entite, urgence et groupe technique, creant le ticket GLPI avec du contexte et une authentification HMAC SHA-256.

La reactive alerte apres que le service est deja tombe, sur une valeur instantanee. La proactive utilise des fonctions de tendance comme timeleft() et forecast() sur une fenetre temporelle pour predire la panne avant qu'elle n'arrive - par exemple, alerter que le disque se remplira en 24h tant qu'il est encore temps d'agir.

Evaluez sur une fenetre temporelle (avg sur 5m/1h au lieu de last()) et definissez une expression de recovery distincte du probleme (hysteresis). Exemple : declenche quand avg CPU 5m > 90 et n'efface que quand avg CPU 5m < 70. Cela empeche l'alerte de clignoter sur des metriques volatiles.

Utilisez l'{EVENT.ID} de Zabbix comme cle d'idempotence dans le flux Automatisations. Avant de creer le ticket, le flux verifie s'il existe deja un ticket pour cet evenement ; les reessais du webhook ne creent pas de doublons, ils mettent seulement a jour l'enregistrement existant.

Non, ils sont complementaires. Zabbix decide ce qui est un signal digne d'action (le trigger) ; GLPI, via le module Automatisations de NexTool, decide comment cela devient du travail : categorie, entite, urgence et le technicien responsable. L'un supervise, l'autre coordonne la reponse et conserve l'historique ITIL.

Besoin d'aide ?