Nous allons ici mettre en œuvre un système de supervision fondé sur Zabbix : création de l’environnement (depuis le miniLab), création du serveur, mise en place du monitoring de plusieurs équipements.
Comme la plupart des logiciels de supervision, Zabbix met à disposition un grand nombre de fonctionnalités et modules pour personnaliser au mieux les mesures, la visualisation et les alertes.
Nous regarderons ici l’essentiel, le minimum nécessaire pour une mise en place opérationnelle.
Zabbix est un logiciel de supervision open source pour divers composants informatiques, y compris les réseaux, les serveurs, les machines virtuelles (VM) et les services cloud. Zabbix permet de surveiller diverses métriques, comme l'utilisation du réseau, la charge du processeur et la consommation d'espace disque.
Zabbix peut utiliser MySQL, MariaDB, PostgreSQL, SQLite, Oracle ou IBM DB2 pour stocker des données. Son backend est écrit en C et le frontend web est écrit en PHP.
Zabbix propose plusieurs options de surveillance :
Zabbix inclut également la prise en charge de la surveillance via les protocoles SNMP, TCP et ICMP, ainsi que IPMI, JMX, SSH, Telnet et en utilisant des paramètres personnalisés. Zabbix prend en charge une variété de mécanismes de notification en temps quasi réel, y compris XMPP.
Publié sous les termes de la licence publique générale GNU version 2, Zabbix est un logiciel libre.
(source : Wikipedia)
Nous allons partir du mini Lab, sur lequel nous avons :
Voici le schéma de l'environnement souhaité :

Le serveur supplémentaire est obtenu en clonant le serveur Debian Core (qui doit être éteint) depuis l'hyperviseur, par exemple avec VirtualBox :

On démarre cette nouvelle VM debsql. On se connecte via la console primaire pour mettre à jour le système et installer le paquet wget :
sudo apt update
sudo apt upgrade
sudo apt install wget
On renomme correctement la machine (deux fichiers à modifier) :
sudo nano /etc/hostname
debsql
sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 debsql
…
On modifie l'adresse IP fixe selon le schéma désiré :
sudo nano /etc/network/interfaces
…
allow-hotplug enp0s3
iface enp0s3 inet static
address 192.168.1.2/24
gateway 192.168.1.1
On vérifie les serveurs DNS :
sudo nano /etc/resolv.conf
on doit avoir :
nameserver 1.1.1.1
nameserver 1.0.0.1
Puis on éteint la VM :
sudo poweroff
Pour la redémarrer, en mode sans affichage désormais.
depuis la VM GUI maintenant, on vérifie la connexion ssh au serveur debsql et la connectivité Internet :
ssh pascal@192.168.1.2
ping 1.1.1.1
ping google.fr
La connexion ssh sans mot de passe mise en place lors de la finalisation du mini lab doit aussi fonctionner sur ce serveur.

On démarre le serveur Debian Core du mini Lab. On installe ici aussi les mises à jour et wget :
sudo apt update && sudo apt upgrade
sudo apt install wget
Puis on renomme la machine :
sudo nano /etc/hostname
zabbix
sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 zabbix
…
On vérifie les serveurs DNS :
sudo nano /etc/resolv.conf
nameserver 1.1.1.1
nameserver 1.0.0.1
Ainsi que l’adresse IP fixe du serveur 192.168.1.10:
sudo nano /etc/network/interfaces
On doit avoir :
…
allow-hotplug enp0s3
iface enp0s3 inet static
address 192.168.1.10/24
gateway 192.168.1.1
Puis on éteint la VM :
sudo poweroff
Pour la redémarrer, elle aussi en mode sans affichage.
depuis la VM GUI, on vérifie la connexion ssh au serveur zabbix et la connectivité Internet :
ssh pascal@192.168.1.10
ping 1.1.1.1
ping google.fr
On se base sur les ressources officielles de Zabbix : https://www.zabbix.com/download, en choisissant une plateforme Debian 13 + MySQL + NGINX.
Il est recommandé (notamment pour une installation en production) de choisir la version LTS (Long Term Support).
Ici, nous choisissons la version 7 :

