NRPE : monitorer des Linux avec Nagios
Après cet article d’introduction à Nagios quand on n’y connait rien , où je tâche de couvrir les bases + le monitoring de machines Windows, essentiellement, voici maintenant le minimum vital pour monitorer un Linux. Quand je dis Linux, je pense Debian. « What else? » comme dirait l’autre.
On va donc utiliser NRPE, un équivalent Linux (permettez le raccourci) de NSClient++ pour Windows. En gros : un daemon qui permet d’exécuter des commandes à distance, fournissant en standard la surveillance des tailles des partitions, de la charge CPU, du nombre d’utilisateurs, de processus et de zombies. Comme d’habitude, Debian a tout packagé et il n’y a presque rien à faire…
Par la suite, on considère une machine nommée « srvnagios » et des machines srv1 et srv2 à monitorer. La solution de base Nagios fonctionne, comme expliqué dans l’article mentionné plus haut.
Installation et paramétrage minimum
Côté serveur de monitoring
Sur le serveur « srvnagios », on complète l’installation existante de Nagios avec le plugin NRPE. Sur Debian, c’est le paquet « nagios-nrpe-plugin ». Ca s’installe tout seul et la seule chose qu’on en retiendra, c’est la mise à dispo des commandes et fichiers de conf Nafios suivants :
srv_nagios:~# locate check_nrpe /etc/nagios-plugins/config/check_nrpe.cfg /usr/lib/nagios/plugins/check_nrpe
Côté serveur à monitorer
Sur les machines à monitorer, on installe le « serveur » NRPE. Sur Debian, c’est le paquet « nagios-nrpe-server ». Par dépendances, ça installera tout un bazar, normal.
Deux choses à noter :
srv̉1:~# dpkg -L nagios-nrpe-server [...] /etc/nagios/nrpe.cfg /etc/nagios/nrpe_local.cfg [...] /etc/default/nagios-nrpe-server [...]
Le 3è fichier permet de désactiver le mode SSL (pourquoi feriez-vous ça ?) ou de changer la priorité (« nice ») du daemon.
Le 1er fichier définit plein de paramètres qu’on va écraser dans « nrpe_local.cfg », partiellement. Il est bon de survoler le fichier /etc/nagios/nrpe.cfg
pour y dénicher les paramètres que vous voulez modifier. La bonne pratique semble être de le laisser tel quel et d’écraser les valeurs qui vous concernent dans le fichier nrpe_local.cfg
. Ca doit faciliter le boulot lors d’une montée de version. Le 1er fichier « include » le 2ème à la fin.
Le minimum semble être de modifier l’IP autorisée à interroger la machine et d’y mettre l’IP de « srv_nagios » puisque c’est lui qui va appeler des commandes :
srv1:~# cat /etc/nagios/nrpe_local.cfg allowed_hosts=x.y.z.t
Sans ça, seul localhost
est autorisé à interroger le daemon. Utile uniquement lorsque Nagios est sur la même machine pour se monitorer elle-même.
La suite, c’est d’ajouter les commandes que l’on souhaite. Notamment pour la surveillance des partitions de disques. Regardez et comprenez la partie de définition des commandes (statiques ou à variables) dans la fin du fichier nrpe.cfg
. Ca explique la syntaxe et le chapitre suivant :
Nouvelles commandes
J’ai choisi de créer en dur des commandes pour interroger les partitions. J’ai tout hard-codé comme un cochon, plutôt que de variabiliser. C’est un choix. Mais avec la syntaxe lourdingue de Nagios, on est plus à quelques copier-coller près.
J’ai donc ajouté dans nrpe_local.cfg
– dans le cas d’un serveur avec du RAID logiciel – les commandes suivantes :
command[check_md1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/md1 command[check_md2]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/md2 command[check_md3]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/md3 command[check_md6]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/md6 command[check_md7]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/md7
Dans un cas plus traditionnel, l’équivalent sera des sda1/2/3 ou hda1/2/3.
Enfin, le contrôle du nombre de processus, de la charge etc, est fourni en standard (voir plus bas)
Tests en commande en ligne
Depuis le « srv_nagios », on peut alors – après avoir relancé /etc/init.d/nagios-nrpe-server reload
– tester nos commandes et aussi se familiariser avec la syntaxe de « check_nrpe » :
srv_nagios:~# /usr/lib/nagios/plugins/check_nrpe -H srv1 -c check_md1 -p 5666 DISK OK - free space: /boot 170 MB (94% inode=99%);| /boot=9MB;151;170;0;189
Hop, ça marche, on peut définir tout ce qu’il faut dans Nagios.
Intégration dans Nagios
Je passe sur la définition (au sens Nagios) des machines srv1, srv2 etc. Leurs appartenances à des groupes, des templates, des trucs et des bidules de Nagios.
Un exemple simpliste (définition des commandes une à une par partition) est donc une longue série de commandes de ce type à intégrer dans /etc/nagios3/conf.d/ce_que_vous_voulez.cfg
:
define service { use generic-service host_name srv1,srv2 # LE TEST S'APPLIQUERA AUX DEUX MACHINES, ELLES ONT TOUTES LES 2 UN /dev/md2 service_description NRPE disk md2 check_command check_nrpe_1arg!check_md2 } #[...] define service { use generic-service host_name srv2 # UNE SEULE MACHINE BENEFICIERA DE CE TEST service_description NRPE disk md7 check_command check_nrpe_1arg!check_md7 }
Puis, on déclare des commandes pour la charge, les users etc. Cette fois, j’ai déclaré ces tests communs au groupe de machines « nrpe-servers », dont font partie srv1 et srv2 dans mon cas :
define service{ use generic-service hostgroup_name nrpe-servers service_description NRPE load check_command check_nrpe_1arg!check_load } define service{ use generic-service hostgroup_name nrpe-servers service_description NRPE users check_command check_nrpe_1arg!check_users } define service{ use generic-service hostgroup_name nrpe-servers service_description NRPE zombie check_command check_nrpe_1arg!check_zombie_procs } define service{ use generic-service hostgroup_name nrpe-servers service_description NRPE procs check_command check_nrpe_1arg!check_total_procs }
A noter, dans /etc/nagios-plugins/config/check_nrpe.cfg
sur « srv_nagios », j’ai modifié la commande check_nrpe_1arg
en enlevant le paramètre de timeout -t 60
. Je ne sais plus s’il y avait une raison valable.
Rechargez Nagios et admirez.
Firewalling
Pour clore tout ça, pensez aux restrictions réseaux. Pour peu qu’il y en ait entre les machines srv_nagios et srv1/2, pensez à ouvrir le port TCP 5666 (si vous ne l’avez pas modifié). Exemple avec shorewall, dans /etc/shorewall/rules
, sur la machine monitorée « srv1″ :
ACCEPT net:$mon_srvnagios $FW tcp 5666
Et sur le serveur de supervision « srv_nagios » :
ACCEPT $FW net:$mon_srv1 $FW tcp 5666
Avec les IP de mon_srv1 et mon_srvnagios défini dans /etc/shorewall/params
.
Wala, surveillez bien.