PI Services

Le blog des collaborateurs de PI Services

Nagios XI – Exemple d’Auto-Discovery

 

La fonction de découverte de Nagios XI permet de scanner un réseau pour détecter les devices/hosts disponibles, de détecter leur OS et d’appliquer a l’issu, un template de supervision correspondant issu des plugins disponibles.

 

clip_image002

clip_image004

A partir de la page principale (Home Dashboard), sélectionner Run Auto- Discovery.

clip_image002[4]

Sélectionner New Auto-Discovery job

clip_image004[4]

Renseigner le champ Scan Target avec le réseau a scanner

Cliquer sur Show Advanced Options pour afficher les options ci-dessous

clip_image006

L’option OS Detection activée (On), permet une découverte du système d’exploitation

Cliquer Submit pour exécuter le job de découverte.

clip_image008

Laisser le job s’exécuter …

clip_image010

Dans l’exemple ci-dessus, 17 hosts ou devices ont été trouvés

clip_image012

Le champ Default Service permet d’appliquer à l’issu de l’assistant de découverte, des services à superviser. (None : Aucun service ; Common : des services standards ; All : Tout les services disponible)

Cliquer Next

clip_image013

Les hôtes découverts sont affichés.

Leur nom d’hôtes peut être spécifié dans le champ Host Name.

Les services à superviser à l’issu de l’assistant de découverte peuvent être activés/désactivés à ce niveau.

clip_image015

Par défaut les hôtes et leur services seront supervisés toutes les 5 minutes

En cas de problème détécté, le retry de ces vérifications sera effectué chaque minutes, 5 fois avant génération d’une alerte.

clip_image017

Dans l’exemple ci-dessus Aucune notification n’est envoyée.

clip_image019

Cette étape permet de préciser a quels groupes d’hotes et groupes de services appartiennent les nouveaux hôtes et services, et de quel hôte parent ils dépendent éventuellement. Cette configuration est a effectuer plutôt a posteriori de la découverte.

clip_image021

Cliquer Apply pour appliquer la configuration

clip_image023

La configuration est appliquée

clip_image024

image

Les vues d’hôtes et de services affiche a présent les hôtes et services appliqués.

Script – Deploiement Config Agent NSCP (Nagios)

 

Le script ci-dessous propose d’automatiser le déploiement du fichier de config de l’agent nscp (nsclient.ini) et de fichier de scripts/commandes associés.

Lien du script plus bas.

