NRPE est un agent de supervision qui vous permet de récupérer les informations à distance. Son principe de fonctionnement est simple : il suffit d’installer le démon sur la machine distante et de l’interroger à partir du serveur Nagios.
Le gros avantage de cet agent est qu’il permet de réduire les charges sur le serveur Nagios. De plus certains greffons sont à exécuter obligatoirement en local.
Une fois téléchargée, décompressez l’archive récupérée puis lancer la compilation et l’installation.
wget http://freefr.dl.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz tar zxvf nrpe-2.12.tar.gz cd nrpe-2.12 ./configure --prefix=/usr/local/nagios/ --enable-ssl --with-log-facility --enable-command-args --enable-threads=posix --with-trusted-path=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/nagios/bin:/usr/local/nagios/libexec make make install cp sample-config/nrpe.cfg /usr/local/nagios/etc/
Ensuite ce qui nous intéresse c’est que nrpe soit gérer comme un démon et qu’il démarre automatique au démarrage de la machine. Voici un exemple de démon pour nrpe (modèle fourni par le package nrpe d’Ubuntu).
#!/bin/bash ### BEGIN INIT INFO # Provides: nrpe # Required-Start: $remote_fs $syslog nagios # Required-Stop: $remote_fs $syslog nagios # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start nrpe daemon at boot time # Description: Contributed by Andrew Ryder 06-22-02 # Slight mods by Ethan Galstad 07-09-02 # LSB compliance by david GUENAULT 15-03-09 ### END INIT INFO prefix=/opt/nagios NrpeBin=$prefix/bin/nrpe NrpeCfg=$prefix/etc/nrpe.cfg test -f $NrpeBin || exit 0 case "$1" in start) echo -n "Starting nagios remote plugin daemon: nrpe" start-stop-daemon --start --quiet --exec $NrpeBin -- -c $NrpeCfg -d -n echo "." ;; stop) echo -n "Stopping nagios remote plugin daemon: nrpe" start-stop-daemon --stop --quiet --exec $NrpeBin echo "." ;; restart) echo -n "Restarting nagios remote plugin daemon: nrpe" start-stop-daemon --stop --quiet --exec $NrpeBin start-stop-daemon --start --quiet --exec $NrpeBin -- -c $NrpeCfg -d -n echo "." ;; reload|force-reload) echo -n "Reloading configuration files for nagios remote plugin daemon: nrpe" # nrpe reloads automatically echo "." ;; *) echo "Usage: /etc/init.d/nrpe start|stop|restart|reload|force-reload" exit 1 ;; esac exit 0
cp nrpe /etc/init.d/nrpe chmod +x /etc/init.d/nrpe update-rc.d nrpe defaults /etc/init.d/nagios stop /etc/init.d/nagios start
Vous devez avoir installé au préalable les plugins Nagios sur le système à superviser. NRPE n’est en effet qu’un démon de transport sans plugin.
Pour NRPE, c’est la même procédure que pour le serveur :
Une fois téléchargée, décompressez l’archive récupérée puis lancer la compilation et l’installation.
wget http://freefr.dl.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz tar zxvf nrpe-2.12.tar.gz cd nrpe-2.12 ./configure --prefix=/usr/local/nagios/ --enable-ssl --with-log-facility --enable-command-args --enable-threads=posix --with-trusted-path=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/nagios/bin:/usr/local/nagios/libexec make make install cp sample-config/nrpe.cfg /usr/local/nagios/etc/
Ensuite il faut que NRPE soit démarré comme démon au démarrage de la machine. Voici un exemple de fichier de démarrage pour nrpe (modèle fourni par le package nrpe d’Ubuntu).
#!/bin/bash ### BEGIN INIT INFO # Provides: nrpe # Required-Start: $remote_fs $syslog nagios # Required-Stop: $remote_fs $syslog nagios # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start nrpe daemon at boot time # Description: Contributed by Andrew Ryder 06-22-02 # Slight mods by Ethan Galstad 07-09-02 # LSB compliance by david GUENAULT 15-03-09 ### END INIT INFO prefix=/opt/nagios NrpeBin=$prefix/bin/nrpe NrpeCfg=$prefix/etc/nrpe.cfg test -f $NrpeBin || exit 0 case "$1" in start) echo -n "Starting nagios remote plugin daemon: nrpe" start-stop-daemon --start --quiet --exec $NrpeBin -- -c $NrpeCfg -d -n echo "." ;; stop) echo -n "Stopping nagios remote plugin daemon: nrpe" start-stop-daemon --stop --quiet --exec $NrpeBin echo "." ;; restart) echo -n "Restarting nagios remote plugin daemon: nrpe" start-stop-daemon --stop --quiet --exec $NrpeBin start-stop-daemon --start --quiet --exec $NrpeBin -- -c $NrpeCfg -d -n echo "." ;; reload|force-reload) echo -n "Reloading configuration files for nagios remote plugin daemon: nrpe" # nrpe reloads automatically echo "." ;; *) echo "Usage: /etc/init.d/nrpe start|stop|restart|reload|force-reload" exit 1 ;; esac exit 0
cp nrpe /etc/init.d/nrpe chmod +x /etc/init.d/nrpe update-rc.d nrpe defaults
groupadd -g 9000 nagios groupadd -g 9001 nagcmd useradd -u 9000 -g nagios -G nagcmd -d /usr/local/nagios -c "Nagios Admin" nagios adduser www-data nagcmd
Quelques explications sur la configuration du nrpe.cfg :
# Adresse IP de votre machine server_address=xx.xx.xx.xx # Adresse autorisant NRPE (yy.yy.yy.yy --> IP du serveur Nagios) allowed_hosts=127.0.0.1,yy.yy.yy.yy # Autorisation du passage d'argument durant les checks dans NRPE dont_blame_nrpe=1
Une fois ces modifications faite, pensez à bien redémarrer nrpe des 2 côtés.
Par exemple, on définit une commande dans le fichier de configuration de NRPE (nrpe.cfg) sur la machine à superviser (ce n’est qu’une ligne).
command[check_monhome]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /home
Explication de cette ligne :
command[check_monhome] –> check_monhome désignera un alias qui permet de reconnaitre et d’écourter côté serveur nagios la commande concernée.
/usr/local/nagios/libexec/check_disk –> Plugin nagios se trouvant sur la machine à superviser
-w 20 -c 10 -p /home –> Argument du plugin (généralement -w seuil de Warning / -c seuil de Critique)
Sur le serveur Nagios, il faut définir une commande pour utiliser le greffon check_nrpe.
Dans commands.cfg :
# nrpe avec ssl define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ } # nrpe sans ssl define command{ command_name check_nrpe_no_ssl command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -n -c $ARG1$ }
Il ne reste plus qu’à définir le service correspondant.
define service{ use generic-service host_name Server2 service_description Espace FileSystem /home check_command check_nrpe!check_monhome contact_groups AdminNagiosGroup }
Pour la variable check_command, nous retrouvons :
check_command check_nrpe!check_monhome
check_monhome est l’alias déclaré sur la machine à superviser.
Ayant été confronté à des erreurs provenant de l’utilisation de nrpe dans des architectures réseau spécifiques, je propose cette section d’erreurs.
Si le problème ne trouve pas sa solution ici, c’est peut être qu’il n’est pas si spécifique que ça. Dans ce cas, une recherche sur votre moteur de recherche préféré peut être utile. (Dans le fichier NRPE.pdf vers la fin, il y a quelques aides). Si vous ne trouvez rien, le forum pourra peut être vous aider, et vous pourrez ajouter une solution ici.
Ce problème est bien connu sur les différents forums. La solution en général est simple : vérifier les droits du fichier de conf, que le serveur effectuant le test est bien autorisé à discuter avec le daemon nrpe (dans nrpe.cfg ou dans xinetd.d/nrpe suivant le mode de lancement du daemon), ouvrir le port 5666, etc…
Dans mon cas, c’était simple aussi, encore faut-il savoir. Mes machines supervisées sont des machines virtuelles. Elles tournent sur un serveur kvm, dans une salle blanche.
Le serveur physique est connecté sur internet et a une ip publique toussa toussa. Les machines virtuelles sont dans un (plusieurs) réseau(x) NAT.
Pour certaines raisons, j’ai configuré l’iptables de la machine hôte pour gérer le NAT assez spécifiquement. Sans faire plus de détail, au niveau de la passerelle NAT, l’IP de source de la requête nrpe est transformée de nagiosIP en passerelleIP. Il ne faut donc plus accepter les requêtes depuis nagiosIP mais bien depuis passerelleIP.
Voilà, c’est effectivement un problème très très spécifique, mais on ne sait jamais, si quelqu’un se trouve dans une situation similaire (avec ou sans virtualisation), il aura peut être moins à fouiller pendant 4h (oui, j’y ai passé 4h… Et j’ai trouvé la solution tout seul au final).
Par défaut nrpe ne remonte que les 1024 premiers caractères de la sortie (output) d’un plugin. En général, c’est suffisant mais si votre plugin remonte plus d’informations avec les données de performance, cela peut ne pas suffire. Pour augmenter cette limite, il va falloir malheureusement recompilé nrpe en changeant un paramètre dans un fichier “include”.
Rendez-vous dans le fichier “common.h” qui se trouve dans le répertoire “include” dans les sources de nrpe. Modifiez la ligne suivante:
#define MAX_PACKETBUFFER_LENGTH 1024 /* max amount of data we'll send in one query/response */
Il suffit ensuite de mettre la valeur souhaitée, 2048, 3072…