You are on page 1of 6

Les pIugins Nagios

Prsentation

A la diIIerence de beaucoup d'autres outils de supervision, Nagios ne dispose pas de mecanisme interne
pour veriIier l'etat d'un service, d'un hte, etc. A la place, il utilise des programmes externes (appeles
plugins). Nagios executera un plugin des qu'il a besoin de tester un service ou un hte qui est supervise.
Les plugins Iont ce qu`il Iaut pour executer le contrle et ensuite envoient simplement le resultat a
Nagios. Nagios analysera le resultat reu du plugin et prendra les mesures necessaires.


Les plugins sont des programmes bien separes de Nagios, ils peuvent contrler une ressource ou un
service local ou distant.

Les plugins sont des programmes executables ou scripts (perl, shell, etc..) qui peuvent tre lances depuis
une ligne de commande pour tester un hte ou un service. Nagios utilise le resultat de cette action pour
determiner le statut des htes ou services sur le reseau. Pour Nagios peu importe ce que Iait un plugin,
seul le resultat compte.

Grce a cette architecture, vous pouvez contrler n'importe quoi, du moment que vous y pensez. Si vous
pouvez automatiser le processus de contrle de quelque chose, vous pouvez le superviser avec Nagios.

Nagios ne peut rien Iaire sans plugin, toute les veriIications sont Iaites a l`aide d`un plugin. Il existe deja
de nombreux plugins, mais aucun n`est Iourni avec Nagios lorsqu`on le telecharge. Les plugins sont
telechargeables a l`adresse suivante :
http://nagiosplug.sourceIorge.net/

Pour tous les plugins contenus dans le package telechargeable a l`adresse precedente, l`option h sur la
ligne de commande permet d`obtenir la description et la syntaxe du plugin.

Principe

Les plugins permettent aux utilisateurs de developper Iacilement leurs propres veriIications de services.
En eIIet, il est tres Iacile de developper un plugin qui surveille un service speciIique.

Developpement d`un plugin :
Les regles de developpement des plugins Nagios sont disponibles a l`adresse suivante :
http://nagiosplug.sourceIorge.net/developer-guidelines.html

Un plugin peut tre developpe dans n`importe quel langage de programmation (C, shell, perl, .). Tout ce
qu`il Iaut c`est qu`il renvoie une valeur entiere entre 0 et 3 (voir tableau ci-dessous).

Codes de retour .
Numeric
Value
Service
Status
Status Description
0 OK
The plugin was able to check the service and it appeared to be Iunctioning
properly
1 Warning
The plugin was able to check the service, but it appeared to be above some
"warning" threshold or did not appear to be working properly
2 Critical
The plugin detected that either the service was not running or it was above
some "critical" threshold
3 Unknown
Invalid command line arguments were supplied to the plugin or the plugin
was unable to check the status oI the given hosts/service

Dans tous les cas, il Iaut aIIicher quelque chose sur la sortie standard pour indiquer que le service teste
marche ou pourquoi il ne marche pas. Ce message doit rester court : une seule ligne, 80 caractere
maximum. Nagios utilise ce message quand il envoie une notiIication aux contacts parametres pour le
service teste.

Conseils :
- Indiquez toujours le chemin complet des appels systemes eIIectues dans le plugin.
- Inspirez-vous des plugins existants pour ecrire les vtres.

Excution de plugins sur des machines distantes : nrpe

nrpe Nagios Remote Plugin Executor.

Permet d'executer des plugins sur des machines distantes de maniere transparente et relativement aisee

Le plugin nrpe est telechargeable a l`adresse suivante :
http://sourceIorge.net/projects/nagios

Il existe une version de nrpe pour Windows NT/2000 :
http://www.miwi-dv.com/nrpent

Iichiers :
check_nrpe : Plugin utilise pour envoyer des requtes sur l'agent nrpe de la machine distante
nrpe : Agent qui tourne sur la machine distante et execute les requtes du plugin
nrpe.cfg : Fichier de conIiguration pour les agents des machines distantes

Cet addon est conu pour permettre l'execution de plugins sur une machine distante. Le plugin
checknrpe tourne sur la machine Nagios et est utilise pour envoyer les requtes d'execution du plugin a
l'agent nrpe de la machine distante. L'agent nrpe executera le plugin approprie sur la machine distante et
retournera les donnees de sortie et le code de retour au plugin checknrpe de la machine Nagios. Le
plugin checknrpe renvoie la sortie du plugin distant et le code de retour a Nagios comme si c'etait le
sien. Cela permet d'executer les plugins de maniere transparente sur les machines distantes.



Configuration de Nagios pour utiliser un plugin

Fichier services.cIg :