### SCRIPT DE DEPLOIEMENT DES SCRIPTS/ FICHIERS NSC VERS AGENT NSCP # Chemin du fichier du/des scripts a uploader vers le répertoire scripts de l'agent nsclient $SourceScript="D:\TEMP\SCRIPTS_TO_SEND\MyScript.ps1" # Chemin du fichier NSC Mis a jour, a transferer $SourceInifile="D:\TEMP\CONFIG_TO_SEND\nsclient.ini" #Chemin du repertoire et du sous repertoire Scripts de l'agent Nsclient $NSCProgPath="c$\Program Files\NSClient++" $NSCScriptsPath="c$\Program Files\NSClient++\Scripts" #Chemin du log $logdate=get-date -Format ddMMyyyy--HHmm $log="D:\TEMP\log_$logdate.txt" #Fonction de backup du fichier nsclient.ini Function backup-nscfile ($computer) { Try { copy-item "\\$computer\$NSCProgPath\nsclient.ini" -Destination "\\$computer\$NSCProgPath\nsclient.ini.bak" -ErrorAction Continue } Catch { write-host -BackgroundColor White -ForegroundColor red "Erreur lors de la sauvegarde du fichier nsclient.ini sur $computer" "Erreur lors de la sauvegarde du fichier nsclient.ini sur $computer" | Out-File $log -Append } } #Fonction de copie du nouveau fichier nsclient Function copy-nscfile ($computer) { Try { copy-item $SourceInifile -Destination "\\$computer\$NSCProgPath\" -Force -ErrorAction Continue } Catch { write-host -BackgroundColor White -ForegroundColor red "Erreur lors de la copie du nouveau fichier nsclient.ini sur $computer" "Erreur lors de la copie du nouveau fichier nsclient.ini sur $computer" | Out-File $log -Append } } #Fonction de copie du/des scripts Function copy-script ($computer) { Try { copy-item $SourceScript -Destination "\\$computer\$NSCScriptsPath\" -Force -ErrorAction Continue } Catch { write-host -BackgroundColor White -ForegroundColor red "Erreur lors de la copie du script sur $computer" "Erreur lors de la copie du script sur $computer" | Out-File $log -Append } } #Liste de machines cibles $computers=@("SERVER1";"SERVER2";"SERVER3";"SERVER4";"SERVER5") # Affichage du fichier nsc foreach ($computer in $computers) { #Horodatage $datetime=get-date "$datetime - $computer :" | Out-File $log -Append write-host -BackgroundColor White -ForegroundColor Blue "$computer :" ; if (!(Get-ChildItem -Path "\\$computer\$NSCProgPath\" -ErrorAction SilentlyContinue | Where-Object {$_.Name -eq "nsclient.ini"})) { Write-Host -BackgroundColor White -ForegroundColor Red "Le chemin vers le fichier de config nsclient.ini n'a pas été trouvé sur $computer" "Le chemin vers le fichier de config nsclient.ini n'a pas été trouvé sur $computer" | Out-File $log -Append } Else { write-host -BackgroundColor White -ForegroundColor Blue "copie du fichier de script ..." copy-script -computer $computer write-host -BackgroundColor White -ForegroundColor Blue "backup et remplacement du fichier nsclient.ini..." backup-nscfile -computer $computer copy-nscfile -computer $computer write-host -BackgroundColor White -ForegroundColor Blue "Redemarrage du service nscp..." Get-Service -Name nscp -ComputerName $computer | Restart-Service } }

 

Orchestrator – Requête du dernier status de tout les runbooks

Cette requête SQL affiche le dernier status d’exécution de tout les runbooks d’une instance, triés par dernière date d’exécution.

--***REQUETES DES DERNIERS STATUS D'EXECUTION DE TOUT LES RUNBOOKS TRIES PAR DATE D'EXECUTION AVEC UN FILTRE SUR LE NOM DES RUNBOOKS ***/ --*** NB: Ajouter un critere sur RL.Name pour un job spécifique (ex: RL.Name = 'My_job') USE ORCHESTRATOR SELECT RL.Name as RunbookName, MAX(RI.CompletionTime)as dernieredate INTO TEMP_ALL_JOB_LAST_STATUS FROM [Orchestrator].[Microsoft.SystemCenter.Orchestrator.Runtime].RunbookInstances as RI INNER JOIN [Orchestrator].[Microsoft.SystemCenter.Orchestrator].Runbooks as RL ON RL.Id=RI.RunbookId WHERE ((RL.Name NOT LIKE '%OLD%') AND (RL.Name NOT LIKE '%TEST%')) GROUP BY RL.Name ORDER BY RL.Name; SELECT RunbookName, dernieredate as Derniere_date_Execution, RI.Status as Dernier_Status FROM [Orchestrator].[Microsoft.SystemCenter.Orchestrator.Runtime].RunbookInstances as RI INNER JOIN [Orchestrator].[Microsoft.SystemCenter.Orchestrator].Runbooks as RL ON RL.Id=RI.RunbookId INNER JOIN TEMP_ALL_JOB_LAST_STATUS ON TEMP_ALL_JOB_LAST_STATUS.RunbookName=RL.Name and dernieredate = RI.CompletionTime ORDER BY Derniere_date_Execution DESC GO DROP TABLE TEMP_ALL_JOB_LAST_STATUS