Le site web indique ensuite les étapes d'installation. Mais avant, il nous installer un service de base de données. Pour plus de facilité, il sera sur ce même serveur (on pourrait idéalement créer un serveur spécifique pour cela).
On va donc préalablement installer et configurer mariaDB :
sudo apt install mariadb-server
sudo mariadb-secure-installation
Il faut bien lire les messages et indications tout au long de ce processus pour bien comprendre les différents objectifs.
Dans notre contexte (labo), les réponses à donner sont dans l'ordre : Entrée, n, n, y, y, y, y.
On ajoute le magasin Zabbix (repository) :
sudo wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian13_all.deb
sudo dpkg -i zabbix-release_latest_7.0+debian13_all.deb
sudo apt update
Cette séquence ajoute une entrée dans etc/apt/sources.list.d puis met à jour le catalogue.
Puis on installe : Zabbix server (backend) + le frontend + un agent (le serveur Zabbix en effet se "monitore lui-même") :
sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2
On peut préventivement charger des plugins optionnels pour l'agent Zabbix (aucune obligation) :
sudo apt install zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql
On va créer la base de données principale pour Zabbix (remplacer motdepasse par le mot de passe de votre choix) :
sudo mysql -uroot
On obtient le shell MariaDB :
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by 'M0Td3Pa$$e';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
flush privileges;
quit;
La base de données s’appelle donc zabbix, et l’utilisateur zabbix (associé au mot de passe donné) a tous les privilèges sur cette base de données.
L’option log_bin_trust_function_creators est un réglage temporaire pour l’exécution du script ci-dessous.
On importe maintenant le schéma initial de la base de données et les données sur le serveur Zabbix. On passe par une élévation persistante (mais temporaire) pour gérer correctement le pipe (|) de commandes :
sudo -i
On lance l'import de la base de données générique de Zabbix. Le mot de passe de la base (défini ci-dessus) vous sera demandé. L'opération peut prendre plusieurs secondes :
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
On sort du mode root :
exit
Il faut ensuite rétablir l’option log_bin_trust_function_creators du serveur MariaDB :
sudo mysql -uroot
set global log_bin_trust_function_creators = 0;
quit;
On indique/vérifie les infos de base de données pour le serveur backend Zabbix dans son fichier de configuration, notamment le mot de passe défini ci-dessus :
sudo nano /etc/zabbix/zabbix_server.conf
Vérifiez/modifiez/décommentez ces lignes :
...
DBHost=localhost
...
DBName=zabbix
...
DBUser=zabbix
...
DBPassword=M0Td3Pa$$e
...
La configuration correcte de ce fichier est importante, on peut vérifier que les éléments essentiels sont corrects avec la commande suivante :
sudo cat /etc/zabbix/zabbix_server.conf | grep ^DB
On doit obtenir exactement ce résultat (en respectant les paramètres de base de données vus plus haut : nom de la base (zabbix) nom de l'utilisateur (zabbix) et mot de passe (M0Td3Pa$$e) :
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=M0Td3Pa$$e
On configure le serveur NGINX en tant que frontend Zabbix :
sudo nano /etc/zabbix/nginx.conf
server {
listen 80;
server_name zabbix;
…
sudo rm /etc/nginx/sites-enabled/default
On vérifie la configuration Nginx :
sudo nginx -t
Qui doit retourner si tout est ok :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Si c’est ok, on relance et active les services :
sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.4-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.4-fpm
Enfin, on termine la connexion SSH :
exit
Désormais, depuis la machine cliente, on va utiliser le navigateur WEB pour se connecter à notre serveur : http://192.168.1.10
Attention au navigateur utilisé : l’interface web Zabbix est notamment incompatible avec Edge (dans sa version non basée sur Chromium). Il est recommandé d’utiliser une base Chromium (comme Google Chrome), ou Firefox.

On vérifie ensuite que tous les prérequis sont ok :

Lors de cette première configuration du frontend, il faut notamment indiquer les informations de la base de données, selon ce qui a été précédemment paramétré dans mariaDB :

Puis on choisit un nom pour ce serveur, un fuseau horaire et un thème :

La page de connexion apparaît. Par défaut, le compte administrateur de Zabbix a les identifiants suivants :

Et on arrive sur le dashboard principal :

Avant d’ajouter des éléments à surveiller, on va configurer un système d’alerte sur le serveur.
Il en existe plusieurs, prenons par exemple Discord.
Sur votre compte Discord, il faut créer un serveur spécifique (ou utiliser un existant déjà dédié aux notifications), et créer un salon spécifique.
Dans les paramètres du serveur, option intégrations, rubrique webhooks, il faut créer un webhook pour le salon, et récupérer (copier) son URL.
Une telle URL ressemble à ceci : https://discord.com/api/webhooks/1125…58/Nss…tAsr
NB : à l'heure où j'écris ces lignes (déc 2025), l'URL récupérée peut contenir
discordapp.comau lieu dediscord.com(c'est notamment le cas avec un client discord sous Linux). Il faut la modifier pour avoir effectivementdiscord.com(sinon vous aurez une erreurAPI versionau moment des envois d'alerte).
Nous allons intégrer ce webhook dans Zabbix, puis activer les notifications.
Tout d’abord, il faut activer le type de media Discord, via le menu Alertes > Types de Media, et cliquer sur désactivé pour le passer en activé :

Ensuite, rendez-vous dans le menu : Utilisateurs > Utilisateurs et modifier l’utilisateur Admin.
Dans l’onglet Media, ajouter un media de type discord, et copier l’URL du webhook dans la zone envoyer. Il est aussi possible de paramétrer des plages horaires, et les niveaux de sévérité concernés ; cliquer enfin sur ajouter :

Puis valider avec actualiser.

On peut voir que le media est configuré ; attention, s’il apparaît désactivé (comme ci-dessus), il cliquer sur désactivé pour modifier l’état :

Ensuite, il faut activer les notifications aux utilisateurs : dans le menu Alertes > Actions > Actions de déclencheur, il faut activer le trigger Report problems to Zabbix administrators :

Et enfin, il faut ajouter une macro, c’est-à-dire une variable d’environnement Zabbix, qui est utilisée par le plugin Discord de Zabbix, et qui n’est pas définie par défaut.
La macro à définir s’appelle {$ZABBIX.URL}, et doit contenir l’URL vers le frontend Zabbix, par exemple : http://localhost, ou http://127.0.0.1
Ceci s’effectue dans le menu administration > Macros :

Ici aussi, valider avec Actualiser.
Nous allons maintenant mettre en place une supervision du serveur Debian (debsql).
Comme pour le serveur Zabbix, on ajoute le repository Zabbix (bien entendu, ces commandes se font via un terminal sur le client GUI connecté en SSH sur le serveur) :
ssh pascal@192.168.1.2
sudo wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian13_all.deb
sudo dpkg -i zabbix-release_latest_7.0+debian13_all.deb
sudo apt update
sudo apt -y install zabbix-agent2
On peut préventivement charger des plugins optionnels pour l'agent Zabbix (aucune obligation) :
sudo apt install zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql
Puis on modifie le fichier de configuration de l'agent :
sudo nano /etc/zabbix/zabbix_agent2.conf
Il faut rechercher/ajouter/modifier les lignes suivantes, correspondant à notre environnement :
...
Server=192.168.1.10
...
ListenPort=10050
...
ServerActive=192.168.1.10
...
Hostname=Serveur Debian
...
Attention, comme indiqué dans les commentaires du fichier, le Hostname est sensible à la casse. Ce nom devra être rigoureusement le même sur le serveur.
On redémarre et on active le service :
sudo systemctl restart zabbix-agent2
sudo systemctl enable zabbix-agent2
On ajoute les informations de ce serveur dans Zabbix, depuis l’interface web de configuration.
Menu Collecte de données > Hôtes > créer un hôte (en haut à droite)

Puis valider avec ajouter.
Au bout de quelques instants, notre serveur Debian apparaît dans la liste des hôtes :

Prenez le temps de découvrir l’ensemble des métriques relevées, et la façon dont elles sont disponibles (inventaires, relevés, graphiques).
Ajoutez le serveur Debian dans le dashboardTop hosts by CPU utilization;
Peut-être aurez-vous aussi une alerte sur un problème de temps (synchro) si les VM ne sont pas à la même heure (ce qui arrive avec des snapshots et des clonages) : installer sur chaque serveur un client ntp (sudo apt install chrony) pour résoudre le problème, et regarder l'évolution des alertes.
On souhaite également superviser notre pfSense. Ce n’est pas très compliqué, grâce au package prévu à cet effet.
Il existe en effet un ensemble de paquets dans pfSense en lien avec Zabbix. Nous allons installer l’agent Zabbix correspondant à notre version.
Il faut dans un premier temps se connecter à l’interface d’administration de pfSense ; on obtient le dashboard pfSense :

Dans le menu system > package manager > available packages on recherche zabbix-agent, on trouve la liste des agents disponibles :

On l’installe puis on le configure menu Services > Zabbix Agent
Il suffit d’indiquer l’adresse IP du serveur Zabbix (deux fois), et le hostname (attention, mêmes remarques que pour le serveur Debian concernant le hostname) :

Et on valide avec save.
On ajoute les informations de pfSense dans Zabbix, depuis l’interface web de configuration.
Menu Collecte de données > Hôtes : créer un hôte

Au bout de quelques instants, la supervision de pfSense est activée :

Afin de simuler un incident, on va surcharger artificiellement le serveur Debian.
Depuis le client GUI, on se connecte en SSH sur le serveur Debian :
ssh pascal@192.168.1.2
Puis on installe un serveur http (nginx) dessus, ainsi que les outils curl et htop :
sudo apt -y install nginx curl htop
Puis on lance la commande suivante pour le faire tourner en boucle (une boucle infinie où le serveur s’interroge lui-même ; noter le & en fin de ligne qui permet de lancer la commande en tâche de fond) :
while true; do curl 127.0.0.1 &> /dev/null; done &
Grâce à htop :
htop
On constate l’utilisation intensive du CPU :

Si vous avez plusieurs vCPU sur le serveur, il faudrait peut-être lancer plusieurs boucles curl pour charger à 100%
Depuis la console web Zabbix, on peut regarder le graphique concernant l’utilisation du CPU du serveur :

Une alerte doit se lancer si le CPU est à plus de 90% sur cinq minutes. Une alerte devrait donc arriver sous peu sur Discord !
…
Bingo !

On arrête cette surcharge inutile : depuis le terminal contrôlant le serveur Debian, on saisit la commande fg puis CTRL C.
Le graphique reprend une allure plus rassurante, et une notification de rétablissement ne tarde pas à tomber :
)
Dans cette ultime partie, nous allons mettre en place la supervision d’une autre VM au travers du protocole snmp (à défaut d’un équipement physique sur le réseau, comme un switch ou une imprimante).
Pour cela, nous allons créer une nouvelle VM sous Debian SRVDEB, selon le même principe et les mêmes caractéristiques que la première VM DEBSQL.
Il faut tout d'abord cloner la VM Debian Core initial (depuis un cliché instantané)
On démarre cette nouvelle VL et on y installe les mises à jour et wget :
sudo apt update && sudo apt upgrade
sudo apt install wget
Puis on renomme la machine :
sudo nano /etc/hostname
srvdeb
sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 srvdeb
…
On vérifie les serveurs DNS :
sudo nano /etc/resolv.conf
nameserver 1.1.1.1
nameserver 1.0.0.1
On modifie l’adresse IP fixe du serveur en 192.168.1.3:
sudo nano /etc/network/interfaces
On doit avoir :
…
allow-hotplug enp0s3
iface enp0s3 inet static
address 192.168.1.3/24
gateway 192.168.1.1
Puis on éteint la VM :
sudo poweroff
Pour la redémarrer, elle aussi en mode sans affichage.
depuis la VM GUI, on vérifie la connexion ssh au serveur zabbix et la connectivité Internet :
ssh pascal@192.168.1.3
ping 1.1.1.1
ping google.fr
L’installation s’effectue très simplement :
sudo apt install snmpd
On vérifie que le service est opérationnel :
systemctl status snmpd
Et qu’il écoute bien sur le port udp/161 :
ss -ntaul
On modifie ensuite le fichier de configuration :
sudo nano /etc/snmp/snmpd.conf
Personnaliser les informations d’emplacement et de contact :
sysLocation Sitting on the Dock of the Bay
sysContact Me <me@example.org>
Remplacer :
agentaddress 127.0.0.1,[::1]
par :
agentaddress udp:161
pour que l’agent écoute sur toutes ses interfaces.
On personnalise ensuite le nom de la communauté :
rocommunity pascal default -V systemonly
On n’oublie pas de redémarrer le service :
sudo systemctl restart snmpd
Sur la machine debsql nous allons installer le client snmp, afin de tester la connexion avec l’agent snmp :
Attention à utiliser le bon terminal (connexion ssh sur debsql depuis le client GUI)
# sur debsql (client snmp)
sudo apt install snmp
snmpwalk -v1 192.168.1.3 -c pascal
snmpwalk -v2c 192.168.1.3 -c pascal
On observe un certain nombre d’éléments en réponse.
On peut élargir le champ des OID accessibles, en modifiants cette ligne dans le fichier de configuration de srvdeb :
# sur srvdeb (serveur snmp)
sudo nano /etc/snmp/snmpd.conf
Modifier la valeur sur cette ligne :
view systemonly included .1.3.6.1.2.1
et comparer la nouvelle sortie de :
# sur debsql
snmpwalk -v2c 192.168.1.3 -c pascal
Depuis l’interface Zabbix, on ajoute un nouvel hôte, mais cette fois en mode SNMP :
<image>
Il faut ensuite aller modifier la macro SNMP_COMMUNITY pour correspondre à la valeur saisie sur le serveur SRVDEB2 :
<image>
Le nouveau serveur doit désormais remonter sur Zabbix :
<image>
Zabbix est une solution puissante et extensible pour superviser un environnement. Cette prise en main vous a permis de mettre en œuvre les choses essentielles.
Parmi les choses à découvrir, il y a notamment :