Ce plugin Nagios vérifie la santé d’un serveur Hyper-V via un script PowerShell + NRPE (nsclient++):
- Exécute et récupère le résultat du scan BPA (Best Practice Analyzer)
- Vérifie que toutes les VM sont en cours d’exécution
- Vérifie qu’aucune VM n’a un état de fonctionnement autre que normal
Les états avertissements et critiques sont déclenchés par la somme des:
- Quantité d’alertes BPA
- Nombre de VM dans un état autre que sain
Certaines VM (modèles…) peuvent être ignorées via un argument
Un nouveau scan BPA est lancé à chaque exécution, mais le résultat n’est récupéré que la fois suivante (async) (prend trop de temps).
Les données de performances suivantes sont fournies:
- # VM arrêtées,
- # VM avec problème de santé,
- # Erreurs BPA
- # Avertissements BPA
Configuration testée
Linux:
- Centos 6.4 x64
- Nagios 3.4.4
- check_nrpe 2.13
- Centreon 2.4.2
Windows:
- Windows Server 2012 (nécessaire pour avoir le module PowerShell Hyper-V)
- nsclient++ 0.4.1 x64
Arguments du script
- excludeVM (séparées par des virgules)
- maxWarn (Avertissement si supérieur) (1 par défaut)
- maxError (Critique si supérieur) (5 par défaut)
maxWarn et maxCrit doivent être des entiers
Exemples d’utilisation
Exemple en exécution directe PowerShell:
PS C:Program FilesNSClient++scripts>. .lotp_check_hyper-v.ps1 WARNING: 'VM Not Running:'2 'VM issues:'0 BPA Error:1 BPA Warning:12|VM_Not_Running=2 VM_issues=0 BPA_Error=1 BPA_Warning=12 PS C:Program FilesNSClient++scripts>
Exécution NRPE:
[root~]# /usr/lib64/nagios/plugins/check_nrpe -H myMonitoredServer -n -c check_hyper-v WARNING: 'VM Not Running:'2 'VM issues:'0 BPA Error:1 BPA Warning:12|VM_Not_Running=2 VM_issues=0 BPA_Error=1 BPA_Warning=12 [root~]#
Installation:
Sur les Windows:
- Activer l’exécution de scripts PowerShell non signés : Set-ExecutionPolicy RemoteSigned
- copier le script dans C:Program FilesNSClient++scripts
- Ajouter dans le fichier nsclient.ini:
- [/settings/external scripts/wrapped scripts]
check_hyper-v=lotp_check_hyper-v.ps1 -excludeVM $ARG1$ -maxWarn $ARG2$ -maxError $ARG3$
- [/settings/external scripts/wrapped scripts]
Configuration:
Par exemple, sur Centreon, en ajoutant la commande:
$USER1$/check_nrpe -H $HOSTADDRESS$ -n -t 60 -c check_hyper-v -a $ARG1$ $ARG2$ $ARG3$
Téléchargement
Code source en direct:
# ====================================================================
# Ping a list of targets through NRPE
# Author: Mathieu Chateau - LOTP
# mail: mathieu.chateau@lotp.fr
# version 0.1
# ====================================================================
#
# Require Set-ExecutionPolicy RemoteSigned.. or sign this script with your PKI
#
# ============================================================
#
# Do not change anything behind that line!
#
param
(
[string]$targets,
[int]$maxWarn = 1,
[int]$maxError = 5
)
$output=""
$exitcode=2
$countOK=0
$countKO=0
$targetsArray=@()
$targetsArray=$targets -split(' ')
Remove-Job -Name * -Confirm:$false -Force
foreach($t in $targetsArray)
{
Start-Job -Name $t -ArgumentList $t -ScriptBlock {param($t);if(Test-Connection -ComputerName $t -Count 2 -Quiet -ErrorAction SilentlyContinue){return $true}else{return $false}} |Out-Null
}
while(Get-Job -State Running)
{
Start-Sleep -Milliseconds 500
}
foreach ($job in Get-Job)
{
$temp=Receive-Job -Name $job.Name
if($temp)
{
$countOK++
}
else
{
$countKO++
$output+=$job.Name+" - "
}
}
if ($countKO -gt $maxError)
{
$state="CRITICAL"
$exitcode=2
}
elseif ($countKO -gt $maxWarn)
{
$state="WARNING"
$exitcode=1
}
else
{
$state="OK"
$exitcode=0
}
$output=$state+":"+$countOK+" online"+" - "+$countKO+" offline - "+$output
$output+='|'
$output+="online="+$countOK+";"+$maxWarn+";"+$maxError+";"+" "
$output+="offline="+$countKO+";"+$maxWarn+";"+$maxError+";"
Write-Host $output
exit $exitcode
Bonjour,
Votre script fonctionne très bien en execution direct powershell.
Par contre coté Nagios, avec NRPE voici le retour :
CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.
Auriez-vous une idée sachant que dont_blame_nrpe=1
Merci d’avance
Bonjour,
Est-ce que d’autres appels fonctionnent via check_nrpe ?
Vérifiez dans le nsclient.ini du serveur Windows que vous avez bien:
[/settings/NRPE/server]
allow nasty characters = true
allow arguments=true
Le dontblame=1 c’est dans la config du nrpe linux. Le linux ne fait que client et n’a pas a être serveur nrpe pour ce scénario.
Bonjour,
Oui d’autres appels fonctionnent bien avec check_nrpe, car je check l’état de mes backups Veeam avec.
De plus, sans argument, le check_nrpe est ok :
[root@SRV-CENTREON plugins]# ./check_nrpe -H 172.17.10.21
I (0.4.3.88 2015-01-11) seem to be doing fine…
[root@SRV-CENTREON plugins]# ./check_nrpe -H 172.17.10.21 -n -c check_hyper-v
CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.
J’ai ajouté vos variables mais sans changements…
bonjour,
excellent script ca marche nickel
mais n’étant pas doué en powershell je voudrais savoir sur quel événement se base ce script?
quel journal lit ce code pour renvoyer les états des vm hyperv?
merci pour ces précisions
cordialement
Bonjour,
il génère un rapport BPA (outil des meilleures pratiques Microsoft) et lit le résultat, en complément de certains tests.
Bonjour,
Merci pour le script, j’ai un problème, je voudrais exclure plusieurs VM, et quand j’insère plusieurs VM dans centreon, exemple: « SRV1, SRV2 » SRV1,SRV2 SRV1;SRV2 etc…
Cela ne me comptabilise pas l’ensemble des VM insérées.
J’ai essayé de modifier le script .ps1 mais trop compliqué pour moi cela me créer d’autres bugs..
Comment puis-je faire ?
Ou bien supprimer « VM not running » qui ne m’est pas utile.
Merci
Bonjour,
Peut-on superviser une machine sans installer NSCLIENT sur la machine Windows ?
Cordialement,