Creation d’un plugins pour Nagios

Date: 6/03/2007 | Catégories: Reseau | Tags: ,,

Nous allons dans ce post écrire un plugins (très simple) pour Nagios. Le corps de ce plugins pourra vous servir de base pour réaliser des plugins plus complexes.

Suite à un post sur l'installation de Nagios, je me suis penché sur l'écriture d'un plugins permettant de vérifier qu'un processus est bien lancé sur un serveur distant.

Voici ce que je l'on attend de notre plugins:

  • Ouvrir une session SSH vers le serveur distant
  • Lancement d'un script vérifiant si un processus (testd) est lancé
  • Renvoie de l'état du processus (OK / ERROR / WARNING)
    • OK: Le processus (testd) est lancé et fonctionne correctement
    • ERROR: Le processus n'est pas lancé
    • WARNING: Le processus est lancé mais ne fonctionne pas correctement

Avant d'entrer dans le vif du sujet, il faut savoir que les plugins Nagios sont de simple "scripts shell" retournant un code de status. Ces plugins sont localisés dans le répertoire /usr/lib/nagios/plugins (sous Linux). Un petit coups de ls donne la liste des plugins installés par défaut:

# ls
check_http check_pgsql check_smtp check_udp2 check_imap check_mysql check_ping check_spop check_udrelay term_power check_clamd check_jabber check_mysql_query check_pop check_ssmtp check_dns check_ldap check_nntp check_scheduler check_tcp check_ftp check_ldaps check_nntps check_simap check_udp ...

Nous allons donc dans un premier temps créer le plugins qui va lancer la commande sur le serveur distant:

# vi check_testd
#!/bin/sh

##################################################################
# Creation: Nicolargo
# Last Modification:
# This script checks testd daemon is running on a server
##################################################################

ssh nagios@$1 /usr/local/bin/nagios_testd.pl

Une fois l'automatisation du SSH effectuée entre votre serveur Nagios et votre serveur distant (il ne faut pas que le script demande le password...). Il reste à créer le script nagios_testd.pl (je l'ai developpé en perl mais rien n'empêche de le faire en SH) dans le réperoire /usr/local/bin du serveur distant.

# vi /usr/local/bin/nagios_testd.pl
#!/bin/sh

##################################################################
# Creation: NicoLargo
# Last Modification:
# This script is polling if testd daemon is running
##################################################################

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4

ps auxw | grep [t]estd | grep -v nagios > /dev/null
STATE=$?
if [ "$STATE" = "$STATE_OK" ]
then
echo "TESTD OK"
exit 0
else
echo "TESTD Failed"
exit $STATE_CRITICAL
fi

Pour tester votre plugins, rien de plus simple, il suffit de lancer la ligne de commande sur votre serveur Nagios:

# /usr/lib/nagios/plugins/check_testd.sh monserveurdistant.mondomaine.com
TESTD OK

Si cela ne fonctionne pas, il faut d'abord vérifier que les fichiers ont les bons droits (lecture et execution) et que le SSH fonctionne correctement entre les deux machines.

Une fois le plugins validé, il ne reste plus qu'a l'intégrer dans vos fichiers de configuration.

# vi /etc/nagios/checkcommands.cfg
...
# 'check_testd' command definition
define command{
command_name check_testd
command_line $USER1$/check_testd $HOSTADDRESS$
}
...

et enfin:

# vi /etc/nagios/services.cfg
...
define service{
use generic-service
host_name monserveurdistant.mondomaine.com
service_description TESTD
check_command check_testd
}
...

Voili a+