Nagios Plugin · 7 min read · Nov 18, 2025
Comment écrire un plugin de vérification personnalisé pour Nagios
Ce tutoriel a été testé en utilisant Nagios Core 4.3.4 sur Debian 9.2
Bien que Nagios Exchange dispose de milliers de plugins disponibles à télécharger gratuitement, parfois l’état à vérifier est très spécifique à votre scénario.
Considérations
On suppose que :
- Vous avez Nagios installé et en cours d’exécution (Vous pouvez suivre ce tutoriel si ce n’est pas le cas).
- Vous connaissez les bases de l’administration de Nagios.
Le serveur Nagios dans cet exemple est hébergé sur 192.168.0.150 et un client exemple est hébergé sur l’IP 192.168.0.200
Codes de sortie
Pour identifier l’état d’un service surveillé, Nagios exécute un plugin de vérification sur celui-ci. Nagios peut déterminer l’état du service en lisant le code de sortie de la vérification.
Nagios comprend les codes de sortie suivants :
- 0 - Service OK.
- 1 - Service a un AVERTISSEMENT.
- 2 - Service est dans un état CRITIQUE.
- 3 - L’état du service est INCONNU.
Un programme peut être écrit dans n’importe quel langage pour fonctionner comme un plugin de vérification Nagios. En fonction de la condition vérifiée, le plugin peut informer Nagios d’un service défaillant.
Exemple de plugin
Je vais utiliser un exemple simple. J’ai écrit un plugin dans un script bash pour vérifier les avertissements actuels. Considérons que j’ai configuré le serveur Nagios pour alerter uniquement sur les états critiques, donc je veux une alerte si j’ai trop de services dans un état d’avertissement.
Considérez le script suivant (check_warnings.sh) :
#!/bin/bash
countWarnings=$(/usr/local/nagios/bin/nagiostats | grep "Ok/Warn/Unk/Crit:" | sed 's/[[:space:]]//g' | cut -d"/" -f5)
if (($countWarnings<=5)); then
echo "OK - $countWarnings services dans l'état d'avertissement"
exit 0
elif ((6<=$countWarnings && $countWarnings<=30)); then
# Ce cas n'a pas de sens car il n'ajoute qu'un seul avertissement.
# C'est juste pour faire un exemple sur toutes les sorties possibles.
echo "AVERTISSEMENT - $countWarnings services dans l'état d'avertissement"
exit 1
elif ((30<=$countWarnings)); then
echo "CRITIQUE - $countWarnings services dans l'état d'avertissement"
exit 2
else
echo "INCONNU - $countWarnings"
exit 3
fiEn fonction des informations fournies par l’outil nagiostats, je suppose que tout va bien s’il y a cinq services ou moins dans l’état d’avertissement.
Je vais laisser ce script avec tous les autres plugins Nagios dans /usr/local/nagios/libexec/ (Ce répertoire peut être différent selon votre configuration).
Comme pour chaque plugin Nagios, vous voudrez le vérifier depuis la ligne de commande avant de l’ajouter aux fichiers de configuration.
N’oubliez pas de permettre l’exécution du script :
sudo chmod +x /usr/local/nagios/libexec/check_warnings.shEt ensuite, exécutez-le comme tout autre script :
Le résultat est un message texte et un code de sortie :
Définir une nouvelle commande de vérification et un service
Cette étape sera la même avec vos propres plugins, et si vous téléchargez un plugin tiers depuis Internet également.
Tout d’abord, vous devez définir une commande dans le fichier commands.cfg. L’emplacement de ce fichier dépend de la configuration que vous avez faite, dans mon cas, il se trouve dans /usr/local/nagios/etc/objects/commands.cfg.
Je vais donc ajouter à la fin du fichier le bloc suivant :
# Commandes de plugins personnalisés...
define command{
command_name check_warnings
command_line $USER1$/check_warnings.sh
}N’oubliez pas que la variable $USER1$ est une variable locale de Nagios définie dans le fichier resource.cfg, dans mon cas pointant vers /usr/local/nagios/libexec.
Après avoir défini la commande, vous pouvez associer cette commande à un service, puis à un hôte. Dans cet exemple, nous allons définir un service et l’assigner à localhost, car cette vérification est sur Nagios lui-même.
Modifiez le fichier /usr/local/nagios/etc/objects/localhost.cfg et ajoutez le bloc suivant :
# Exemple - Vérifier les avertissements actuels...
define service{
use local-service
host_name localhost
service_description Avertissements du serveur Nagios
check_command check_warnings
}Maintenant, nous sommes tous prêts, la seule chose qui reste à faire est de recharger Nagios pour lire à nouveau les fichiers de configuration.
N’oubliez jamais, avant de recharger Nagios, de vérifier qu’il n’y a pas d’erreurs dans la configuration. Vous faites cela avec la commande nagios -v en tant que root :
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgVous devriez obtenir quelque chose comme ceci :

