Dans mon contexte, les alertes critiques de Zabbix doivent finir en ticket Zendesk pour traçabilité (norme ISO 27001 oblige). Pendant longtemps, l’équipe d’astreinte recevait l’alerte par mail Zabbix, ouvrait Zendesk, créait le ticket à la main, copiait-collait les infos. Pas viable à 3h du matin.

n8n nous a permis d’automatiser ça en gardant le contrôle sur la logique. Voilà le workflow.

L’architecture

Zabbix trigger (severity ≥ Average)
        ↓ webhook
   n8n (workflow)
        ↓ enrichissement
   ┌────┴────┬─────────┐
   ↓         ↓         ↓
Zendesk   Grafana   Mattermost
(ticket)  (graphes) (notification)

Zabbix poste un webhook JSON sur n8n. n8n récupère les graphes pertinents depuis Grafana, crée le ticket Zendesk avec les graphes en attachement, et notifie l’astreinte sur Mattermost avec le numéro de ticket en lien direct.

Le webhook côté Zabbix

Dans Zabbix, créer un media type “Webhook” qui poste un JSON :

{
  "host": "{HOST.NAME}",
  "trigger": "{TRIGGER.NAME}",
  "severity": "{TRIGGER.SEVERITY}",
  "value": "{ITEM.VALUE1}",
  "timestamp": "{EVENT.DATE} {EVENT.TIME}",
  "eventId": "{EVENT.ID}",
  "url": "{$ZABBIX.URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}"
}

Et une action qui déclenche ce media type pour les sévérités Average / High / Disaster, avec dédup sur eventId.

Le workflow n8n

Cinq nodes :

  1. Webhook trigger — réception du JSON Zabbix
  2. HTTP Request → Grafana — récupération du panel snapshot pour le host concerné (URL pré-templatée par host)
  3. HTTP Request → Zendesk — création du ticket avec graphe en attachement
  4. HTTP Request → Mattermost — message dans le canal #astreinte avec lien Zendesk
  5. HTTP Request → Zabbix — annotation du ticket Zendesk dans l’événement Zabbix (boucle)

Toute l’erreur handling est gérée par les nodes “Error trigger” de n8n qui notifient sur un canal séparé.

Le piège des graphes Grafana

Grafana refuse les requêtes API anonymes par défaut. Il faut soit créer un “Service Account” avec un token API, soit utiliser le mode “anonymous viewer” mais alors n’importe qui sur le LAN peut voir les dashboards.

J’ai pris la première option, le token est stocké dans les credentials n8n et n’apparaît jamais dans les logs.

Bilan

Sur 4 mois d’utilisation, environ 280 tickets créés automatiquement, dont 3 que l’équipe a dû corriger manuellement (mauvais host extrait de l’événement à cause d’un trigger mal configuré côté Zabbix). Le temps moyen entre alerte Zabbix et ticket ouvert est passé de 8 minutes à 12 secondes.