Nagios : supervision d’un pc distant sous Windows

Du côté du pc sous Windows à superviser :

Pour superviser un pc distant sous Linux, il faut y installer NRPE, ainsi que des plugins Nagios (voir la page précédente de ce groupe de billets).
Pour un pc distant sous Windows, NSClient++ :
- joue le rôle de certains plugins Nagios : des modules de NSClient++ permettent par exemple de surveiller la CPU et les disques durs. NSCLient++ peut aussi exécuter des scripts, par exemple en Perl ou en Python
- et joue aussi le rôle de NRPE, en transmettant les résultats de cette surveillance au serveur hébergeant Nagios.

Depuis juillet 2011, NSCLient++ est passé en version 0.4.0.x, et s’appelle d’ailleurs maintenant NSCP.
Cette nouvelle version autorise notamment une gestion plus complexe de sa configuration, tout en maintenant la comptabilité avec les configurations mises au point sur des versions antérieures de NSClient++. Une nouveauté intéressante est que NSCP pourra accéder à une configuration distante, par une adresse url : ceci permettra une gestion centralisée de ces configurations, éventuellement sur le serveur Nagios lui-même, ou sur un autre serveur utilisé pour cette centralisation. NSCP peut utiliser un fichier texte appelé « boot.ini », placé dans le répertoire de l’exécutable nscp.exe, et qui lui indique de charger sa configuration en la cherchant dans plusieurs fichiers de configuration successifs (pour un paramètre recherché, cette recherche stoppe dès qu’un de ces fichiers apporte une réponse). Par exemple, le fichier « boot.ini » suivant :
[settings]
1=ini
2=old
ordonne à NSCP de chercher sa configuration :
- en premier, dans un fichier texte appelé « nsclient.ini»,
- en second, dans un fichier de configuration suivant la syntaxe des versions précédentes de NSClient++ : « NSC.ini » (en l’absence d’un tel fichier « boot.ini », pourtant automatiquement créé lors de l’installation de NSCP par le package .msi, c’est l’ordre de recherche inverse qui serait suivi).
La syntaxe de ce fichier « boot.ini » permet aussi de placer ces fichiers « nsclient.ini » ou/et « NSC.ini » dans un autre répertoire que celui de l’exécutable nscp.exe.

A la date de rédaction de ce billet, l’installateur fourni avec NSCP (donc, la version 0.4.0.93) est moins complet que celui fourni avec NSClient++ (la version 0.3.9, ou avant). Il ne permet plus de définir, à la fin de l’installation, une configuration de départ, enregistrée dans le fichier NSC.ini. Seul le fichier boot.ini est maintenant correctement créé, ainsi qu’un fichier nsclient.ini, mais vide. Une astuce consisterait alors à :
- installer NSClient++, en précisant lors de cette installation l’adressse ip du serveur hébergeant Nagios,
- sauvegarder le fichier NSC.ini créé lors de cette installation,
- désinstaller NSClient++, et installer NSCP.
En mettant ce fichier NSC.ini dans le même répertoire que l’exécutable nscp.exe, cette configuration serait automatiquement chargée, à condition de modifier le ficher boot.ini. L’installateur de NSCP y écrit une seule entrée, pour nsclient.ini, il suffirait donc de renommer cette entrée en 2, et d’ajouter au-dessus la ligne : 1=old.
Après redémarrage du service NSCP (il s’appelle encore NSClient++ dans l’outil d’administration des services), la commande « nscp.exe –test » permet de tester le bon fonctionnement de cette installation. Le principal problème qui apparaît alors dans la sortie de cette commande concerne l’impossibilité de charger NRPEListener.dll. C’est normal, ce module a changé de nom dans NSCP, et s’appelle maintenant NRPEServer.dll : cette correction est donc à effectuer dans le fichier NSC.ini ainsi utilisé (à noter qu’un changement de nom similaire concerne le module NSCientListener.dll, devenu NSClientServer.dll).

Toutefois, ce qui suit concerne :
- NSClient++ en version 0.3.9, installé à partir d’un package .msi,
- sur un pc sous Windows 2000 Server (mais c’est facilement adaptable à des pc sous d’autres versions Windows).
La raison du choix de la version 0.3.9 tient à la jeunesse des versions 0.4.0.x, qui apportent plusieurs changements dans la syntaxe des configurations de cet outil, changements pour lesquels les documentations disponibles sont encore trop rares pour un premier contact avec cet outil.
Après avoir donc installé NSClient++ en version 0.3.9, il faut autoriser ce service à « interagir avec le Bureau » en cochant la case correspondante, dans l’onglet « Connexion » de la fenêtre de propriétés de ce service, avec l’outil d’administration « Services ».

La commande « nsclient++.exe -test » fournit un prompt, qui permet de lancer diverses commandes de surveillance, en local, sur ce pc sous Windows. Par exemple :
- « CheckDriveSize CheckAll » retourne la liste des disques, avec leur lettre, leur taux d’occupation, et leur capacité (attention à respecter les majuscules dans «CheckAll»),
- « CheckUpTime ShowAll » retourne le temps écoulé depuis le dernier démarrage (même remarque pour les majuscules de «ShowAll»),
- « CheckMem ShowAll type=physical » retourne la quantité de mémoire vive disponible.