Assurez-vous qu’il retourne 0 erreurs et 0 avertissements et procédez au rechargement du service :
sudo systemctl reload-or-restart nagios.serviceAprès avoir rechargé le service, vous verrez la vérification associée dans le localhost. D’abord en attente :
Et après l’exécution avec son résultat :
Utiliser NRPE pour exécuter sur les clients
Pour exécuter un script sur un client distant, vous devrez configurer le Nagios Remote Plugin Executor (NRPE)
Comme ce tutoriel est basé sur Debian 9, je vais montrer comme exemple comment l’installer, mais vous pouvez trouver des instructions pour n’importe quelle distribution.
Installation générique sur un client basé sur Debian
Notez que toute la configuration dans cette section est faite sur le client à vérifier, pas sur le serveur nagios.
Installez NRPE et les plugins Nagios :
sudo apt-get install libcurl4-openssl-dev nagios-plugins nagios-nrpe-server nagios-nrpe-plugin --no-install-recommends
sudo ln -s /usr/lib/nagios/plugins/check_nrpe /usr/bin/check_nrpeAutorisez le serveur Nagios à exécuter des commandes sur le client en l’ajoutant à l’entrée allowed_hosts dans /etc/nagios/nrpe.cfg. La ligne devrait ressembler à :
allowed_hosts=127.0.0.1,::1,192.168.0.150Définissez les vérifications standard que vous effectuerez sur chaque client avec NRPE. Définissez les vérifications dans /etc/nagios/nrpe_local.cfg. Par exemple, un modèle pour le fichier pourrait être :
######################################
# Faites toute configuration nrpe locale ici
######################################
#-----------------------------------------------------------------------------------
# Utilisateurs
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
# Charge
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200
# Disque
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
command[check_boot]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /boot
command[check_usr]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /usr
command[check_var]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var
command[check_tmp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
# Si vous souhaitez ajouter un point de montage non standard :
# command[check_mnt1]=/usr/lib/nagios/plugins/check_disk -w 4% -c 1% -p /export
#-----------------------------------------------------------------------------------L’idée d’avoir ce fichier générique est que vous puissiez vérifier la même chose sur chaque client.
Assurez-vous que le fichier local et le répertoire .d sont inclus dans le fichier de configuration principal avec :
cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#Redémarrez le service :
sudo systemctl restart nagios-nrpe-server.serviceVérifiez que le service NRPE est en cours d’exécution :
cat /etc/services | grep nrpe
netstat -at | grep nrpeMaintenant, vérifiez l’une des commandes NRPE précédemment définies depuis le serveur Nagios :
Notez que la commande NRPE check_users a été définie dans le fichier /etc/nagios/nrpe_local.cfg pour exécuter /usr/lib/nagios/plugins/check_users -w 5 -c 10.
Au cas où vous n’auriez pas le plugin sur le serveur Nagios, vous pouvez l’installer avec :
sudo apt-get install nagios-nrpe-pluginDonc, pour résumer, le NRPE exécutera un script sur un hôte distant et renverra le code de sortie au serveur Nagios.
Configuration pour des scripts personnalisés
Pour utiliser un script personnalisé comme plugin à exécuter à distance via NRPE, vous devez d’abord écrire le script sur le serveur, par exemple dans /usr/local/scripts/check_root_home_du.sh :
#!/bin/bash
homeUsage=$(du -s /root/ | cut -f1)
if (($homeUsage<=$((1024*1024)))); then
echo "OK - L'utilisation de l'espace de la racine est $(du -sh /root/ | cut -f1)"
exit 0
elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then
echo "AVERTISSEMENT - L'utilisation de l'espace de la racine est $(du -sh /root/ | cut -f1)"
exit 1
elif (($((3*1024*1024))<$homeUsage)); then
echo "CRITIQUE - L'utilisation de l'espace de la racine est $(du -sh /root/ | cut -f1)"
exit 2
else
echo "INCONNU - Valeur reçue : $homeUsage"
exit 3
fiAutorisez l’exécution du script :
sudo chmod +x /usr/local/scripts/check_root_home_du.shLe script précédent est un exemple très simple, vérifiant l’utilisation du disque du répertoire /root et définissant un seuil pour le considérer comme OK, Avertissement ou Critique.
Ajoutez la commande au fichier de configuration NRPE sur le client (/etc/nagios/nrpe_local.cfg) :
# Personnalisé
command[check_root_home_du]=/usr/local/scripts/check_root_home_du.shEt redémarrez l’écouteur NRPE :
sudo systemctl restart nagios-nrpe-server.serviceMaintenant, nous pouvons accéder au serveur et le tester comme tout plugin standard
Définir la vérification NRPE dans les fichiers de configuration du serveur
Maintenant, nous savons que le plugin personnalisé fonctionne sur le client et sur le serveur, et que le NRPE communique correctement, nous pouvons continuer et configurer les fichiers Nagios pour vérifier le périphérique distant. Donc, sur le serveur, définissez les fichiers :
/usr/local/nagios/etc/objects/commands.cfg :
#...
define command{
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}/usr/local/nagios/etc/objects/nrpeclient.cfg :
define host{
use linux-server
host_name nrpeclient
alias nrpeclient
address 192.168.0.200
}
define service{
use local-service
host_name nrpeclient
service_description Utilisation de l'espace de la racine
check_command check_nrpe!check_root_home_du
}Notez que le ! sépare la commande des arguments dans l’entrée check_command. Cela définit que check_nrpe est la commande et check_root_home_du est la valeur de $ARG1$.
De plus, selon votre configuration, vous devez ajouter ce dernier fichier au fichier principal (/usr/local/nagios/etc/nagios.cfg) :
#...
cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg
#...Vérifiez la configuration et, s’il n’y a pas d’erreurs ou d’avertissements, rechargez le service :
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgsudo systemctl reload-or-restart nagios.serviceEt maintenant, vous avez une nouvelle vérification personnalisée sur un hôte :
Conclusion
Nagios dispose d’une énorme bibliothèque de plugins disponibles sur Nagios Exchange. Cependant, dans un grand environnement, il est très probable que vous ayez besoin de certaines vérifications personnalisées pour des usages spécifiques, par exemple : Vérifier le résultat d’une certaine tâche, surveiller une application développée en interne, entre autres.
La flexibilité fournie par Nagios est parfaite pour ces scénarios.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.