Prenons le cas d’une entreprise qui nous demande de nous assurer du bon fonctionnement des services, en particulier le site web qui subit des ralentissements récurrents. Pour ce faire, nous allons installer un serveur de supervision Nagios. Ce système de supervision disposera d’une interface web pour visualiser les indicateurs et gérer les alertes. Nous centraliserons les logs dans ce serveur et utiliserons le protocole RELP pour dupliquer les logs du serveur de production (système + web).
Pour la démonstration, nous mettrons en place une sonde qui remontera une alerte concernant le nombre de commentaires postés sur le site web dans les 4 dernières heures.
Nous utiliserons une maquette GNS3 simplifiée au maximum.
- un routeur/firewall pfSense (192.168.0.1/24)
- un serveur de production (192.168.0.2/24)
- un serveur de supervision (192.168.0.3/24)
- un client (192.168.0.4/24)
Serveur de production
La documentation d’Ubuntu a été utilisée pour l’installation de WordPress. Nous porterons une attention particulière aux logs pertinents à dupliquer vers le serveur de supervision. Enfin, nous vérifions le status via la commande:
systemctl status apache2
Une fois installé, nous nous connectons sur le client à l’adresse www.projet7.com et nous ajoutons 5 commentaires sur l’article principal en prévision de la sonde en rapport avec le nombre de commentaires.
Serveur de supervision
Nous avons besoin:
- d’un serveur Apache
- des librairies Perl
- des librairies graphiques
- des outils de compilation standard
- de créer l’environnement Nagios (user, group)
Ensuite, nous téléchargeons et compilons les sources de Nagios. Puis nous installons l’arborescence et les fichiers Nagios (service, pipe, fichiers de configuration, interface web d’administration) sur notre serveur.
Enfin, nous vérifions le statut de Nagios via la commande:
systemctl status nagios
Nous pouvons maintenant accéder à l’interface web d’administration de Nagios via le navigateur du client à l’adresse http://192.168.0.2/nagios
Ensuite, nous téléchargeons et compilons les sources des plugins standard de Nagios. Puis nous installons les plugins standard dans l’arborescence de Nagios.
Le répertoire par défaut des plugins standard se trouve dans /usr/local/nagios/libexec
Les fichiers de configuration se trouvent dans /usr/local/nagios/etc
Le fichier nagios.cfg est le fichier de configuration principal de Nagios. Les logs se situent dans /usr/local/nagios/var/log. Puis nous créons le dossier /usr/local/nagios/opencr_conf et nous le référençons dans le fichier de configuration Nagios.
Nous allons centraliser nos commandes, hôtes et services dans le fichier nagios-server.cfg. Nous avons des plugins que nous allons exécuter grâce à des commandes sur des hosts via des services (qui sont obligatoirement rattachés à un host).
Les sondes
Ici, pour un aperçu de Nagios, nous avons tout centralisé dans le fichier /usr/local/nagios/opencr_conf/nagios_server.cfg
Même si l’hôte localhost est déjà défini dans /usr/local/nagios/etc/objets/localhost.cfg, nous allons tout de même redéfinir cet hôte afin de travailler sur des commandes dessus.
Puis nous définissons quelques commandes pour nos hôtes:
Puis, nous définissons les services afin d’exécuter ces commandes.
Nous définissons également les services pour le serveur distant. La syntaxe est différente avec la présence du préfixe « check_nrpe » pour les lignes check_command. Nous avons utilisé cette ressource afin de mettre en place la supervision du serveur distant.
Sur ce serveur, nous avons installé nrpe-server et nagios-plugins.
Dans le fichier /etc/nagios/nrpe.cfg, nous autorisons le serveur de supervision.
allowed_hosts=127.0.0.1,::1,192.168.0.3
C’est dans ce même fichier que nous trouvons nos commandes utilisées sur le serveur de supervision.

