Vous êtes ici:

Menu


Stacks Image 9724
Voici un petit tuto pour utiliser Powershell avec NSClient. Le but de cet article est de créer un plugin qui sera capable de vérifier la taille d'un dossier sur un serveur Windows. Nous utiliserons un script Powershell trouvé sur Reddit. Le serveur sera équipé de l'agent NSClient, il faudra le configurer pour l'adapter.

1 Le script powershell foldersize.ps1

Je n'ai pas la prétention de vous faire un cours de powershell, j'ai donc trouvé un script tout fait sur reddit que vous trouverez à cette adresse : https://www.reddit.com/r/nagios/comments/7slvok/checking_folder_size_on_windows_server_with/. Voici le fichier qu'il faudra compter dans le dossier scripts de l'agent NSClient.
$a1 = ""
$a2 = ""
$a3 = ""
if ($args.count -gt 0) { $a1 = $args[0] }
if ($args.count -gt 1) { $a2 = $args[1] }
if ($args.count -gt 2) { $a3 = $args[2] }
#write-host "Test arguments are: ($a1 ""$a2"" ""$a3"")"

$folderpath = $a1 -replace "\\","\\"

if(Test-Path -Path $a1 ) 
{

$size = (Get-ChildItem $a1 -recurse | Measure-Object -property length -sum) 
$size = ($size.sum / 1MB)
$foldersize = "{0:N2}" -f $size

}
else
{
write-host "Folder does not exist"
 exit 3
}


if ($size -le $a2) {
write-host "OK: Folder ""$folderpath"" size = $foldersize MB | FolderSize=$size;$a2;$a3"
exit 0
} 

if ($size -ge $a2 -AND $size -le  $a3) {
write-host "WARNING: Folder ""$folderpath"" size = $foldersize MB | FolderSize=$size;$a2;$a3"
exit 1
} 


if ($size -ge $a3 ) {
write-host "CRITICAL: Folder ""$folderpath"" size = $foldersize MB | FolderSize=$size;$a2;$a3"
exit 2
} 

write-host "unknown error"
exit 3
Le programme est tout simple, il comprend deux paramètres de seuil warning et critique. L'unité est le Mo. Dans l'exemple suivant, nous testons le dossier WSUS sur un serveur Windows.
Stacks Image 37214

2 Configuration de l'Agent NSClient

Modifions la configuration de l'agent NSClient pour accepter le script powershell. Editez le fichier nsclient.ini et ajoutez la ligne suivante dans la section [/settings/external scripts/scripts]
check_folder =  cmd /c echo scripts\foldersize.ps1 $ARG1$ $ARG2$ $ARG3$ ; exit($lastexitcode) | powershell.exe -command -
Redémarrez NSClient.

2.1 Test de la commande

Vous pouvez tester la commande en ligne de commande sur le serveur Centreon.
[root@almalinux ~]# su - centreon-engine
Dernière connexion : lundi 12 juillet 2021 à 08:41:17 CEST sur pts/0
[centreon-engine@almalinux ~]$ /usr/lib64/nagios/plugins/check_centreon_nrpe3 -H 192.168.1.235 -p 5666 -t 30 -u -2 -P 8192 -c check_folder -a "c:\wsus 1500 2000"
WARNING: Folder "c:\\wsus" size = 1677,32 MB | FolderSize=1677.32405662537;1500;2000

3 Configuration dans Centreon

Nous terminerons avec la configuration de Centreon

3.1 Création de la commande

Pas la peine de réinventez la roue, nous prenons pour exemple une commande pour NRPE OS-Windows-NRPE-checkfolder.
Stacks Image 37222
La ligne de commande
$USER1$/$_HOSTNRPECLIENT$ -H $HOSTADDRESS$ -p $_HOSTNRPEPORT$ -t $_HOSTNRPETIMEOUT$ $_HOSTNRPEEXTRAOPTIONS$ -c check_folder -a "$_SERVICEFOLDER$" "$_SERVICEWARNING$" "$_SERVICECRITICAL$" $_SERVICEEXTRAOPTIONS$

3.2 Création du modèle

Nous utiliserons un modèle de service pour éventuellement l'associer à un modèle d'hôte. Ce modèle s'appellera OS-Windows-checkfolder-NRPE-custom, il s'appuiera sur le modèle de service generic-active-service-custom.
Stacks Image 37229

3.3 Création du service

Il nous reste à utiliser ce modèle pour notre serveur Windows SUS. Ne pas oublier de protéger les anti-slash par un deuxième anti-slash et ceci pour tout les anti-slash compris dans le chemin.
Stacks Image 37234
Stacks Image 37237
Gestion des anti-slash dans l'IHM de Centreon
Il est important de protéger les anti-slash pour éviter ce genre d'erreur.
erreur-slash01
Le plugin renvoie une erreur alors que ce dossier existe bien.

erreur-slash02
Après application de la configuration, admirez le résultat.
Stacks Image 37187

4 Amélioration du script

Pour éviter les caractères indésirables, j'ai modifié le formatage de la variable $foldersize
Stacks Image 37246
$foldersize = "{0:f2}" -f $size
Le résultat est plus propre.
Stacks Image 37251
C'est fini, vous avez appris comment intégrer un script powershell dans NSClient pour réaliser un plugin.
comments powered by Disqus
 Vous êtes ici:

Nous utilisons des cookies pour nous permettre de mieux comprendre comment le site est utilisé. En continuant à utiliser ce site, vous acceptez cette politique.