RousselTMLEARNING

Observabilité

Tableaux de bord Grafana avec la source de données Zabbix

Afficher Zabbix dans Grafana : installer le plugin, créer un utilisateur et un jeton d'API, configurer et provisionner la source de données, écrire des requêtes, des variables, le panneau des problèmes et optimiser les performances.

1. Pourquoi Grafana avec Zabbix ? #

Compléter l'interface Zabbix, pas la remplacer.

Complémentarité #

Zabbix reste la référence pour la collecte, les déclencheurs et les notifications. Grafana apporte des visualisations plus riches, des variables pour un même dashboard sur tous les hôtes, et surtout la combinaison de sources : métriques Zabbix, Prometheus, logs Loki ou Elasticsearch dans un même tableau de bord.

Le lien se fait par le plugin Zabbix de Grafana (application alexanderzobnin-zabbix-app), maintenu par Grafana Labs. Il fournit une source de données, un panneau des problèmes et des dashboards d'exemple.

Architecture Grafana, plugin Zabbix et API
Grafana ne parle qu'à l'API de l'interface web, avec un jeton dédié.

Qui fait quoi #

BesoinInterface ZabbixGrafana
Configurer la collecte et les déclencheursOuiNon
Notifier, escalader, acquitterOuiAcquittement possible depuis le panneau des problèmes
Dashboards par hôte ou par modèleOuiOui, avec variables
Mélanger Zabbix et d'autres sourcesNonOui
Tableaux de bord pour des équipes sans compte ZabbixNonOui, avec les droits Grafana

2. Préparer Zabbix #

Un compte dédié, en lecture.

Utilisateur et jeton #

  1. Créer un groupe d'utilisateurs Grafana avec un droit de lecture sur les groupes d'hôtes à exposer.
  2. Créer un utilisateur grafana dans ce groupe, avec le rôle User (l'accès à l'API doit être autorisé par le rôle).
  3. Users > API tokens > Create API token : jeton pour l'utilisateur grafana, avec une date d'expiration.
Erreur Courante : N'utilisez jamais le compte Admin pour Grafana : tous les utilisateurs de Grafana verraient alors tout le parc, et une fuite du mot de passe donnerait le contrôle de Zabbix.
À savoir : Les droits Zabbix de l'utilisateur grafana délimitent ce que Grafana peut afficher. Pour isoler des équipes, créez une source de données par équipe, chacune avec son propre utilisateur Zabbix.

3. Installer le plugin et configurer la source #

Par l'interface ou en provisioning.

Installation #

# Installation classique
grafana-cli plugins install alexanderzobnin-zabbix-app
systemctl restart grafana-server

# Avec Docker
docker run -d -p 3000:3000 -e GF_INSTALL_PLUGINS=alexanderzobnin-zabbix-app grafana/grafana:latest

Activez ensuite l'application : Administration > Plugins and data > Plugins > Zabbix > Enable. La source de données Zabbix devient disponible dans Connections > Data sources.

Réglages de la source #

ChampValeur conseilléeRôle
URLhttp://zabbix-web:8080/api_jsonrpc.phpPoint d'entrée de l'API (l'URL de l'interface suivie de api_jsonrpc.php)
Auth typeAPI tokenPlus sûr qu'un mot de passe ; révocable dans Zabbix
TrendsActivé, after 7d, range 4dUtilise les tendances horaires pour les longues périodes
Cache TTL1hCache des listes de groupes, hôtes et éléments
Direct DB connectionFacultatifLit historique et tendances directement en base via une source MySQL ou PostgreSQL

Provisioning #

Pour un déploiement reproductible, déclarez l'application et la source dans /etc/grafana/provisioning/ :

# provisioning/plugins/zabbix.yaml
apiVersion: 1
apps:
  - type: alexanderzobnin-zabbix-app
    disabled: false
---
# provisioning/datasources/zabbix.yaml
apiVersion: 1
datasources:
  - name: Zabbix
    type: alexanderzobnin-zabbix-datasource
    uid: zabbix
    access: proxy
    url: http://zabbix-web:8080/api_jsonrpc.php
    jsonData:
      authType: token
      trends: true
      trendsFrom: 7d
      trendsRange: 4d
      cacheTTL: 1h
    secureJsonData:
      apiToken: ${ZABBIX_API_TOKEN}
