Affichage des articles dont le libellé est nrpe. Afficher tous les articles
Affichage des articles dont le libellé est nrpe. Afficher tous les articles

lundi 19 décembre 2011

Patch multi packet pour NRPE 2.13

Malgré le faible intérêt de la sortie de nrpe 2.13, je vais tout de même le déployer pour la simple et bonne raison que nous allons bientôt migrer notre infrastructure nagios de Solaris à Linux. C'est donc dans ce cadre que j'ai voulu changer de version et surtout réappliquer le patch que j'utilise depuis pas mal de temps permettant de gérer des sorties longues.

Problème, le patch de tonvoon (dont je parle ici) n'est plus utilisable en l'état. Comme de toute façon le code source a très peu été retouché (juste l'ajout d'une fonction dans le démon nrpe), nous allons voir comment faire pour récupérer ce patch et forcer son application.

Tout d'abord, il nous faut récupérer une copie de notre patch sur notre machine :

wget https://dev.icinga.org/attachments/download/113/nrpe_multiline.patch

Passons maintenant à la transformation de notre patch au format Windows (eurk !) :

unix2dos ./nrpe_multiline.patch

Il ne nous reste plus qu'à passer le patch en indiquant la ligne de commande patch --binary -l -p1. Si tout se passe bien, la sortie devrait ressembler à ce qui suit :

nous@roulette:~/nagios/nrpe-2.13$ patch --binary -l -p1 < ../nrpe_multiline.patc
h 
patching file include/common.h
patching file src/check_nrpe.c
patching file src/nrpe.c
Hunk #1 succeeded at 972 (offset -57 lines).
Hunk #2 succeeded at 1190 (offset -57 lines).
Hunk #3 succeeded at 1206 (offset -57 lines).
Hunk #4 succeeded at 1235 (offset -57 lines).

Lançons maintenant la configuration et la compilation. Tout devrait bien se passer.

Nous allons maintenant nous assurer qu'il n'y a pas eu de régression. Tout d'abord créons un fichier nrpe.cfg avec le contenu suivant :

log_facility=daemon
pid_file=./nrpe.pid
server_port=5666
server_address=127.0.0.1
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=127.0.0.1
dont_blame_nrpe=0
debug=0
command_timeout=60
connection_timeout=300

command[short_output]=echo coucou
command[long_output]=/bin/cat /etc/wgetrc

La première commande affiche un simple coucou et la seconde affiche le contenu du fichier /etc/wgetrc.

Mais trêve de bavardage et lançons séance tenante notre démon :

nous@roulette:~/nagios/nrpe-2.13$ ./src/nrpe -c ./nrpe.cfg -d
nous@roulette:~/nagios/nrpe-2.13$ ps -ef | grep nrpe
nous      9374     1  0 17:04 ?        00:00:00 ./src/nrpe -c ./nrpe.cfg -d
nous      9376  5769  0 17:04 pts/0    00:00:00 grep --color=auto nrpe

Tout semble parfait. Lançons un test de notre première commande :

./src/check_nrpe -H localhost -c short_output
coucou

Ça semble plutôt pas mal. Regardons maintenant la taille de la sortie de notre commande longue et comparons cela au fichier d'origine :

nous@roulette:~/nagios/nrpe-2.13$ ./src/check_nrpe -H localhost -c long_output | wc
    126     797    4496
nous@roulette:~/nagios/nrpe-2.13$ wc /etc/wgetrc
 126  797 4496 /etc/wgetrc

C'est parfait ! Notre NRPE en version 2.13 avec patch sortie longue est prêt à fonctionner !

samedi 26 novembre 2011

Sortie de NRPE 2.13

