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.
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 = 1�677,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.
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.
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.
Il est important de protéger les anti-slash pour éviter ce genre d'erreur.
Le plugin renvoie une erreur alors que ce dossier existe bien.
Après application de la configuration, admirez le résultat.
4 Amélioration du script
Pour éviter les caractères indésirables, j'ai modifié le formatage de la variable $foldersize
$foldersize = "{0:f2}" -f $size
Le résultat est plus propre.
C'est fini, vous avez appris comment intégrer un script powershell dans NSClient pour réaliser un plugin.