
Ce projet consiste à mettre en place une solution de supervision complète pour une infrastructure web haute disponibilité en utilisant Zabbix. L’objectif est de surveiller en temps réel l’état de santé de nos serveurs web et de notre répartiteur de charge, afin de garantir la disponibilité des services et de détecter proactivement les problèmes avant qu’ils n’impactent les utilisateurs finaux.
Architecture de l’infrastructure à superviser
Notre infrastructure comprend :
- 2 serveurs web (WEB1 et WEB2) avec Apache
- 1 répartiteur de charge HAProxy
- 1 serveur de supervision Zabbix
Cette architecture permet d’assurer la redondance et la haute disponibilité de nos services web, tout en maintenant une surveillance centralisée de l’ensemble des composants.
Qu’est-ce que Zabbix ?
Zabbix est une solution de supervision (monitoring) open source conçue pour surveiller des réseaux, des serveurs, des machines virtuelles et des services cloud. Il s’agit d’un système complet qui collecte, stocke et analyse les métriques de performance et de disponibilité de l’infrastructure informatique.
Avantages de Zabbix
- Interface web intuitive : Zabbix propose une interface graphique moderne et conviviale qui permet de visualiser facilement l’état de l’infrastructure, de créer des tableaux de bord personnalisés et de générer des rapports détaillés.
- Surveillance multi-protocole : Il supporte de nombreux protocoles de communication (SNMP, IPMI, JMX, Agent Zabbix, etc.) permettant de superviser une grande variété d’équipements et de services.
- Système d’alertes avancé : Zabbix offre un système de notification flexible avec escalation automatique, permettant d’informer les équipes techniques par email, SMS, ou autres moyens selon la criticité des incidents.
- Scalabilité : L’architecture de Zabbix permet de surveiller des milliers d’équipements, depuis une petite infrastructure jusqu’aux environnements d’entreprise de grande envergure.
- Templates prêts à l’emploi : Zabbix fourni des modèles de surveillance pré-configurés pour les systèmes d’exploitation courants (Linux, Windows) et les applications populaires (Apache, MySQL, PostgreSQL, etc.).
- Historisation des données : Toutes les métriques collectées sont stockées dans une base de données, permettant l’analyse des tendances et la création de graphiques historiques sur plusieurs mois ou années.
Configuration des Machines et Plan d’Adressage IP
Serveur WEB1 : 192.168.1.101
Serveur WEB2 : 192.168.1.102
Serveur HAProxy : 192.168.1.100
Serveur Zabbix : 192.168.1.107
Installation de Zabbix Server sur le serveur de supervision
La première étape consiste à installer Zabbix serveur, pour cela faite une mise à jour des paquets avec les commandes suivantes :
- sudo apt update & sudo apt upgrade
Ensuite télecharger Zabix avec :
- sudo wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_7.0-1+debian12_all.deb
- sudo dpkg -i zabbix-release_7.0-1+debian12_all.deb
- sudo apt update
Ces trois commandes permettent d’ajouter Zabbix à tes sources APT, pour pouvoir ensuite l’installer facilement avec apt install.
Il faut maintenant installer les paquets nécésaire pour Zabbix avec les commandes :
- sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent mariadb-server mariadb-client -y
Cette commande installe tous les paquets nécessaires pour Zabbix :
- zabbix-server-mysql : Serveur Zabbix avec support MySQL.
- zabbix-frontend-php : Interface web Zabbix en PHP.
- zabbix-apache-conf : Configuration Apache pour Zabbix.
- zabbix-sql-scripts : Scripts SQL pour configurer la base de données.
- zabbix-agent : Agent Zabbix pour surveiller les hôtes.
- mariadb-server : serveur de base de données MariaDB.
- mariadb-client : client MariaDB pour gérer la base.
- sudo apt install -t zabbix zabbix-frontend-php zabbix-apache-conf -y
Cette commande installe l’interface web de Zabbix et sa configuration Apache, en s’assurant que les paquets viennent bien du dépôt officiel Zabbix (et pas des dépôts Debian par défaut).
- sudo apt install php-mysql -y
Cette commande installe le pont entre PHP et MySQL/MariaDB.
C’est indispensable pour que Zabbix (en PHP) puisse se connecter à sa base de données.
- apt show zabbix-frontend-php | grep Version
Cette commande te montre la version exacte du paquet zabbix-frontend-php installé ou disponible sur ton système.
Vous devriez avoir cette réponse :
Configuration de la base de données MariaDB
Nous allons maintenant configurer MariaDB en crée une base de données avec un utilisateur, saisir les commandes suivantes :
sudo systemctl start mariadb
sudo mysql -uroot -p
CREATE DATABASE ZABBIX CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER ‘admin’@’localhost’ IDENTIFIED BY ‘mdp$123’;
GRANT ALL PRIVILEGES ON ZABBIX.* TO ‘admin’@’localhost’;
FLUSH PRIVILEGES;
EXIT;
Explications :
- sudo systemctl start mariadb : Démarre le service MariaDB (base de données).
- sudo mysql -uroot -p : Se connecte à MariaDB avec l’utilisateur root.
- CREATE DATABASE : Crée la base de données zabbix avec le bon encodage (utf8mb4).
- CREATE USER : Crée un utilisateur nommé admin accessible en local.
- GRANT ALL PRIVILEGES : Donne tous les droits à admin sur la base zabbix.
- FLUSH PRIVILEGES : Recharge les privilèges pour que les modifications prennent effet.
- EXIT : Quitte MariaDB.
Il faut maintenant importer le schéma de base :
- sudo zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -u admin -p ZABBIX
Entrer le mot de passe de votre utilisateur MariaDB
Configuration du serveur Zabbix
Nous allons editer le fichier de configuration de Zabbix, pour cela saisir les commandes suivantes :
- sudo nano /etc/zabbix/zabbix_server.conf
Saisir les informations suivantes :
DBHost=parrot (mettez le nom de votre serveur)
DBName=ZABBIX
DBUser=admin
DBPassword=mdp$123
Maintenant démarrer les services suivants :
- sudo systemctl start zabbix-server
- sudo systemctl start zabbix-agent
- sudo systemctl start apache2
Diriger vers un navigateur web et saisir l’URL suivant pour accéder à l’interface web de Zabbix :
- http://<IP_SERVEUR>/zabbix
Suivez l’assistant, puis arrivé à cette page saisir les démontrer sur l’image :
Vous pouvez ensuite continuez pour arriver ici :
Par défaut il faut saisir Admin/zabbix en utilisateur et mot de passe.
Vous devriez avoir cette page :
Mise en place des agents Zabbix sur les serveurs web et HAProxy
- sudo wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_7.0-1+debian12_all.deb
- sudo dpkg -i zabbix-release_7.0-1+debian12_all.deb
- sudo apt update
- sudo apt install zabbix-agent
Ces commandes permettent d’ajouter les dépôts officiels Zabbix à ton système puis de mettre à jour la liste des paquets. Ensuite, elles installent l’agent Zabbix qui collecte les données de ta machine pour le serveur de supervision.
Il faut maintenant configurer le fichier zabbix_agentd.conf pour mettre en place le serveur sur l’interface web.
- sudo nano /etc/zabbix/zabbix_agentd.conf
Il faut modifier les lignes suivante :
- Server=192.168.1.107 (IP du serveur ZABBIX)
- ServerActive=192.168.1.107 (IP du serveur ZABBIX)
- Hostname=serveurweb1(Nom de l’hôte du serveur)
Enfin redémarrer le service zabbix-agent
- sudo systemctl restart zabbix-agent
Dirigez vous vers l’interface web de ZABBIX pour ajouter le serveur, pour cela suivre les étapes suivantes :
Surveillance>Hôtes>Créer un hôte
Remplir les infos comme dans l’image ci-dessous :
Macros>Macros héritées et de l’hôte>{$APACHE.STATUS.HOST}
- Ajouter l’IP de votre serveur web
Cliquez sur « Ajouter » en bas a droite de la fenêtre.
Voici le résultat attendu, vous devez refaire l’opération pour le deuxième serveur web.
Attention : Pour HAProxy il faut que votre fichier /etc/haproxy/haproxy.cfg contiennent le bloc suivant :
listen stats
bind :8404
mode http
stats enable
stats uri /stats
stats refresh 10s
De plus lors de la configuration de l’hôte sur ZABBIX voici ce qu’il faut saisir :
Les macros ne sont pas les même que pour apache :
Ce sont les macros a ajouté et modifier.
Voici le résultat attendu lorsque que tous les serveurs sont configurés :
Mise en place de l’alerte mail
Nous allons mettre en place une alerte mail être informé lorsque le serveur tombe en panne.
Alertes>Types de média>Gmail
Saisir les infos suivantes :
Important : tu dois utiliser un mot de passe d’application Gmail, pas ton mot de passe classique. Voir instructions ci-dessous.
Générer un mot de passe d’application Gmail :
• Va sur : https://myaccount.google.com/security
• Active la validation en deux étapes si ce n’est pas fait.
• Par la suite, va sur https://myaccount.google.com/apppasswords
• Choisis « Autre (personnalisé) », nomme-le « Nagios », et copie le mot généré
• Remplace MOT_DE_PASSE_APPLICATION dans ton fichier /etc/msmtprc par ce mot
Actualiser la fenêtre puis dirigez-vous vers Utilisateurs>Utilisateurs :
Ch
Choisissez votre utilisateur, ici ce sera « Admin », cliquez dessus :
Media>Ajouter
Saisissez les informations comme sur l’image ci-dessus et actualiser.
Enfin pour finir nous allons attribuer le fait d’envoyer un mail a des déclencheurs :
Alertes>Actions>Actions de déclencheur>Créer une action
Définissez les actions où vous voulez êtres avertis, ici j’ai choisi les actions ou le serveur apache est down (Apache is down), après cela cliquez sur « Ajouter ».
Par la suite nous allons définir à qui envoyer les mails :
Vous pouvez ensuite validez en cliquant sur « Ajouter »
Test de l’alerte
Pour cela arrêter un serveur web, ici nous allons arrêter le serveur web1
Dirigez-vous vers l’interface de ZABBIX vous devrez avoir cela :
Si on clique dessus on peut voir le probleme :
Dans la colonne action on peut voir qu’un mail a été envoyer :
Et c’est bien le cas comme on peut le voir :
Questions spécifiques à Zabbix
Expliquez le rôle des templates dans Zabbix.
Les templates dans Zabbix servent à regrouper et à standardiser les éléments de supervision comme les items, les triggers, les graphiques, les applications et les règles de découverte. Ils permettent d’appliquer rapidement une configuration à plusieurs hôtes sans devoir tout reconfigurer manuellement pour chaque machine. Cela facilite la gestion de la supervision, réduit les erreurs et rend le système plus maintenable. Par exemple, le template « Template OS Linux » permet de surveiller automatiquement les performances d’un serveur Linux.
Comment fonctionne la découverte automatique (auto-discovery) des hôtes dans Zabbix ?
La découverte automatique permet à Zabbix de détecter automatiquement des hôtes ou des services sur un réseau donné. Elle repose sur la configuration de règles de découverte réseau qui utilisent des protocoles comme ICMP, SNMP ou l’agent Zabbix. Une fois un hôte détecté, Zabbix peut déclencher une action, comme l’ajout automatique de cet hôte à la supervision, l’application d’un template ou l’envoi d’une alerte. Cela est particulièrement utile dans les environnements dynamiques ou avec des réseaux étendus.
Qu’est-ce qu’un trigger et comment configurer un seuil d’alerte pour la charge CPU ?
Un trigger est une condition logique qui permet de générer une alerte si une certaine situation est détectée. Pour la charge CPU, il faut d’abord créer un item qui mesure la charge système, par exemple avec la clé system.cpu.load[percpu,avg1]. Ensuite, on configure un trigger qui compare la valeur obtenue à un seuil critique. Par exemple, un trigger qui se déclenche si la charge CPU moyenne dépasse 2 pourrait s’écrire ainsi : {Template OS Linux:system.cpu.load[percpu,avg1].last()}>2. Cela permet de détecter rapidement une surcharge du système.
Comment surveiller les métriques HAProxy avec Zabbix ?
Pour surveiller HAProxy, il faut activer l’interface de statistiques dans la configuration d’HAProxy, via un socket ou une URL HTTP. Ensuite, on peut utiliser un script externe ou un template Zabbix dédié à HAProxy pour interroger ces statistiques. Le script peut être configuré comme un item de type « external check » ou « user parameter » dans Zabbix. Une fois les données récupérées, on peut créer des triggers, des graphiques et des alertes pour suivre l’état des backends, le taux de requêtes, les erreurs, etc.
Quel est le rôle d’un Zabbix proxy et dans quel cas l’utiliser ?
Le Zabbix proxy est un composant intermédiaire qui collecte les données de supervision localement et les envoie ensuite au serveur Zabbix principal. Il est utile pour superviser des sites distants, des réseaux isolés (par exemple en DMZ) ou pour répartir la charge sur de grandes infrastructures. Le proxy permet aussi de continuer à collecter les données même en cas de coupure de communication avec le serveur principal, garantissant ainsi une supervision continue.
Comment visualiser des données historiques dans Zabbix ?
Pour visualiser les données historiques, il faut se rendre dans le menu « Monitoring » > « Hosts », sélectionner l’hôte concerné, puis cliquer sur « Latest data ». On peut alors consulter les valeurs récentes des items. Pour voir l’évolution dans le temps, il suffit de cliquer sur l’icône de graphique à côté d’un item. Zabbix stocke les données brutes pendant une période définie (history), puis les agrège sous forme de tendances (trends) pour une conservation plus longue.
Comment intégrer des scripts personnalisés dans Zabbix pour surveiller une application métier ?
Pour intégrer un script personnalisé, on peut utiliser les mécanismes de « UserParameter » ou d’ »external script ». Un script peut être écrit pour interroger l’état ou les performances d’une application, puis configuré comme un item dans Zabbix. Il doit renvoyer une valeur compréhensible par Zabbix (nombre, texte, etc.). Le script peut être exécuté par l’agent Zabbix local (via UserParameter) ou par le serveur Zabbix lui-même (via external script). Cela permet de superviser des applications métiers spécifiques non couvertes par défaut.
Comment détecter une fuite mémoire sur un serveur Apache avec Zabbix ?
Pour détecter une fuite mémoire avec Zabbix, il faut surveiller la mémoire utilisée par le processus Apache, généralement avec l’item proc.mem[apache2,,] ou proc.mem[httpd,,] selon le système. Une fuite mémoire peut être identifiée si cette valeur augmente continuellement sur une longue période. Il est possible de créer un graphique pour visualiser cette évolution, et un trigger peut être défini pour alerter si la mémoire dépasse un certain seuil ou si la moyenne sur 10 ou 15 minutes est anormalement élevée. Cela permet de détecter un comportement anormal du service Apache.