Il y'a peu de temps, la version 2.13 de NRPE est sortie. Autant dire que je suis assez déçu sur le contenu de cette nouvelle version puisque nous n'avons qu'un seul changement pour définir qui a le droit de se connecter sur l'agent NRPE dans le fichier nrpe.cfg (ainsi que la compilation sous Solaris 10). En gros, auparavant, vous étiez obliger de donner explicitement l'IP de votre serveur nagios pour pouvoir vous connecter. Dorénavant, vous pouvez préciser un réseau avec un masque. Ci-dessous un exemple de fichier nrpe.cfg faisant appel à ce mécanisme :
log_facility=daemon
pid_file=/var/run/nagios/nrpe.pid
server_port=6666
nrpe_user=nagios
nrpe_group=nagios
# allowed_hosts=127.0.0.1
allowed_hosts=192.168.0.0/24

dont_blame_nrpe=0
debug=0
command_timeout=60
connection_timeout=300
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
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 
NB: ce démon tourne sur le port 6666 pour des besoins de test. La commande check_nrpe ci-dessous utilisera l'option -p 6666 pour pouvoir s'y connecter.
On va essayer de se connecter sur notre agent NRPE. Ci-dessous l'adresse de mon poste :
drayan@robert:~/dev/nrpe-2.13$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 1c:6f:65:21:7b:c0  
          inet adr:192.168.0.17  Bcast:192.168.0.255  Masque:255.255.255.0
[...]
Lançons un test en tant que localhost (qui devrait nous jeter du fait qu'on se présente avec l'adresse IP 127.0.0.1) :
drayan@robert:~/dev/nrpe-2.13$ ./src/check_nrpe -H localhost -c check_load -p 6666
CHECK_NRPE: Error - Could not complete SSL handshake.
Parfait ! Lançons maintenant la même chose en utilisant notre adresse IP :
drayan@robert:~/dev/nrpe-2.13$ ./src/check_nrpe -H 192.168.0.17 -c check_load -p 6666
OK - Charge moyenne: 0.03, 0.06, 0.09|load1=0.030;15.000;30.000;0; load5=0.060;10.000;25.000;0; load15=0.090;5.000;20.000;0;
Voilà, c'est tout ... Je suis notamment assez déçu que le patch pour gérer les sorties longues (dont j'avais parlé ici il y'a quelque temps) ne fasse pas partie de cette release.

Compilation de NRPE 2.13 sous Ubuntu 11.10


Si comme moi vous voulez compiler votre démon NRPE 2.13 sous Ubuntu oneiric, vous avez dû tomber sur un bien beau message d'erreur :

drayan@robert:~/dev/nrpe-2.12$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
[...]
checking for type of socket size... size_t
checking for SSL headers... SSL headers found in /usr
checking for SSL libraries... configure: error: Cannot find ssl libraries
drayan@robert:~/dev/nrpe-2.12$

Autant dire qu'avec ça, je suis bien avancé. Après quelque recherche, je tombe sur un bug référencé sur launchpad : https://launchpad.net/ubuntu/oneiric/+source/nagios-nrpe/2.12-4ubuntu3.

Dans le bug, le mainteneur du paquet nous fait part d'un laconique message invitant à rajouter l'option --with-ssl-lib=<multiarch dir>. N'ayant pas trop d'idée de ce que ça pouvait bien vouloir dire, j'ai donc tâtonné avant de tomber sur un configure qui passait. Dans l'espoir de faire gagner du temps à d'autre, je vous fais donc part de cette merveilleuse option (dans le cas d'une machine avec un kernel x86_64) :
drayan@robert:~/dev/nrpe-2.13$ ./configure --with-ssl-lib=/usr/lib/x86_64-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
[...]
checking for SSL headers... SSL headers found in /usr
checking for SSL libraries... SSL libraries found in /usr/lib/x86_64-linux-gnu

*** Generating DH Parameters for SSL/TLS ***
Generating DH parameters, 512 bit long safe prime, generator 2
This is going to take a long time
.+......................[...].....++*++*++*++*++*++*
checking for Kerberos include files... could not find include files
checking for perl... /usr/bin/perl
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating subst
config.status: creating include/config.h


*** Configuration summary for nrpe 2.13 11-11-2011 ***:

 General Options:
 -------------------------
 NRPE port:    5666
 NRPE user:    nagios
 NRPE group:   nagios
 Nagios user:  nagios
 Nagios group: nagios


