Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

SCCM 2012 – Un déploiement s’exécute en boucle / L’agent se réinstalle toutes les 5h

 

Après le déploiement d’une tâche de reboot via SCCM (un simple de shutdown /r à intervalle planifiée sur une collection de serveurs), je me suis rendu compte que quelques serveurs rebootaient en boucle toutes les 5h.

Après mal de questionnement et d’analyse de log, je me suis aperçu que l’agent SCCM se réinstallait à la même fréquence, ce qui expliquait la répétition de la tâche de reboot étant donné son paramétrage assez « souple » (pas de maintenance window…).

Restait à identifier la raison de cette réinstallation… Ni les logs, ni la console SCCM ne contenaient d’information utile.

Pire, même en désactivant le service de l’agent (bloquant ainsi toute communication avec le serveur), il continuait à se réinstaller (et donc à se réactiver) !

La solution est finalement venue comme souvent d’une recherche sur internet, après avoir trouvé les bons mots-clés… Et le coupable s’avère être une tâche planifiée créée par CCMSETUP lors du premier déploiement de l’agent SCCM, dans le dossier Microsoft/Configuration Manager/Microsoft/Configuration Manager (oui, deux fois !) :

clip_image001

Cette dernière est paramétrée pour se relancer toutes les 5h et sert normalement lorsque CCMSETUP n’arrive pas à contacter le serveur SCCM, afin de reprendre le déploiement de l’agent ultérieurement.

Sauf que pour une raison quelconque (la répétition de l’arborescence Microsoft/Configuration Manager) peut faire penser à un bug qui créerait la tâche au mauvais endroit), il arrive que cette tâche planifiée ne soit jamais supprimée, et l’agent se réinstalle donc en boucle indéfiniment…

La solution est alors toute trouvée : il suffit de supprimer (ou au minimum de désactiver) cette tâche planifiée et tout rentre dans l’ordre!

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=getdate Format ddMMyyyyHHmm $log=« D:\TEMP\log_$logdate.txt«  #Fonction de backup du fichier nsclient.ini Function backupnscfile ($computer) { Try { copyitem « \\$computer\$NSCProgPath\nsclient.ini«  Destination « \\$computer\$NSCProgPath\nsclient.ini.bak«  ErrorAction Continue } Catch { writehost 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 copynscfile ($computer) { Try { copyitem $SourceInifile Destination « \\$computer\$NSCProgPath\«  Force ErrorAction Continue } Catch { writehost 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 copyscript ($computer) { Try { copyitem $SourceScript Destination « \\$computer\$NSCScriptsPath\«  Force ErrorAction Continue } Catch { writehost 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=getdate « $datetime – $computer :«  | Out-File $log Append writehost BackgroundColor White ForegroundColor Blue « $computer :«  ; if (!(GetChildItem Path « \\$computer\$NSCProgPath\«  ErrorAction SilentlyContinue | WhereObject {$_.Name -eq « nsclient.ini« })) { WriteHost 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 { writehost BackgroundColor White ForegroundColor Blue « copie du fichier de script …«  copyscript computer $computer writehost BackgroundColor White ForegroundColor Blue « backup et remplacement du fichier nsclient.ini…«  backupnscfile computer $computer copynscfile computer $computer writehost BackgroundColor White ForegroundColor Blue « Redemarrage du service nscp…«  GetService Name nscp ComputerName $computer | RestartService } }