Bonne Pratique : Le jeton vient d'une variable d'environnement (ou d'un gestionnaire de secrets), jamais du fichier versionné. Après démarrage, le bouton Save & test de la source doit afficher la version de l'API Zabbix.

4. Écrire des requêtes #

Groupe, hôte, tag, élément, fonctions.

L'éditeur de requête #

Étapes de l'éditeur de requête Zabbix dans Grafana

En type de requête Metrics, chaque champ filtre le suivant. Un champ accepte un nom exact ou une expression régulière entre barres obliques : /^web-\d+$/ sélectionne web-01, web-02...

Type de requêteUsage
MetricsSéries numériques (CPU, mémoire, trafic)
TextValeurs texte (version, état) pour des panneaux Stat ou Table
ProblemsProblèmes en cours ou passés, pour le panneau des problèmes ou une table
Item IDÉléments désignés directement par leur identifiant
Services / SLADisponibilité des services Zabbix

Fonctions #

Les fonctions transforment les séries avant affichage, à la manière de Graphite :

FonctionExempleEffet
groupBygroupBy(5m, avg)Agrège chaque série par intervalle
aggregateBy / sumSeriessumSeries()Fusionne plusieurs séries en une (trafic total d'un groupe)
top / bottomtop(5, avg)Garde les 5 séries les plus élevées
rate / deltarate()Transforme un compteur en débit
scalescale(8)Convertit des octets en bits
setAlias / replaceAliassetAlias($__zbx_host_name)Renomme les séries dans la légende
timeShifttimeShift(7d)Compare avec la semaine précédente

5. Un dashboard pour tous les hôtes #

Variables et panneau des problèmes.

Variables #

Dans Dashboard settings > Variables, créez des variables de type Query sur la source Zabbix :

VariableType de requêteParamètres
groupGroupGroupe : /.*/
hostHostGroupe : $group, Hôte : /.*/ ; multi-valeur et Include All

Dans les requêtes, utilisez $group et $host : une sélection multiple est transformée automatiquement en expression régulière. Le même dashboard sert alors à tout le parc.

Dashboard Grafana alimenté par Zabbix avec variables
Les variables group et host en haut ; le panneau Zabbix Problems à droite.

Le panneau des problèmes #

Le plugin ajoute le panneau Zabbix Problems : liste des problèmes avec sévérité, durée, tags et acquittements, filtrable par groupe, hôte, sévérité minimale et tags. Selon les droits de l'utilisateur Zabbix, il permet d'acquitter depuis Grafana.

Bonne Pratique : Placez le panneau des problèmes à côté des courbes de la même application : la cause (un problème Zabbix) et l'effet (latence, erreurs dans Prometheus ou Loki) sont visibles ensemble.

Dashboards d'exemple #

L'onglet Dashboards de la source de données propose d'importer des dashboards livrés avec le plugin (état du serveur Zabbix, serveur Linux) : un bon point de départ à adapter.

6. Performances et exploitation #

Ne pas surcharger Zabbix depuis Grafana.

Historique ou tendances #

Nombre de points renvoyés : historique contre tendances
Au-delà de 7 jours, les tendances suffisent pour une courbe et divisent la charge par 60.
  • Activez les tendances : au-delà de la période after, le plugin lit les moyennes horaires au lieu de l'historique brut.
  • Évitez les expressions régulières trop larges (/.*/ sur l'élément) sur des milliers d'hôtes : chaque panneau fait alors des appels d'API volumineux.
  • Réglez Max data points et l'intervalle minimal des panneaux ; un rafraîchissement toutes les 5 s n'apporte rien sur des éléments collectés chaque minute.
  • Pour les très gros volumes, la connexion directe à la base (de préférence une réplique en lecture) évite de passer par l'API PHP.

Alertes #

Le plugin permet aussi des règles d'alerte Grafana sur les données Zabbix. Gardez pourtant les alertes d'infrastructure dans Zabbix (déclencheurs, dépendances, escalades) : deux systèmes qui alertent sur les mêmes données produisent des doublons.

Dépannage #

SymptômeCause probableCorrection
Not authorised au testJeton expiré ou rôle sans accès APIRecréer le jeton ; vérifier le rôle de l'utilisateur
Listes d'hôtes videsPas de droit de lecture sur les groupesAjouter les groupes d'hôtes au groupe d'utilisateurs Grafana
Nouveaux hôtes absents des listesCache de la sourceAttendre la fin du Cache TTL ou le réduire
Courbes lentes sur 30 joursLecture de l'historique brutActiver les tendances ou la connexion directe
Plugin introuvable après installationApplication non activée ou Grafana non redémarréActiver l'application Zabbix et redémarrer

7. Bonnes pratiques #

Check-list.

Check-list #

  • Un utilisateur Zabbix dédié, en lecture, avec un jeton d'API qui expire ; jamais le compte Admin.
  • Source de données et application provisionnées en YAML, jeton injecté par variable d'environnement.
  • Tendances activées, Cache TTL d'une heure, expressions régulières ciblées.
  • Variables group et host pour un dashboard par type de serveur plutôt qu'un par serveur.
  • Les alertes d'infrastructure restent dans Zabbix ; Grafana sert à visualiser et à corréler.
  • Dashboards Grafana exportés en JSON et versionnés, comme les modèles Zabbix.

Articles liés

Créer des tableaux de bord dans Zabbix : dashboards, widgets et pages

Construire des dashboards Zabbix utiles : pages, widgets (Graph, Problems, Top hosts, Honeycomb, Gauge...), w…

Zabbix : architecture et concepts de la supervision

Comprendre Zabbix : serveur, base de données, interface web, agents et proxies, et les concepts clés (hôtes, …

Installer Zabbix et superviser son premier hôte

Installer Zabbix avec Docker Compose (serveur, PostgreSQL, interface web), installer l'agent 2 sur un serveur…

Pour aller plus loin