Script de rapport des erreur 500 sur IIS

 

Ce script génère un rapport texte des erreurs 500 en parsant les logs IIS d’une liste de serveurs. (Lien du script plus bas).

#SCRIPT REMONTANT LES OCCURENCES DES ERREURS '500' DANS LES LOGS IIS DE PLUSIEURS SERVEURS #INTERVALLE DE TEMPS PAR DEFAUT: Journée d'hier ($firstdate --> $date) #MODIFIER EN FONCTION, LE COMPTE UTILISE ($cred), LE CHEMIN DU RAPPORT ($rapport), LES NOMS DES SERVEURS ($FrontServers), LE CHEMIN DES LOGS ($Logpath) # #PAR DEFAUT L'INTERVALLE DE TEMPS EST CELUI DE LA JOURNEE DE LA VEILLE. $cred= Get-Credential -Credential "MYDOMAIN\" $rapport = "D:\Temp\error500.txt" $date = (get-date).Date $firstdate = (get-date).Date.AddDays(-1) $FrontServers=("SERVEUR1","SERVEUR2","SERVEUR3","SERVEUR4") $Logpath="c$\inetpub\logs\logfiles" $Header= "########### ERREURS 500 SUR LES FRONTAUX IIS ( $firstdate ---> $date ) ############## ######################################################################################################################" #suppression fichier rapport if (Test-Path $rapport) { Remove-Item $rapport } #ajout de l'entete au rapport $Header | Out-File -FilePath $rapport "" | Out-File -FilePath $rapport -Append "" | Out-File -FilePath $rapport -Append Function Get-Error500 ($Front,$cred) { #chaine 500 (!entourée de deux espaces!) $pattern=" 500 " New-PSDrive -Name "$Front`_drive" -Credential $cred -Root \\$Front\$Logpath -PSProvider FileSystem | Out-Null $logs= Get-ChildItem -Path "$Front`_drive:\*.log" -Recurse | Where-Object {$_.LastWriteTime -ge $firstdate -AND $_.LastWriteTime -lt $date} | Select-Object foreach ($log in $logs) { write-host -BackgroundColor White -ForegroundColor Blue "LOG: $log" "LOG: $log" | Out-File $rapport -Append "" | Out-File $rapport -Append get-content -Path $log | Select-String -Pattern $pattern | Select-Object -Property Line | Out-File $rapport -Append } Remove-PSDrive -Name "$Front`_drive" -Force } foreach ($Front in $FrontServers) { Write-Host -ForegroundColor Yellow "----SERVEUR $Front---- :" "----SERVEUR $Front---- :" | Out-File -Append $rapport Get-Error500 -Front $Front -cred $cred Write-Host "" Write-Host "***************************************************************************************************************" Write-Host "" "" | Out-File -Append $rapport "***************************************************************************************************************" | Out-File -Append $rapport "" | Out-File -Append $rapport }

 

Disponibilité de Nagios XI 5

 

Depuis début octobre, la version 5 de Nagios XI est disponible.

Fort d’une communauté historique issue de la version Core et d’une énorme base de plugins, cette version propose les évolutions suivantes:

- De nouveaux assistants pour le déploiement des objets et des configurations.

- Des nouveaux templates de supervision.

- Une meilleur interaction avec les systèmes environnants

- Une nouvelle API

- Une amélioration du support de l’internationalisation

- Un système de notification mail amélioré

 

Pour plus de détails:

https://www.nagios.com/xi5/

Nagios – NRPE: Exemple de supervision AD

 

L’exemple suivant montre l’utilisation du plugin check_nrpe avec un script vbs check_ad.vbs pour la supervision des principaux services Active Directory. (NB: Le script check_ad parse la sortie de dcdiag.exe pour déterminer des états)