Nous trouvons d’ailleurs notre commande check_mysql_service suivie de la requête pour tester le nombre de commentaires sur les 4 dernières heures.
Pour redémarrer le service:
systemctl restart nagios-nrpe-server
Pour l’instant, les firewalls autorisent tout. Nous ne nous attarderons pas sur ce point dans cet article.
Après chaque modification de ce serveur, nous redémarrons Nagios.
systemctl restart nagios
Si nous nous rendons sur l’interface web de Nagios, nous pouvons voir nos hôtes et nos services.
Nos constatons d’ailleurs que nous avons déjà une alerte concernant des mises à jour à effectuer sur le serveur de production.
Nous allons maintenant étudier 10 sondes par hôte dans le détail.
Serveur de supervision Nagios
CPU
/usr/local/nagios/libexec/check_cpu.sh -w 80 -c 90
Cette commande nous retourne l’utilisation du CPU et nous envoie des alertes warning à 80% et critical à 90%.
Current Load
$USER1$/check_load -r -w .15,.10,.05 -c .30,.25,.20
Cette commande définit une moyenne du temps de chargement et nous retourne une alerte en cas de temps trop long. Nous regarderons alors ce qui peut ralentir le chargement.
Current Users
$USER1$/check_users -w 2 -c 3
Cette commande nous retourne le nombre d’utilisateurs/terminaux du système.
HTTP
$USER1$/check_http -H localhost -u /nagios/main.php -a nagiosadmin:password -w 1 -c 2
Cette commande nous retourne le temps de chargement de la page nagios et nous alerte en cas de dépassement de seuil. A partir de là, nous pourrons chercher à savoir quel est le problème.
Memory
$USER1$/check_mem -w 80 -c 90
Comme pour le CPU, nous aurons une alerte en cas de dépassement de seuil. Nous ajouterons éventuellement de la RAM et supprimerons des processus inutiles.
Packages
$USER1$/check_apt
Commande indispensable pour savoir si le système est bien à jour.
Swap Usage
$USER1$/check_swap -w 10% -c 5%
Commande vérifiant l’espace SWAP et nous indiquant aussi si il y a un problème de mémoire.
Total processes
$USER1$/check_procs -w 300 -c 500
Commande nous renvoyant le nombre total de processus et nous indiquant une alerte en cas de dépassement de seuil.
Uptime
$USER1$/check_uptime
Commande nous renvoyant la durée de fonctionnement de la machine.
Serveur de production
CPU
Même commande que pour le serveur de supervision
Current Users
Même commande que pour le serveur de supervision
FTP
/usr/lib/nagios/plugins/check_ftp -H localhost
Cette commande nous indique si le FTP est fonctionnel sur le serveur.
HTTP
Même commande que pour le serveur de supervision
Memory
Même commande que pour le serveur de supervision
MySQL
/usr/lib/nagios/plugins/check_mysql -H localhost -u user -p password -v
Cette commande nous donne un détail sur MySQL (uptime, nombre de requêtes par seconde)
Packages
Même commande que pour le serveur de supervision
SSH
Commande nous indiquant si le service SSH est fonctionnel
Zombie processes
/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
Cette commande nous indique la présence de processus zombie. On pourra alors fermer ces processus.
check_mysql_query
/usr/lib/nagios/plugins/check_mysql_query -H localhost -u user -p password -d
database -q 'SELECT COUNT(c.comment_date) FROM wp_comments as c
WHERE hour(timediff(localtime(), c.comment_date)) <4' -w 4 -c 10
Cette commande nous renvoie le nombre de commentaires datant de moins de 4 heures. Si ceux-ci dépassent le nombre de 4, un statut warning se déclenche. Si il y a plus de 10 commentaires, un statut critical s’affichera.
RELP (Reliable Event Logging Protocol)
RELP est un protocole réseau pour la journalisation des données informatiques dans les réseaux informatiques.
Côté serveur de supervision: nous modifions le fichiers /etc/rsyslog.conf.
Nous avons décommenté TCP et UDP pour l’utilisation de LogAnalyzer.
Aucune modification n’a été apportée dans le fichier /etc/rsyslog.d/50-default.conf.
Côté client (le serveur de production): nous éditons le fichier /etc/rsyslog.conf.
Ainsi que le fichier /etc/rsyslog.d/50-default.conf.

Maintenant, nous avons les logs système mais il nous faut aussi les logs du serveur web. Pour ce faire, nous modifions le fichier /etc/apache2/sites-available/wordpress.conf du serveur de production.
Nous pouvons maintenant faire un test sur le client et voir si nous avons bien le log du test dans /var/log/local7.log côté client et /var/log/infra/.log côté serveur.
Nous pouvons vérifier le statut de rsyslog avec cette commande:
systemctl status rsyslog
Côté client:
Côté serveur:
Nous souhaitons maintenant centraliser les logs système et les logs web sur le serveur de supervision.
Quelques ressources pour le protocole RELP:
Evolutions
Nous avons vu des commandes très basiques dans le cadre de cet article. Les commandes peuvent être beaucoup plus poussées.
Nous pouvons également être notifié par mail (voir cet article).
Par ailleurs, nous avons centralisé nos logs sur le serveur de supervision. LogAnalyzer va plus loin en affichant une interface graphique.
Quelques ressources intéressantes:
Enfin, voici une dernière ressource pour l’utilisation du TLS avec RELP.



