Review the options above for accuracy.  If they look okay,
type 'make all' to compile the NRPE daemon and client.
Bref, maintenant, je vais pouvoir me battre avec le patch long output pour NRPE.

mercredi 9 mars 2011

Patch du jour : NRPE et les sorties longues

NRPE est vraiment un compagnon inséparable de nagios : lancer des plugins à distance sur un serveur et récupérer leurs résultats au travers d'une simple commande check_nrpe.

Pour l'illustrer, lançons un démon NRPE avec le fichier de configuration suivant :


log_facility=daemon
pid_file=./nrpe.pid
server_port=5666
server_address=127.0.0.1
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=127.0.0.1
dont_blame_nrpe=0
debug=0
command_timeout=60
connection_timeout=300

command[short_output]=/bin/cat /tmp/test
command[long_output]=/bin/cat /etc/screenrc


Nous y avons défini deux commandes (short_output et long_output) et nous l'avons fait écouter sur l'adresse localhost. Lançons maintenant notre process :


# ./nrpe -c ./nrpe.cfg -d
# ps -ef | grep nrpe
nagios 11411 1 0 22:39 ? 00:00:00 ./nrpe -c ./nrpe.cfg -d
root 11417 6370 0 22:39 pts/4 00:00:00 grep --color=auto nrpe


Essayons maintenant de récupérer le résultat d'une de nos commandes :


$ ./check_nrpe -H localhost -c short_output
Retour NRPE|Short_output=1


Tout semble fonctionner au mieux mais malheureusement dans le cas d'une sortie trop grande, tout ce qui dépasse 1024 ieme octet est ignoré :


$ ./check_nrpe -H localhost -c long_ouput | wc
34 160 1024


En creusant un peu, cette limitation vient de la définition d'une constante C dans le fichier include/common.h :

#define MAX_PACKETBUFFER_LENGTH 1024


Ici, la solution qui vient immédiatement à l'esprit est de simplement changer cette valeur et relancer la compilation. Une fois la recompilation terminée, nous obtenons un binaire check_nrpe et un binaire nrpe.

En lançant notre nrpe patché, nous avons effectivement le résultat attendu. Petit soucis, si vous avez déjà des agents NRPE et que vous voulez lancer votre commande check_nrpe sur un ancien serveur, vous obtiendrez une belle erreur vous indiquant un soucis de communication :


$ ./check_nrpe -H localhost -c short_output
CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.


Si vous êtes comme moi avec environ 300 agents NRPE déjà existant, vous aurez quelques hésitations à les redéployer tous. Heureusement, tonvoon a écrit un patch assez astucieux à ce sujet il y a déjà quelques temps. Le principe est d'utiliser le champ packet_type pour indiquer un nouveau type RESPONSE_PACKET_WITH_MORE en plus des types RESPONSE_PACKET et QUERY_PACKET. Lorsque le plugin check_nrpe détecte ce type de paquet, au lieu de terminer la communication, le client récupère les packets suivants pour les concaténer jusqu'au maximum de 16ko. Et cerise sur le gateau : le plugin check_nrpe reste compatible avec les anciens clients NRPE !

Vous pouvez donc mettre votre plugin check_nrpe à jour et faire la mise à jour au fil de l'eau pour vos agents NRPE voir - si vous êtes vraiment un gros feignant - ne le faire que là où vous en avez besoin.

Pour appliquer le patch, récupérer une copie de NRPE en version 2.12, patcher là avec le fichier suivant puis lancer le classique configure ; make ; make install. Vous obtiendrez alors vos deux binaires à utiliser.

vendredi 25 juin 2010

Compilation NRPE sous AIX 5.3 avec support du SSL

J'ai eu dernièrement besoin de compiler un agent nagios NRPE pour AIX 5.3. Malheureusement pour moi, cet OS est livré sans librairie dynamique openssl (ie libssl.so). J'ai donc du compiler nrpe en static.

