Dans ce billet on va superviser une machine Windows. Il existe 3 méthodes pour le faire. Le classique protocole SNMP, l’agent NRPE ou l’utilisation du système Microsoft Windows Management Instrumentation (WMI).
Ici on va configurer un agent NRPE. Le principe est que le serveur Shinken initie une connexion vers un processus distant, le processus appel la commande système demandée par Shinken et retourne le résultat avec le code de retour et la sortie standard.
I. Configuration du poste Windows
Télécharger et installer le client NSClient++ disponible ici.
Lors de l’installation, vous serez invité à saisir le mot de passe de connexion de l’agent ainsi que l’adresse du serveur Shinken. Gardez bien le mot de passe il sera nécessaire lors de la configuration du serveur Shinken. Petit conseil : pas de caractères spéciale genre « ! » qui est un caractère d’échappement pour les fichiers de configurations de Shinken.
Cocher les cases suivantes :
- Enable common check plugins : active les plugins de base NRPE
- Enable nsclient server (check_nt) : obligatoire pour que les plugins check_nt fonctionne depuis Shinken
- Enable NRPE server (check_nrpe) : active le mode agent. Utilise pour faire des script de supervision perso.
- Enable WMI checks : comme je l’ai dis précédemment, ceci active le mode de supervision à la Mircrosoft.
Une fois installer, vous pouvez lancer le service. Pour cela on se rend dans le gestionnaire de service (services.msc) afin de vérifier que NSClient++ se trouve bien en état « démarré » et « automatique ».
Le service sera à redémarrer après chaque modification de la configuration de l’agent. Celle ci se trouve sous C:\Program Files\NSClient++\nsclient.
Un dernier détail afin de terminer la configuration. Pour plus de sécurité Windows désactive les accès et autorisations de connexion à distance. Pour vérifier, faite clique droit et propriété sur le service. Dans l’onglet connexion, cocher « Authoriser le service à interagir avec le Bureau ».
II. Configuration de Shinken
On va dans un premier temps tester la bonne connexion de notre agent en appelant directement le script check_nt.
1 |
/usr/lib/nagios/plugins/check_nt -H host.domain.local -p 12489 -v CLIENTVERSION -s password |
Explication sur les options :
- -H : Nom ou adresse IP de l’hôte à interroger.
- -p : port. Par défaut 12489
- -s : Le mot de passe. Celui saisi à l’installation du client NSClient++
- -v : Variable à interroger
Ici, on demande la version de l’agent installé sur la machine. Le résultat doit ressembler à ça :
1 |
NSClient++ 0,4,1,105 2014-04-28 |
L’agent fonctionne. On va maintenant créer un commande Shinken qui utilise ce script. Pour cela on créé le fichier commands/check_nt.cfg et on y place les lignes suivantes
1 2 3 4 |
define command { command_name check_nt ; Nom de la commande qui sera appelé command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s password -v $ARG1$ $ARG2$ ; syntaxe 'brute' de la commande } |
La commande n’est que la forme syntaxique de l’appel que on avons effectué précédemment pour tester le script. La seule différence ce trouve dans l’ajout de l’arguments -v permettant de passer des paramètres supplémentaires. Chaque plugin requière un paramètre comme par exemple un seuil de criticité , le nom d’un service particulier ou une lettre de lecteur.
On passe ensuite à la création d’un groupe pour qui fera office de base pour tous les serveurs Windows. On créé donc le fichier hostgroups/windows_nrpe.cfg pour y placer les lignes suivantes
1 2 3 4 5 |
define hostgroup{ hostgroup_name windows_nrpe alias Serveur Windows Via NSClient++ members serveur_windows } |
On va à présent rattacher des services à ce groupe. Chacun des serveurs Windows dans ce dernier se verra donc superviser par ces services. Vous pouvez les placer à la suite du fichier hostgroups pour une meilleur lisibilité ou créer un nouveau fichier de configuration.
Afficher la version de l’agent NSClient++
1 2 3 4 5 6 |
define service { service_description Check version NS Client ; Description de la commande hostgroup_name windows_nrpe ; Nom du groupe sur lequel la commande sera exécutée use generic-service ; Utilisation du template générique check_command check_nt!CLIENTVERSION ; Commande à effectuer } |
Uptime de la machine
1 2 3 4 5 6 |
define service { service_description Uptime hostgroup_name windows_nrpe use generic-service check_command check_nt!UPTIME } |
Charge CPU
Avec une interrogation qui permet un mode de calcul assez proche de celui observé sur machine Linux/Unix, soit une moyenne sur la dernière minute, les 5 et les 15 dernières minutes. Les seuils d’avertissement (90) et critique (95) sont précisés pour chacune des valeurs interrogées.
1 2 3 4 5 6 |
define service { service_description CPU load hostgroup_name windows_nrpe use generic-service check_command check_nt!CPULOAD!-l 1,90,95,5,90,95,15,90,95 ; Comme linux } |
Charge mémoire
Un warning à 80% et une alerte à 90%.
1 2 3 4 5 6 |
define service { service_description RAM load hostgroup_name windows_nrpe use generic-service check_command check_nt!MEMUSE!-w 80 -c 90 } |
Taux de remplissage du disque dur “C:”
-l c : selection du lecteur à supervisiser
-w : seuil pour déclancher un warning
-c : seuil critique
1 2 3 4 5 6 |
define service { service_description Charge disque C hostgroup_name windows_nrpe use generic-service check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90 } |
Les services de base sont configurés. On va pour terminer créer une machine qui appartiendra au groupe windows_nrpe. Création du fichier /etc/shinken/hosts/serveur_windows_test.cfg
1 2 3 4 5 |
define host{ use generic-host host_name serveur_windows address serveur_windows.domain.local } |
Editer le fichier hostgroups/windows_nrpe.cfg pour ajouter cette machine en tant que membre.
Finalement, relancer l’Arbiter de Shinken pour prendre en compte les changements.
1 |
/etc/init.d/shinken-arbiter restart |
Le résultat est le suivant
Bonjour, et avant tout merci pour ce tuto, j’ai néanmoins une question qui peut paraître bête mais où a-t-on le check_nt ?
Personnellement j’ai reussi à l’avoir sur un plugin de nagios que j’ai dc copié dans ma libexec de shinken « /var/lib/shinken/libexec ».
Par la suite de votre tuto, sur mon webUI j’ai l’erreur suivante : Warning: This plugin must be either run as root or setuid root. et après quelque recherche j’ai trouver une solution en changeant les droits mais cela n’a pas fonctionné, je n’arrête pas de chercher mais ne trouve rien pouvez vous m’aider ?
Bonjour, de souvenir j’ai uniquement téléchargé les nagios plugins (http://www.nagios.org/download/plugins). Check_nt fait partie du package. Il est ensuite possible de préciser à Shinken dans l’un de ces fichier de conf ou se trouve ces derniers.
Après avoir mis le check du package cela m’affiche la même erreur, Warning: This plugin must be either run as root or setuid root, et bien sûr j’ai remis les droits …
chmod u+s sur check_nt ça donne quoi?
Et bien j’ai une nouvelle erreur avec l’ancienne 🙂
NSClient – ERROR: Invalid password. sur le Charge disque C, et tjrs pareil Warning: This plugin must be either run as root or setuid root.
et avec un chown root:shinken également?
Après redémarrage oui tjrs le mm warning :/
Arf, il va falloir s’en remettre a Google car là je ne vois pas. Je n’ai pas rencontré cette erreur. Vous pouvez éventuellement essayer avec le paquet des dépôts si vous êtres sur une branche Debian. apt-get install nagios-plugins.
Bonjour suite à nos échanges j’avais reussi à faire des remontés de windows :/ maintenant j’ai voulu le faire passé en prod, bien que j’ai fait la mm install et procédure cela me marque une nouvelle erreur jamais vu jusque là « impossible d’obtenir l’information depuis le serveur »
./check_nt -H 192.168.0.xx -p 12489 -v CLIENTVERSION -s xxxxxxx
Pas de par-feu? Il faut se méfier avec le par-feu intégré de Windows et bien spécifier la règle à la main pour être sur que le port est bien en écoute. Je préconise un test avec un telnet par exemple ou nmap dans un premier temps.
effectivement c’était bien cela mais je n’ai pas reussi à avoir des remontés et donc j’ai repris mes notes du test et me suis reinstallé les plugins nagios ( apt-get install nagios-plugins-basic ) et cela m’a installé les mm repertoires pour les commandes à savoir /usr/lib/nagios/plugins/check_nt
j’ai donc refait votre tuto et quoi que je fasse j’ai Doing config check
[warn] full result is in /tmp/shinken_checkconfig_result … (warning).
[FAIL] ConfigCheck failed: Configuration is incorrect, sorry, I bail out … fai led!
failed!
A savoir je n’ai fait que du copié collé 🙂
Méfiance avec le copié collé. Il arrive que l’on embarque un formatage pourrit. Pensez à faire un test de votre configuration avec la commande « /usr/bin/shinken-arbiter -v -c /etc/shinken/shinken.cfg ». Le test permet de savoir quelle est la conf qui ne va pas. Il faut aussi que le path des plugins nagios soit bien renseigné dans resource.d/paths.cfg.
pas de soucis avec « /usr/bin/shinken-arbiter -v -c /etc/shinken/shinken.cfg »
# Nagios legacy macros
$USER1$=$NAGIOSPLUGINSDIR$
$NAGIOSPLUGINSDIR$=/usr/lib/nagios/plugins
#– Location of the plugins for Shinken
$PLUGINSDIR$=/var/lib/shinken/libexec
j’ai laisser le tout par defaut :/
dès que je mets le hostgroup tout deconne ^^
bon et bien note final 🙂 cela fonctionne à pas me demander pourquoi mais cela fonctionne ! 🙂
\0/
Bonsoir,
plutôt NSClient++ ou alors par WMi checked ? Je l’ai fait par Wmi et ca me semble moins bien … As tu essayé les 2 possibilités ?
Merci
Uniquement NSClient++ en ce qui me concerne.
ok j’essaye avec NSClient++ pour voir sur d’autres serveurs que je n’ai pas encore ajoutés
Bonjour,
Comment obtenez-vous l’affichage de vos hosts tel que dans la dernière capture ?
J’utilise la webui2 et venant d’un vieux Nagios j’aimerai pour changer cela…
Cela m’a fait penser au couple thruk + mk live status ?
Merci par avance
Mon billet date un peu. L’interface à probablement changée depuis. Mais sinon il s’agit de l’interface native de Shinken. Je vous recommande de voir mes autres billets sur le sujet au préalable.
Merci pour votre réponse.
Effectivement l’interface est passée à la webui2. Je vais voir si ce n’est pas seulement qu’un temps d’adaptation pour cette nouvelle interface…
Bonjour, Merci bcp pour le tuto, moi je suis un débutant dans ce demain de monitoring, je travail maintenant dans un projet de gestion de parc informatique en utilisant GLPI + shinken. avant de tester ce tuto j’ai une question qui peut paraître bête !! est ce qu’on peut faire des check comme check_disk , check_load directement sur nos machines windows sans utiliser NSclient++ ou WMI ??
Non je ne pense pas.
OK Merci bcp, Je vais suivre le tuto et je reviens vers toi 🙂
bonjour. Merci bien pour le tuto. c’est très intérressant. Mais j’ai un problème. j’ai suivi le tuto à la lettre mais a la fin je n’obtiens qu’un check sur le ping. je sais pas pourquoi ma machine cliente n’est pas bien intégré dans le host
Je suis désolé je n’ai pas vraiment le temps pour du support. Je vous recommande de tester que le plugin répond bien avec snmpwalk par exemple, vérifier que aucuns par-feu bloquent la communication, checker les logs, etc..
Tout marche presque a merveille. Mais je crois que mon problème se situe ici « address serveur_windows.domain.local » . et les logs ne me disent pas quelque chose. svp si vous pouvez expliquer comment marche l’adresse de l’hote j’en serai ravi. merci
Il faut remplacer serveur_windows.domain.local par l’IP du serveur cible bien entendu.