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.
Qui fait quoi #
| Besoin | Interface Zabbix | Grafana |
|---|---|---|
| Configurer la collecte et les déclencheurs | Oui | Non |
| Notifier, escalader, acquitter | Oui | Acquittement possible depuis le panneau des problèmes |
| Dashboards par hôte ou par modèle | Oui | Oui, avec variables |
| Mélanger Zabbix et d'autres sources | Non | Oui |
| Tableaux de bord pour des équipes sans compte Zabbix | Non | Oui, avec les droits Grafana |
2. Préparer Zabbix #
Un compte dédié, en lecture.
Utilisateur et jeton #
- Créer un groupe d'utilisateurs
Grafanaavec un droit de lecture sur les groupes d'hôtes à exposer. - Créer un utilisateur
grafanadans ce groupe, avec le rôle User (l'accès à l'API doit être autorisé par le rôle). Users > API tokens > Create API token: jeton pour l'utilisateurgrafana, 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:latestActivez 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 #
| Champ | Valeur conseillée | Rôle |
|---|---|---|
| URL | http://zabbix-web:8080/api_jsonrpc.php | Point d'entrée de l'API (l'URL de l'interface suivie de api_jsonrpc.php) |
| Auth type | API token | Plus sûr qu'un mot de passe ; révocable dans Zabbix |
| Trends | Activé, after 7d, range 4d | Utilise les tendances horaires pour les longues périodes |
| Cache TTL | 1h | Cache des listes de groupes, hôtes et éléments |
| Direct DB connection | Facultatif | Lit 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 #
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ête | Usage |
|---|---|
| Metrics | Séries numériques (CPU, mémoire, trafic) |
| Text | Valeurs texte (version, état) pour des panneaux Stat ou Table |
| Problems | Problè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 / SLA | Disponibilité des services Zabbix |
Fonctions #
Les fonctions transforment les séries avant affichage, à la manière de Graphite :
| Fonction | Exemple | Effet |
|---|---|---|
| groupBy | groupBy(5m, avg) | Agrège chaque série par intervalle |
| aggregateBy / sumSeries | sumSeries() | Fusionne plusieurs séries en une (trafic total d'un groupe) |
| top / bottom | top(5, avg) | Garde les 5 séries les plus élevées |
| rate / delta | rate() | Transforme un compteur en débit |
| scale | scale(8) | Convertit des octets en bits |
| setAlias / replaceAlias | setAlias($__zbx_host_name) | Renomme les séries dans la légende |
| timeShift | timeShift(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 :
| Variable | Type de requête | Paramètres |
|---|---|---|
group | Group | Groupe : /.*/ |
host | Host | Groupe : $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.
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 #
- 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ôme | Cause probable | Correction |
|---|---|---|
| Not authorised au test | Jeton expiré ou rôle sans accès API | Recréer le jeton ; vérifier le rôle de l'utilisateur |
| Listes d'hôtes vides | Pas de droit de lecture sur les groupes | Ajouter les groupes d'hôtes au groupe d'utilisateurs Grafana |
| Nouveaux hôtes absents des listes | Cache de la source | Attendre la fin du Cache TTL ou le réduire |
| Courbes lentes sur 30 jours | Lecture de l'historique brut | Activer les tendances ou la connexion directe |
| Plugin introuvable après installation | Application 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
groupethostpour 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.
