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
fi

En 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.sh

Et 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.cfg

Vous devriez obtenir quelque chose comme ceci :

Vérifier la configuration de Nagios

Assurez-vous qu’il retourne 0 erreurs et 0 avertissements et procédez au rechargement du service :

sudo systemctl reload-or-restart nagios.service

Aprè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_nrpe

Autorisez 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.150

Dé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.service

Vérifiez que le service NRPE est en cours d’exécution :

cat /etc/services | grep nrpe  
netstat -at | grep nrpe

Maintenant, 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-plugin

Donc, 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
fi

Autorisez l’exécution du script :

sudo chmod +x /usr/local/scripts/check_root_home_du.sh

Le 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.sh

Et redémarrez l’écouteur NRPE :

sudo systemctl restart nagios-nrpe-server.service

Maintenant, 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.cfg
sudo systemctl reload-or-restart nagios.service

Et 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.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.