Prérequis:

      • Sur le serveur Nagios: Serveur NRPE actif
        • Sur le contrôleur de domaine cible: utilitaire dcdiag.exe ; Agent NSCP actif ; NRPE Server activé dans le fichier nsclient.ini (NRPEServer = 1)
               
      Le script utilisé est disponible sur le lien

https://exchange.nagios.org/components/com_mtree/attachment.php?link_id=2332&cf_id=241/

      on copie le script en tant que check_ad.vbs, dans le dossier des scripts de l’agent nscp (par défaut “C:\Program Files\NSClient++\scripts”

2/

    on indique dans le fichier de configuration nsclient.ini l’alias et le chemin correspondant de la manière suivante

; A list of scripts available to run from the CheckExternalScripts module. Syntax is: <command>=<script> <arguments>
[/settings/external scripts/scripts]

check_ad=cscript.exe //Nologo scripts\\check_ad.vbs

 

3/ on redémarre le service NSClient++

 

4/ Sur le serveur Nagios depuis le répertoire des plugins contenant check_nrpe, on teste la commande:   ./check_nrpe -H 192.168.0.55 -c check_ad

 

5/ Définition de la commande dans le fichier command.cfg

#####################################
### COMMANDES VIA CHECK_NRPE #######

# 'check_ad' command definition
define command{
        command_name    check_ad
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_ad
        }

 

6/ Création du service correspondant dans le fichier contenant les definitions de services:

define service{
        use                             local-service
        host_name                       homeserv1
        service_description             AD DCDIAG Result
        check_command                   check_ad

 

 

7/ Le résultat après quelques secondes dans l’affichage d’état du contrôleur de domaine concerné:

image

Script Powershell – Nagios: Alimentation de fichiers d’hôtes

 

Le script suivant:

- interroge l’AD pour récupérer une liste des machines serveurs à superviser

- Détermine si la machine est reconnu (DNS)

- Détermine si la machine répond au ping

- Détermine si la machine héberge le client NSClient++ (NSCP)

- Sur la base de ces infos, des fichiers de config d’hôtes sont construit, une archive du jour (tar.gz) des fichiers à remplacer est créé dans le même répertoire. Les fichiers de conf sont ensuite envoyés par FTP dans le répertoire « /usr/local/nagios/etc/objects/HOME/HOSTS/ » du serveur nagios.

Le demon nagios est redémarré à la suite.

 

 

SCOM - Savision: Dashboard gratuit

 

Savision, éditeur spécialisé dans le développement de solution de maps et dashboard pour System Center et VMWare, fourni une version gratuite de Dashboard by Savision.

https://www.savision.com/scom-dashboards

L’idée est de regrouper sous forme de dashboard a la sauce HTML5 les infos d’état et de performance des objets scom et d’avoir une solution modulaire et extensible de dashboards.

De plus, l’affichage est compatible pour une utilisation sur mobile.

 

dashboard

Powershell – Exemple de transfert de données vers un système Unix

 

A la suite de la récupération d’un dataset issu d’une requête a une base sql on veut exporter et transférer les données vers un système Unix.

Comme indiqué dans le code, a la suite de la validation du fait que le résultat de la requête contienne des données (RequestSQL OK),  on converti le dataset en csv vers un fichier local ($FullLocalFile):

($DataSet.Tables[0] | convertto-csv -Delimiter ";" -NoTypeInformation)  | Out-File -FilePath $FullLocalFile

Puis on récupère le contenu du fichier pour ensuite le convertir au format UTF8 (au passage on écrase le fichier d’origine):

$content=get-content $FullLocalFile
Set-Content -value $content -Encoding UTF8 -Path $FullLocalFile –Force

Enfin on envoi en ftp le fichier vers le système Unix (en construisant dynamiquement le fichier de commande):

N.B: Il est possible que le mode de transfert (ascii ou binary) ait une influence sur le résultat du transfert. N’hésitez pas a tester les deux cas.

#construction fichier ftpcommands
New-Item -Path "$LocalDirectory\ftpcommands.txt" -ItemType file -Force -value `
"open monserverunix
user1
password
ascii
cd /monappli/data
lcd $LocalDirectory
mput $FileName
Y
bye"

#Envoi FTP et verification
ftp.exe -s:$LocalDirectory\ftpcommands.txt > "$LocalDirectory\resultatftp.txt"

(...)

#suppression du fichier ftpcommands
Remove-Item -Path "$LocalDirectory\ftpcommands.txt"
Remove-Item -Path "$LocalDirectory\resultatftp.txt"

 

$LocalDirectory="D:\Data" $FileName="data.csv" $FullLocalFile="$LocalDirectory\$FileName" (...) #Si le dataset est vide => Echec de la requête => $RequestSuccess=$false If (($DataSet.Tables[0] | Measure-Object).count -eq "0") { $RequestSuccess=$false write-host -ForegroundColor blue "Dataset vide - FIN DU SCRIPT" Exit } Else { $RequestSuccess=$true write-host -ForegroundColor green "RequestSQL OK" #Export du fichier CSV en local ($DataSet.Tables[0] | convertto-csv -Delimiter ";" -NoTypeInformation) | Out-File -FilePath $FullLocalFile #Recuperation du contenu et conversion en UTF8 pour compatibilité Unix $content=get-content $FullLocalFile Set-Content -value $content -Encoding UTF8 -Path $FullLocalFile -Force } #construction fichier ftpcommands New-Item -Path "$LocalDirectory\ftpcommands.txt" -ItemType file -Force -value ` "open monserverunix user1 password ascii cd /monappli/data lcd $LocalDirectory mput $FileName Y bye" #Envoi FTP et verification ftp.exe -s:$LocalDirectory\ftpcommands.txt > "$LocalDirectory\resultatftp.txt" (...) #suppression du fichier ftpcommands Remove-Item -Path "$LocalDirectory\ftpcommands.txt" Remove-Item -Path "$LocalDirectory\resultatftp.txt"

Powershell – Script – Suppression création de compteur de performance

 

Il peut être nécessaire dans le cas d’un script insérant des données de performance de supprimer/recréer l’objet de performance

L’exemple ci-dessous montre la suppression ré-création d’un objet MyObject et d’un compteur de performance Mycounter1.

On vérifie l’existence de l’objet de performance via wmi et l’objet .net [Diagnostics.PerformanceCounterCategory]

On supprime MyObject

On recrée l’objet et son compteur  via Diagnostics.CounterCreationDataCollection et Diagnostics.CounterCreationData

On soumet la création de l’objet “global” via [Diagnostics.PerformanceCounterCategory]

Le compteur peut a partir de là être alimenté et interrogé.

 

if((Get-WmiObject -Query "Select * from Win32_perfformatteddata_MyObject_MyObject").MyCounter1 -eq 0 ` -OR (Get-WmiObject -Query "Select * from Win32_perfformatteddata_MyObject_MyObject").MyCounter1 -eq $null ` -AND [Diagnostics.PerformanceCounterCategory]::Exists(“MyObject”)) { write-host "Suppression et re-creation de l'objet de performance MyObject" #Suppression [Diagnostics.PerformanceCounterCategory]::Delete(“MyObject”); #Creation de l'objet de perf $script:cntrColl = New-Object Diagnostics.CounterCreationDataCollection; Write-Host "Add counter 1"; $counter = New-Object Diagnostics.CounterCreationData; $counter.CounterName = "Mycounter1"; $counter.CounterHelp = "Help for Counter_1"; $counter.CounterType = [Diagnostics.PerformanceCounterType]::NumberOfItems64; $script:cntrColl.Add($counter); #Ajout du compteur Write-Host "Ajout du compteur a PerfMon"; [Diagnostics.PerformanceCounterCategory]::Create(“MyObject”, “My counter”, $script:cntrColl); }