RousselTMLEARNING

Observabilité

Visualiser et automatiser Zabbix : dashboards, Grafana et API

Construire des dashboards et cartes dans Zabbix, utiliser le plugin Zabbix de Grafana, et automatiser la configuration avec l'API JSON-RPC, l'export YAML et Ansible.

1. Dashboards et cartes #

Dans l'interface Zabbix.

Widgets #

Maquette d'un dashboard Zabbix
Un dashboard réunit des widgets sur une ou plusieurs pages ; voir l'article dédié aux tableaux de bord Zabbix.
WidgetUsage
ProblemsProblèmes en cours filtrés par groupe, sévérité, tag
GraphCourbes d'un ou plusieurs éléments
Top hostsClassement des hôtes sur un élément (CPU, disque)
Honeycomb, GaugeVue synthétique d'un parc
MapCarte réseau avec états
SLA reportDisponibilité de services (module Services et SLA)

Grafana #

Grafana interroge Zabbix par l'API JSON-RPC
Le détail de la configuration est dans l'article sur la source de données Zabbix pour Grafana.
grafana-cli plugins install alexanderzobnin-zabbix-app
# Activer l'application, puis créer une source de données « Zabbix » :
#   URL : http://zabbix-web:8080/api_jsonrpc.php   + jeton d'API

Le plugin permet de combiner dans un même dashboard des données Zabbix et Prometheus, Loki ou Elasticsearch, et d'afficher les problèmes Zabbix.

2. L'API JSON-RPC #

Tout ce que fait l'interface, en code.

Exemples #

# Jeton : créer un jeton d'API (Users > API tokens) ou se connecter
curl -s -X POST -H 'Content-Type: application/json-rpc' http://localhost:8080/api_jsonrpc.php \
  -d '{"jsonrpc":"2.0","method":"user.login","params":{"username":"Admin","password":"zabbix"},"id":1}'
curl -s -X POST -H 'Content-Type: application/json-rpc' -H "Authorization: Bearer $TOKEN" http://localhost:8080/api_jsonrpc.php -d '{"jsonrpc":"2.0","method":"problem.get","params":{"output":["name","severity","clock"],"recent":true,"sortfield":"eventid","sortorder":"DESC"},"id":2}'

curl -s -X POST -H 'Content-Type: application/json-rpc' -H "Authorization: Bearer $TOKEN" http://localhost:8080/api_jsonrpc.php -d '{"jsonrpc":"2.0","method":"host.create","params":{
  "host":"web-02","groups":[{"groupid":"2"}],
  "interfaces":[{"type":1,"main":1,"useip":1,"ip":"10.0.0.12","dns":"","port":"10050"}],
  "templates":[{"templateid":"10001"}],
  "macros":[{"macro":"{$CPU.UTIL.CRIT}","value":"95"}]},"id":3}'
À savoir : Les identifiants (groupe, modèle) varient selon l'installation : obtenez-les avec hostgroup.get et template.get filtrés par nom.
Appel de l'API Zabbix avec curl
Réponse de problem.get filtrée avec jq.

3. Configuration comme code #

Versionner et déployer.

Outils #

OutilUsage
Export / import YAMLModèles, hôtes, cartes : configuration.export et configuration.import
Collection Ansible community.zabbixInstaller agents et proxies, créer hôtes, modèles, utilisateurs
TerraformFournisseurs communautaires pour les objets Zabbix
Enregistrement automatique (autoregistration)Les agents actifs s'inscrivent seuls selon leurs métadonnées
# /etc/zabbix/zabbix_agent2.conf : métadonnées pour l'enregistrement automatique
HostMetadata=linux web production
Bonne Pratique : Combinez l'enregistrement automatique (action : si les métadonnées contiennent « web », ajouter au groupe Web et lier le modèle Nginx) et Ansible pour l'installation des agents : un nouveau serveur est supervisé sans intervention.

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…

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 pro…

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, …

Pour aller plus loin