Pour chaque service declare dans ce Iichier, il Iaut indiquer la commande utiliser pour contrler le
service. Cette commande est le nom d`une commande declaree dans le Iichier checkcommands.cfg.

# SMTP Service definition
define service{
use generic-service ; Name of service tempIate to use
host_name bruges
service_description SMTP
is_voIatiIe 0
check_period 24x7
max_check_attempts 3
normaI_check_intervaI 3
retry_check_intervaI 1
contact_groups admins
notification_intervaI 120
notification_period 24x7
notification_options w,u,c,r
check_command check_smtp
}


Fichier hosts.cIg :

Pour chaque machine declaree dans ce Iichier, il est possible (mais pas obligatoire) de donner une
commande pour determiner si la machine est en service ou non. Comme precedemment, cette commande
est le nom d`une commande declaree dans le Iichier checkcommands.cfg.

# 'bruges' host definition
define host{
use generic-host ; Name of host tempIate to use
host_name bruges
aIias bruges workstation
address 192.168.130.10
check_command check-host-alive
max_check_attempts 10
notification_intervaI 120
notification_period 24x7
notification_options d,u,r
}


Fichier checkcommands.cIg :

Toutes les commandes utilisees dans les Iichiers services.cIg ou hosts.cIg sont deIinies dans ce Iichier.
C`est ici qu`il Iaut indiquer la ligne de commande a executer (le plugin).

# 'check_smtp' command definition
define command{
command_name check_smtp
command_Iine $USER1$/check_smtp -H $HOSTADDRESS$
}

# 'check-host-aIive' command definition
define command{
command_name check-host-aIive
command_Iine $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p
1
}
Exemples de plugins en bourne shell et en C

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

PROGNAME=`basename $0`
PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
REVISION=`echo '$Revision: 1.2 $' | sed -e 's/[^0-9.]//g'`

. $PROGPATH/utils.sh


print_usage() {
echo "Usage: $PROGNAME"
}

print_help() {
print_revision $PROGNAME $REVISION
echo ""
print_usage
echo ""
echo "This plugin checks hardware status using the lm_sensors package."
echo ""
support
exit 0
}

case "$1" in
--help)
print_help
exit 0
;;
-h)
print_help
exit 0
;;
--version)
print_revision $PROGNAME $REVISION
exit 0
;;
-V)
print_revision $PROGNAME $REVISION
exit 0
;;
*)
sensordata=`sensors 2>&1`
status=$?
if test "$1" = "-v" -o "$1" = "--verbose"; then
echo ${sensordata}
fi
if test ${status} -eq 127; then
echo "SENSORS UNKNOWN - command not found (did you install lmsensors?)"
exit -1
elif test ${status} -ne 0 ; then
echo "WARNING - sensors returned state $status"
exit 1
fi
if echo ${sensordata} | egrep ALARM > /dev/null; then
echo SENSOR CRITICAL - Sensor alarm detected!
exit 2
else
echo sensor ok
exit 0
fi
;;
esac
/*****************************************************************
*
* Program: check_mysql.c
* License: GPL
*
* Written by Tim Weippert
* (based on plugins by Ethan Galstad and MySQL example code)
*
* Command line: check_mysql <host> [user] [passwd]
* <host> can be the FQDN or the IP-Adress
* [user] and [passwd] are optional
*
* Description:
*
* This plugin attempts to connect to an MySQL Server
* with the optional specified parameters user and passwd.
* Normaly the host and a user HAVE to assigned.
*
* The plugin returns
* STATE_OK and the Version Number of the Server when all is fine
* STATE_CRITICAL if the Connection can't be esablished
* STATE_WARNING if the connection was established but the
* program can't get the Versoin Number
* STATE_UNKNOWN if to many parameters are given
*
* Copyright (c) 1999 by Tim Weippert
*
* Changes:
* 16.12.1999: Changed the return codes from numbers to statements
*
*******************************************************************/

#include "config.h"
#include "common.h"
#include "mysql.h"

MYSQL mysql;

int main(int argc, char **argv)
{
uint i = 0;
char *host;
char *user;
char *passwd;

char *status;
char *version;

if ( argc > 4 ) {
printf("Too many Arguments supplied - %i .\n", argc);
printf("Usage: %s <host> [user] [passwd]\n", argv[0]);
return STATE_UNKNOWN;
}

(host = argv[1]) || (host = NULL);
(user = argv[2]) || (user = NULL);
(passwd = argv[3]) || (passwd = NULL);

if (!(mysql_connect(&mysql,host,user,passwd))) {
printf("Can't connect to Mysql on Host: %s\n", host);
return STATE_CRITICAL;
}

if ( !(version = mysql_get_server_info(&mysql)) ) {
printf("Connect OK, but can't get Serverinfo ... something wrong !\n");
return STATE_WARNING;
}

printf("Mysql ok - Running Version: %s\n", version);

mysql_close(&mysql);
return STATE_OK;
}

You might also like