
Dans ce tutoriel, nous allons mettre en place une infrastructure de supervision en utilisant Nagios Core, un outil open-source permettant de surveiller l’état des services, des hôtes et des ressources réseau.
Nous allons installer Nagios sur une machine dédiée (192.168.1.106), qui jouera le rôle de serveur de supervision. Ensuite, nous installerons NRPE sur trois machines distantes : deux serveurs web (WEB1 et WEB2) et un serveur HAProxy.
Nagios Core est un outil open-source de supervision qui permet de surveiller en temps réel l’état des serveurs, services, équipements réseau et applications. Il alerte automatiquement les administrateurs en cas de panne ou d’anomalie afin d’assurer la disponibilité et la performance des systèmes informatiques.
Nous allons configurer les fichiers de supervision de façon structurée, avec un fichier de configuration par hôte (web1.cfg, web2.cfg, haproxy.cfg), et nous définirons des services critiques à surveiller comme :
- La disponibilité réseau (via check_ping)
- Les processus essentiels (Apache2, HAProxy avec check_procs)
- La charge système (via check_load)
À la fin de ce tutoriel, nous redémarrerons les services, testerons les contrôles, et mettrons en place des alertes par e-mail pour être notifiés en cas de panne.
Ce projet nous permettra de détecter rapidement les anomalies dans notre infrastructure et d’agir de manière proactive pour garantir la continuité des services.
Configuration :
- Serveur Web 1 : 192.168.1.101/24
- Serveur Web 2 : 192.168.1.102/24
- Serveur HAProxy : 192.168.1.100/24
- Serveur de supervision (Nagios Core) : 192.168.1.106/24
Mise en place de Nagios Core sur le serveur de Supervision
Pour commencer, faite une mise à jour du système avec sudo apt update et sudo apt upgrade, ensuite nous allons télécharger les paquets nécessaires avec la commande suivante :
- sudo apt install -y apache2 php php-mysql build-essential
La prochaine étape consiste à créer un utilisateur Nagios, cela permet de :
- Sécuriser le système → Nagios n’a pas besoin des droits « root », donc on limite les risques en cas de problème.
- Isoler Nagios → Ses fichiers, processus et permissions sont séparés du reste du système.
- Faciliter la gestion → On sait clairement quels fichiers et processus appartiennent à Nagios.
Saisir les commandes suivantes :
- sudo useradd nagios
- sudo usermod -a -G nagios www-data
Cette commande crée un nouvel utilisateur appelé nagios tandis que l’autre commande ajoute l’utilisateur www-data (le serveur web Apache) au groupe nagios.
Nous allons maintenant télécharger et compiler Nagios Core :
- sudo mkdir nagiosproject
- cd nagiosproject
- sudo wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.5.9.tar.gz
- sudo tar -xvzf nagios-4.5.9.tar.gz
- cd nagios-4.5.9
- sudo ./configure –with-httpd-conf=/etc/apache2/sites-enabled
- sudo make all
- sudo make install-groups-users
- sudo usermod -a -G nagios www-data
- sudo make install
- sudo make install-daemoninit
- sudo make install-commandmode
- sudo make install-config
- sudo make install-webconf
Nous allons maintenant configurer le mot de passe pour l’accès à l’interface web de Nagios :
- sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Par la suite vous devrez saisir votre nouveau mot de passe :
Nous allons maintenant activer le CGI, ce module permet à Nagios d’exécuter des scripts (très important pour son interface web), redémarrer les serveurs web et enfin démarrer Nagios :
- sudo a2enmod rewrite
- sudo a2enmod cgi
- sudo systemctl restart apache2
- sudo systemctl enable nagios
- sudo systemctl start nagios
Installation des Plugins Nagios
Nous allons installer les plugins Nagios nécessaires à la surveillance des systèmes. D’abord, nous allons télécharger l’archive des plugins, puis l’extraire et la configurer pour qu’elle fonctionne avec l’utilisateur et le groupe nagios.
Ensuite, nous allons compiler et installer les plugins sur le système. Enfin, nous allons activer les modules Apache, redémarrer le serveur, et configurer Nagios pour démarrer automatiquement.
Saisir les commandes suivantes :
- cd /nagiosproject
- sudo wget https://github.com/nagios-plugins/nagios-plugins/releases/download/release-2.4.12/nagios-plugins-2.4.12.tar.gz
- sudo tar xvf nagios-plugins-2.4.12.tar.gz
- cd nagios-plugins-2.4.12
- sudo ./configure
- sudo make
- sudo make install
Si tout est bien installé, vous pouvez accédez a votre interface web Nagio avec l’adresse suivante :
Installation de NRPE sur les serveurs Web et HAProxy
Les commandes sont à exécuter sur chaque serveur (WEB1, WEB2 et HAProxy)
Pour simplifier l’installation des outils de surveillance, nous allons installer directement les plugins Nagios et le serveur NRPE via les dépôts officiels avec la commande suivante :
- sudo apt install -y nagios-nrpe-server nagios-plugins
Il faut maintenant autoriser l’hôte Nagios dans le fichier nrpe.cfg :
- sudo nano /etc/nagios/nrpe.cfg
Modifiez la ligne suivante en rajouter l’IP de votre serveur Nagios :
Ajoutez les lignes suivantes à la fin du fichier :
- command[check_ping]=/usr/lib/nagios/plugins/check_ping -H 127.0.0.1 -w 100.0,20% -c 500.0,60% -p 5
- command[check_procs_haproxy]=/usr/lib/nagios/plugins/check_procs -w 1 -c 1 -C haproxy
- command[check_load]=/usr/lib/nagios/plugins/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0
- command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
- command[check_procs_apache]=/usr/lib/nagios/plugins/check_procs -c 200 -w 50 -a apache2
Redémarrer le service NRPE :
- sudo systemctl restart nagios-nrpe-server
Depuis la machine Nagios, vérifier NRPE avec :
- /usr/lib/nagios/plugins/check_nrpe -H 192.168.1.101
Vous devirer avoir en retour NRPE v4.1.0
Création des fichiers de supervision des hôtes
Sur votre serveur Nagios, créez un répertoire pour les configurations des serveurs :
- sudo mkdir -p /usr/local/nagios/etc/servers
Ajoutez l’inclusion du répertoire dans la configuration principale :
- sudo nano /usr/local/nagios/etc/nagios.cfg
Vous aurez juste à enlever le <#> devant le cfg_dir =/usr/local/nagios/etc/servers
Créer le fichier web1.cfg avec la commande suivante :
- sudo nano /usr/local/nagios/etc/servers/web1.cfg
Insérer la configuration suivante :
define host {
use linux-server
host_name web1
address 192.168.1.101
}
define service {
use generic-service
host_name web1
service_description CPU Load
check_command check_nrpe!check_load
}
define service {
use generic-service
host_name web1
service_description Disk Root
check_command check_nrpe!check_disk
}
define service {
use generic-service
host_name web1
service_description Ping
check_command check_nrpe!check_ping
}
define service {
use generic-service
host_name web1
service_description Processus apache2
check_command check_nrpe!check_procs_apache
}
Modifiez votre fichier en fonction du serveur choisie, par exemple changez l’adresse IP selon le serveur, le host_name selon le serveur et le processus selon le service.
Nous allons maintenant configurer NRPE dans Nagios, pour cela il faudra modifier le fichier suivant :
- sudo nano /usr/local/nagios/etc/objects/commands.cfg
Rajouter la ligne suivante :
define command : {
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
define command {
command_name check_haproxy_proc
command_line $USER1$/check_procs -c 2:2 -C haproxy
}
Enfin pour finir saisir la commande suivante sur chaque serveur pour permettre le bon fonctionnement du Ping :
- sudo setcap cap_net_raw+ep /bin/ping
Attendez un moment le temps que l’interface web se met à jour et vous devriez avoir ce résultat :
Et dans l’onglet Services vous devriez avoir cela :
Mise en place de l’alerte en cas de panne d’un serveur
Nous allons mettre en place une alerte pour que l’administrateur soit au courant dès qu’un serveur tombe en panne.
Pour cela nous allons installer les paquets nécessaires sur Nagios :
- sudo apt update
- sudo apt install msmtp msmtp-mta mailutils -y
Configurer msmtp pour Gmail :
- sudo nano /etc/msmtprc
Saisir ce contenu en l’adaptant selon votre mail :
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
Maintenant il faut définir le contact Nagios avec ton adresse mail :
- sudo nano /usr/local/nagios/etc/objects/contacts.cfg
Modifie ou ajoute ce contenue :
Vérifie les commandes d’envoi de mail du fichier commands.cfg :
Vérifie les commandes suivantes ou ajoute-les :
define command {
command_name notify-host-by-email
command_line /usr/bin/printf « %b » « $HOSTOUTPUT$\n » | mail -s « ** $HOSTSTATE$ Host Alert: $HOSTNAME$ ** » $CONTACTEMAIL$
}
define command {
command_name notify-service-by-email
command_line /usr/bin/printf « %b » « $SERVICEOUTPUT$\n » | mail -s « ** $SERVICESTATE$ Service Alert: $HOSTNAME$/$SERVICEDESC$ ** » $CONTACTEMAIL$
}
On vérifie maintenant les groupes de contacts dans contacts.cfg :
- sudo nano /usr/local/nagios/etc/objects/contacts.cfg
Il faut s’assurer que l’hôte utile le groupe de contact :
- sudo nano /usr/local/nagios/etc/servers/web1.cfg
Saisir contact_groups admins :
Enfin redemarer Nagios avec systemctl restart nagios.
Pour effectuer le test nous allons arrêter le serveur apache du serveur web1, pour cela saisir la commande suivante :
- sudo systemctl stop apache2
Vous pouvez vérifier sur l’interface web de Nagios après quelque minute que le processus apache2 est en mode CRITICAL
J’ai aussi reçu un mail pour me prévenir que le service Apache est bien DOWN.
Si le serveur se remet en marche, vous recevrez aussi un mail pour vous prévenir qu’il est de nouveau en service.
Questions spécifiques à Nagios Core
1. Décrivez l’architecture de Nagios (serveur, plugins, NRPE, etc.).
Nagios est composé d’un serveur central (Nagios Core) qui planifie et exécute les vérifications à l’aide de plugins. Ces plugins sont des scripts qui effectuent des contrôles sur l’état d’un service, d’un port ou d’un hôte. Pour surveiller des machines distantes, Nagios utilise NRPE (Nagios Remote Plugin Executor), un agent installé sur les hôtes supervisés. Il permet à Nagios d’exécuter des vérifications locales à distance. L’interface web permet de visualiser l’état de l’infrastructure et de gérer les alertes. Les notifications peuvent être envoyées par email, SMS, etc.
2. Comment fonctionne NRPE (Nagios Remote Plugin Executor) ?
NRPE est un agent installé sur un hôte distant. Le serveur Nagios envoie une requête NRPE pour exécuter un plugin spécifique (par exemple, vérifier le processus Apache). L’agent NRPE exécute localement le plugin, puis retourne le résultat (OK, WARNING, CRITICAL) au serveur Nagios. Cela permet de superviser des éléments qui ne sont pas accessibles directement depuis le serveur Nagios.
3. Quelle est la différence entre une vérification active et passive dans Nagios ?
Une vérification active est déclenchée directement par Nagios à des intervalles réguliers. Nagios interroge lui-même le service ou l’hôte. Une vérification passive est envoyée à Nagios par un autre système ou script externe. Nagios ne fait rien, il se contente de recevoir le résultat. Les vérifications passives sont utiles pour intégrer d’autres systèmes ou pour réduire la charge réseau dans certains cas.
4. Comment surveiller un service Apache avec Nagios ?
Pour surveiller Apache, on installe NRPE sur le serveur qui héberge Apache. Dans le fichier de configuration de NRPE, on définit une commande comme check_apache qui utilise un plugin pour vérifier que le processus Apache fonctionne. Ensuite, sur le serveur Nagios, on crée un service lié à cette commande NRPE pour l’hôte concerné. Nagios interroge alors le serveur distant via NRPE pour vérifier si Apache est en marche.
5. Comment configurer une alerte par email en cas de panne d’un serveur backend ?
Il faut d’abord configurer un contact dans Nagios avec une adresse email. Ensuite, on associe ce contact à un hôte ou un service. Il faut aussi s’assurer que le système de messagerie du serveur (Postfix, Sendmail, ou msmtp) est bien configuré pour pouvoir envoyer des emails. Enfin, on définit les commandes de notification dans Nagios (par exemple notify-service-by-email) et on les lie aux bons événements. En cas de défaillance, un email sera alors envoyé automatiquement.
6. Qu’est-ce qu’un service dependency dans Nagios et pourquoi l’utiliser ?
Un service dependency est une relation entre deux services. Il indique que certains services ne doivent être vérifiés ou notifier que si un autre service fonctionne correctement. Par exemple, si un hôte ne répond plus au ping, il est inutile de vérifier si le service Apache ou SSH fonctionne. Cela permet d’éviter des alertes inutiles et de rendre la supervision plus logique et plus efficace.
7. Comment optimiser les performances de Nagios pour surveiller des centaines d’hôtes ?
Pour améliorer les performances, il faut répartir les vérifications dans le temps pour éviter les pics de charge. Il est aussi recommandé d’augmenter le nombre de vérifications simultanées autorisées dans le fichier nagios.cfg. On peut également désactiver certaines fonctions peu utiles comme la détection de fluctuations d’état (flapping). Pour de grandes infrastructures, on peut utiliser un modèle distribué avec plusieurs serveurs de supervision ou des outils comme Mod-Gearman ou Shinken.
8. Les alertes Nagios ne sont pas envoyées par email. Quelles vérifications effectuer ?
Il faut vérifier que le contact Nagios est bien configuré avec une adresse email valide. Il faut aussi s’assurer que les commandes de notification (notify-service-by-email, notify-host-by-email) sont bien définies dans commands.cfg. Ensuite, il faut tester si le serveur peut envoyer des mails en ligne de commande. On peut également consulter les logs de Nagios et les logs du serveur de mail pour identifier d’éventuelles erreurs. Enfin, on doit vérifier que les alertes sont bien activées pour les hôtes et services concernés.