Table de Matieres
I. Présentation
Au sein d’un tutoriel précédent, on avait vu comment exécuter des scripts PowerShell avec NRPE, je vous propose d’exploiter cette possibilité offerte par NSClient++ pour vérifier l’état de la synchronisation de votre serveur WSUS afin de l’intégrer à votre supervision.
Il est indispensable de s’assurer que son serveur WSUS synchronise correctement car sans cela, il ne va pas récupérer les dernières mises à jour auprès des serveurs Windows Update de Microsoft. Par conséquent, les mises à jour ne seront pas déployées auprès de vos clients.
Pour parvenir à cela, j’ai développé un script PowerShell qui récupère l’état de la synchronisation et qui retourne un état à la solution de supervision. En fonction de cet état, on peut générer une alerte si besoin. Cette solution s’appuie sur NSClient++ et NRPE.
II. Récupérer l’état de la synchronisation
Directement depuis le serveur WSUS, grâce à la commande « Get-WsusServer » on va pouvoir récupérer des informations sur l’état de la dernière synchronisation. En fait, il faut vérifier deux choses :
- L’état de la dernière synchronisation, elle doit être réussie
- La date de la dernière synchronisation, car la dernière peut être réussie mais elle peut dater de 10 jours, ce qui n’est pas normal
Grâce à la commande ci-dessous on va accéder à un ensemble de propriétés qui vont répondre à notre besoin :
(Get-WsusServer).GetSubscription().GetLastSynchronizationInfo()
En cas d’échec de synchronisation :
En cas de synchronisation réussie :
Ce sont les propriétés « Result » et « EndTime » que nous allons utiliser dans notre script.
III. Le script pour la vérification
Maintenant, il est temps de voir le script complet et que je vous fournisse quelques explications :
La variable $NumberOfDaysWithoutSync indique le nombre de jours sans synchronisation que l’on tolère. Par exemple, si la dernière synchronisation réussie remonte à plus de 7 jours, il y aura une alerte. Modifiez la valeur en fonction de vos besoins.
La variable $ExitCode retourne un code à NRPE qui sera ensuite renvoyé à votre solution de supervision. Si l’état est sur « 0 » alors c’est OK, si l’on retourne « 2 » c’est qu’il y a un problème de synchronisation.
Voici le code complet du script :
# Synopsys : Check status of WSUS Synchronization # Initial state $ExitCode = 0 # Variables $NumberOfDaysWithoutSync = 7 # Get the status of the last synchronization $WsusLastSyncOutput = (Get-WsusServer).GetSubscription().GetLastSynchronizationInfo() ## CHECK SYNC STATE # Normal state : Result = Succeeded if(!($WsusLastSyncOutput.Result -eq "Succeeded")) $ExitCode = 2 Write-Output "CRITICAL: The last sync $($WsusLastSyncOutput.EndTime) state is $($WsusLastSyncOutput.Result)" ## CHECK THE DATE OF THE LAST SYNC # Get the datetime of the last synchronization $WsusLastTimeOutput = (Get-WsusServer).GetSubscription().LastSynchronizationTime # Calculate the reference date $DateReference = (Get-Date).AddDays(-$NumberOfDaysWithoutSync) # If the last sync time is older than the calculate date (= date of the day - $NumberOfDaysWithoutSync) it's critical if($DateReference -gt $WsusLastTimeOutput) $ExitCode = 2 Write-Output "CRITICAL: Last sync is older than $NumberOfDaysWithoutSync days and his state is $($WsusLastSyncOutput.Result)" # Evaluate final exit code result for all passed checks. if ($ExitCode -eq 0) Write-Output "OK: The last sync $($WsusLastSyncOutput.EndTime) state is $($WsusLastSyncOutput.Result)" exit $ExitCode
Enregistrez ce bout de code dans un fichier et enregistrez-le dans le dossier « scripts » de NSClient++, par exemple avec le nom « Check-WsusSyncState.ps1« . Vous pouvez personnaliser les messages de retour si vous le souhaitez, ce sont les messages qui s’afficheront sur l’interface de votre solution de monitoring.
IV. Configuration de NSClient++ pour ajouter le script
Maintenant, on va intégrer ce script à NSClient++ pour que l’on puisse l’appeler depuis notre solution de supervision, Centreon par exemple. Editez le fichier de configuration NSClient.ini et ajoutez cette ligne sous le bloc « (/settings/external scripts/scripts)« . Pensez à vous référer à l’article mentionné au début de celui-ci pour la configuration de NRPE si nécessaire.
Sur la ligne ci-dessous, adaptez le nom de votre script PowerShell si nécessaire. Le premier terme, c’est à dire « Check-WsusSyncState » correspond au nom de la commande qu’il faudra appeler depuis Centréon, ensuite NSClient fait le lien entre ce nom de commande et le script à exécuter.
Check-WsusSyncState=cmd /c echo scripts\Check-WsusSyncState.ps1; exit($lastexitcode) | powershell.exe -command -
Pour finir, redémarrez le service NSClient++ pour prendre en compte cette nouvelle configuration.
V. Intégration à la supervision
En fonction de votre système de supervision, vous devrez ensuite effectuer la configuration pour appeler notre script via NRPE, votre commande de check ressemblera à ceci :
.\check_nrpe -H 192.168.1.150 -c Check-WsusSyncState
Lorsque tout sera prêt, vous allez obtenir un bel état de votre synchronisation WSUS dans votre Centréon (ou autre) :
Voilà, ce tutoriel est terminé ! Que pensez-vous de cette vérification ? Allez-vous l’implémenter ?