NSClient++ : Exécuter des scripts PowerShell avec NRPE
Sommaire
I. Présentation
La supervision de serveurs Windows avec Centreon passe bien souvent par l'utilisation du SNMP et/ou du célèbre logiciel NSclient++ et qui agit comme un véritable agent de supervision, compatible avec les fonctions NSCA et NRPE. Bien qu'il intègre nativement différents modules dont check_nt pour vérifier l'usage du CPU, de la RAM, des disques, etc. Il peut s'avérer nécessaire de faire des vérifications plus poussées, plus personnalisées.
Par l'intermédiaire de NRPE (Nagios Remote PluginExecutor), nous allons pouvoir exécuter des scripts en local sur le serveur Windows et retourner les informations ensuite à Centreon. Dans ce tutoriel, nous allons voir comment configurer NRPE pour exécuter des scripts, dans ce cas PowerShell, mais ça fonctionne aussi avec d'autres langages (VBS, DOS, Python, etc.).
II. Configurer NRPE sur NSClient++
Nous partirons du principe que NSClient++ est déjà installé sur votre serveur, mais ce n'est pas sûr que le NRPE soit actif ! Tout dépend des options sélectionnées lors de l'installation.
Si vous procédez à l'installation, voici comment configurer NRPE (après tout dépend de la solution de supervision qui va interroger NRPE).
Il est tout à fait possible de revenir sur cette configuration ultérieurement. Celle-ci s'effectue dans le fichier nsclient.ini. Voici quelques indications :
Activer le serveur NRPE
NRPEServer = enabled
Activer l'exécution de scripts externes
CheckExternalScripts = enabled
Paramétrage du serveur NRPE
Les options de cette section sont à ajuster, selon si vous souhaitez utiliser un certificat ou non, de l'authentification ou non. La configuration la plus basique est :
[/settings/NRPE/server] ; Undocumented key verify mode = none ; Undocumented key insecure = true
Pour que la modification soit prise en compte, il faudra redémarrer le service mais avant cela nous allons poursuivre la configuration.
III. Ajouter un script PowerShell à NSClient++
Toujours dans le fichier nsclient.ini, on va déclarer les scripts externes que l'on souhaite utiliser. Dans mon exemple, ce sera le script PowerShell "check-dhcp-failover.ps1". Il est impératif de le stocker dans le répertoire "scripts" du dossier d'installation NSClient++.
Voici la ligne de code à inclure :
[/settings/external scripts/scripts] check-dhcp-failover = cmd /c echo scripts\check-dhcp-failover.ps1; exit($lastexitcode) | powershell.exe -command -
Le nom de la commande/plugin que l'on pourra utiliser dans NRPE est "check-dhcp-failover" et ensuite on indique le chemin vers le script.
Pour ajouter un autre script, il ne sera pas utile d'inclure la ligne "[/settings/external scripts/scripts]" mais seulement de déclarer un autre script sous le premier.
Maintenant, on redémarre le service pour prendre en compte les changements :
Restart-Service nscp
On va modifier la stratégie d'exécution des scripts PowerShell sur le serveur pour que ce soit autorisé :
Set-ExecutionPolicy Unrestricted
Pour finir, on va vérifier que ça fonctionne, on peut tester le script depuis le serveur directement, avant de passer sur le Centreon. On va ainsi valider une première étape grâce à la commande "nscp.exe test" suivie du nom de notre plug-in déclaré dans nsclient.ini.
cd C:\Program Files\NSClient++ nscp test check-dhcp-failover
La dernière commande saisie ci-dessus doit vous retourner l'état du check de votre script, c'est-à-dire l'état/la valeur qui sera envoyée à votre Centreon.
IV. Check_nrpe depuis Centreon
Depuis le serveur Centreon cette fois-ci, nous allons interroger NRPE à distance. Le script check_nrpe se trouve dans le dossier suivant :
/usr/lib64/nagios/plugins/
Si l'on exécute le script avec l'option -H et que l'on précise l'IP du serveur distant que l'on vient de configurer, on doit obtenir ceci :
./check_nrpe -H 192.168.1.50
Maintenant, on va exécuter directement notre plug-in personnalisé associé au script PowerShell. L'option "-c" sera utilisée, ce qui donne :
./check_nrpe -H 192.168.1.150 -c check-dhcp-failover
Si l'état est retourné, c'est tout bon ! Pour ma part, il s'agit d'un script qui vérifie l'état du DHCP notamment l'utilisation des étendues DHCP (scope) d'où le retour suivant :
Maintenant, à vous de jouer !
Article simple et efficace ! J’étais déjà tombé dessus plusieurs fois.
On remonte l’état via un write-output dans le script Powershell mais je rajouterai qu’on peut remonter des « performances data », ce qui est utile si on veut graph derrière.
Exemple : OK: Scope use is 55,05% | scope_use=55,05