Du côté du serveur hébergeant Nagios :

Si NRPE n’est pas encore installé sur serveur :
- installer le paquet scli : apt-get install scli
- télécharger les sources de NRPE dans le répertoire /usr/src : wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
- décompresser cette archive : tar zxf nrpe-2.12.tar.gz
Compilation de NRPE :
cd nrpe-2.12
./configure –enable-ssl –enable-command-args
make all
make install

On peut alors tester la communication avec le pc distant à superviser.
Une première méthode est de définir sur le serveur hébergeant Nagios le détail de la commande à effectuer sur le pc distant. Puisque ce pc distant recevra alors les arguments accompagnant cette commande, il faut ajuster à 1 (et éventuellement décommenter, bien sûr) le paramètre « allow_arguments », dans la section « [NRPE] » du fichier « NSC.ini », sur ce pc distant.
Ceci fait, dans le répertoire /usr/local/nagios/libexec/ du serveur hébergeant Nagios, les commandes (par exemple) :
./check_nrpe – H x.x.x.x retourne, sur le pc hébergeant Nagios, la version du programme NSClient++ utilisé sur le pc distant à superviser, dont l’adresse ip est x.x.x.x. ,
./check_nrpe -H x.x.x.x -c CheckDriveSize -a ShowAll retourne la liste des disques du pc distant, avec leur lettre, leur taux d’occupation, et leur capacité.
Une autre méthode consiste à définir des « alias » de commandes, sur le pc distant, dans la section « [External Alias] », et à modifier NSC.ini pour que le module CheckExternalScripts.dll soit chargé (il suffit de décommenter ce module, au début de ce fichier).
La section [External Alias] contient en principe déjà plusieurs alias. Sur le serveur hébergeant Nagios, la commande est similaire à l’exécution d’une commande de NSClient++ :
./check_nrpe -H x.x.x.x -c alias.

Il faut ensuite compléter la configuration de Nagios, sur le serveur qui l’héberge.
Le fichier /usr/local/nagios/etc/nagios.cfg contient une section « OBJECT CONFIGURATION FILE(S) » à partir de sa ligne 23. Cette section permet d’inclure dans la configuration de Nagios divers systèmes à superviser, dont les fichiers de configuration particuliers se trouvent en principe dans le répertoire /usr/local/nagios/etc/objects/ (voir la page précédente de ce groupe de billets).

Pour superviser à distance le pc sous Windows équipé de NSClient++, il faut créer un fichier de configuration, par exemple windows_server.cfg, qu’on peut placer dans le répertoire /usr/local/nagios/etc/objects/, et qui sera pris en compte par Nagios en ajoutant, dans le fichier /usr/local/nagios/etc/nagios.cfg, dans sa section « Object Configuration File(s) », la ligne :
cfg_file=/usr/local/nagios/etc/objects/windows.cfg
Ce fichier windows.cfg pourrait par exemple ressembler à ce qui suit :

# Definition du pc distant sous Windows
define host {
use          windows-server
host_name    pc Windows
alias        pc Windows
address      x.x.x.x
}

# Definition des Services :

# verification des Disques
define service {
use                   generic_service
host_name             pc Windows
service_description   Disque
check_command         check_nrpe ! alias_disk
}

Pensez à attribuer à ce nouveau fichier le même propriétaire et les mêmes droits que ceux déjà en place pour les autres fichiers *.cfg du même répertoire.

La configuration ci-dessus utilise :
- deux templates déjà définis : « windows-server » et « generic_service » (utilisé dans la configuration de localhost ),
- un template qu’on peut ajouter si nécessaire au fichier /usr/local/nagios/etc/objects/commands.cfg, en le construisant de façon suffisamment générique pour qu’il puisse effectivement servir de modèle :
# Définition de check_nrpe
define command {
command_name check_nrpe
command_line /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

Cette exemple simple de définition utilise les variables :
- $HOSTADRESSE$, qui contient alors l’adresse ip définie dans le « define_host » du fichier de configuration de ce pc distant (fichier windows_server.cfg, dans le cas présent),
- $ARG1$, qui contient le nom de l’alias de commande NSCLient++ à exécuter sur le pc distant, alias défini dans la configuration (fichier NSC.ini, dans le cas présent) de NSClient++. Si on veut utiliser, sur le pc distant à superviser, la méthode qui permet à NSCLient++ de recevoir ses paramètres d’exécution de Nagios, cette ligne check_command check-nrpe ! alias_disk contient alors cette commande avec ses paramètres, sous la forme check_command check_nrpe ! CheckDriveSize ! param1 ! param2 ! param2 ! etc.

 

Nagios : installation
Nagios : configuration de la supervision
Nagios : supervision d’un pc distant sous Linux
Nagios : supervision d’un pc distant sous Windows