N'ayant pas trouver d'information intéressante sur le net (en dehors de désactiver le ssl), je me suis dit que ce genre d'information pourrait être utile à d'autre.

Tout d'abord, modifier le fichier configure de la manière suivante (sur une version 2.12 de nrpe) :


$ diff configure.orig configure
6673c6673
< if test -f "$dir/libssl.so"; then
---
> if test -f "$dir/libssl.a"; then
6687c6687
< LIBS="$LIBS -lssl -lcrypto";
---
> LIBS="$LIBS $ssllibdir/libssl.a $ssllibdir/libcrypto.a";


Le patch consiste à changer la nature du fichier recherché (libssl.a à la place de libssl.so) et remplacer les flags de compilation -lssl et -lcrypto par les fichiers des bibliothèques que l'on vient de trouver.

Il ne reste plus qu'à lancer configure avec les options suivantes :
./configure --with-ssl=/opt/freeware --with-ssl-lib=/opt/freeware/lib --prefix=/opt/nagios


Un coup de make ; make install et vous disposez maintenant des binaires nrpe et check_nrpe à la mode AIX et surtout avec le support du SSL.

jeudi 27 mai 2010

Problème de buffer nrpe

Cet après-midi, j'ai commencé à mettre en place une surveillance de tablespace sur Oracle. Petit soucis, j'ai dépassé sans trop m'apercevoir la limite du buffer de nrpe (1024 pour un résultat).

Autre petit problème, il est impossible de modifier la taille du buffer sans avoir à recompiler la commande check_nrpe et - petit bonus - le client check_nrpe obtenu est incompatible avec les anciens démons NRPE.

Donc, retour à l'ancienne version et du coup, j'ai modifié ma commande de surveillance pour faire mes stats en deux fois :).

mercredi 12 mai 2010

Compilation NRPE et génération d'un binaire statique sous Solaris 8 ou 10

On va pas aller jusqu'à dire qu'en ce moment Nagios soit toute ma vie mais en tout cas, au taff, ça occupe pas mal mes journées. Donc, je vais essayer de sortir les astuces que j'ai pu utiliser pour arriver à compiler NRPE et les plugins de surveillance standard.

Donc, pour la compilation, récupérer le source de NRPE, le décompresser et commencer par modifier le fichier src/nrpe.c de la manière suivante :

617c617
< log_facility=LOG_AUTHPRIV;
---
> log_facility=LOG_AUTH;
619c619
< log_facility=LOG_FTP;
---
> log_facility=LOG_DAEMON;


Une fois la modification terminée, il nous faut maintenant lancer configure avec les options suivantes :

./configure --prefix=/path/to/nagios --with-ssl=/usr/local/ssl/lib

NB : Ici il faut s'assurer d'avoir télécharger un compilateur GCC et OpenSSL depuis le site www.sunfreeware.com.

Lancez ensuite la compilation. En principe, vous devriez obtenir un nrpe fonctionnel mais lié aux librairies situées dans /usr/local/lib et autant vous dire, vous n'aurez jamais cette librairie présente sur vos machines Solaris.

Pour cette raison, nous allons donc générer un binaire statique pour ne plus avoir de dépendance sur openssl. Pour se faire, se rendre dans le répertoire src et relancer manuellement la compilation de nrpe avec la commande suivante :

gcc -g -O2 -I/usr/local/ssl/include/openssl -I/usr/local/ssl/include -DHAVE_CONFIG_H -o nrpe-static \
nrpe.c utils.c -lsocket -L/usr/local/ssl/lib /usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libcrypto.a \
-lnsl -lsocket ./snprintf.o


Pour info, voici le résultat sous Solaris 10 :

$ ls -l nrpe nrpe-static
-rwxr-xr-x 1 root root 118888 mars 19 14:42 nrpe
-rwxr-xr-x 1 root root 1349532 mars 19 14:41 nrpe-static


Le binaire est maintenant parfaitement fonctionnel. Il ne vous reste plus qu'à le déployer sur vos machines.