Garder un historique des logs cluster

Quand il arrive un incident sur un cluster, la majeure partie des informations nécessaires à l’explication se trouve dans les cluster logs. Cependant, il est fréquent que la période intéressante ne soit pas couverte par le cluster log. Pour pallier à ce désagrément, il est possible de créer une tâche programmée qui génèrera les cluster logs tous les jours, couvrant les dernières 24 heures.

De cette manière, si un incident arrive vous aurez toujours à votre disposition un historique de plusieurs semaines, voire de plusieurs mois en fonction de la quantité d’information que vous désirez garder.

Voici comment il est possible de s’y prendre.

1. Importer le script powershell ci-dessous dans le répertoire de votre choix (par exemple C:\Temp\ClusterLogs) sur un des nœuds du cluster

#####################################################################################

#

# ClusterLogCollector.ps1

# version 2.0

# Serge Gourraud

#

# This collects cluster logs and rename them according to the date

# - It must be run under administrator

# - It must be run a on a node of the cluster

#

# Versions

#

# v2.0 : Accept arguments

# v1.1 : Add 5 minutes to the 24h to make sure we don't lose a few lines

# v1.0 : First draft

#

# Incoming version 2.1 : Include diagnostics started with the –verbose switch

#

#####################################################################################

       #

       # Checking arguments

       #

       param ([ string ]$Repository = "c:\temp",

[ int ]$History = 24,

[ string ]$Logfile = "Logging.txt",

[switch]$verbose = $false )

       if ($Repository[- 1 ] - eq "\" ){

              $LoggingFile = $Repository + $Logfile

       }else {

              $LoggingFile = $Repository + "\" + $Logfile}

      

       #

       # Adding 5 minutes to timespan to make sure we don't lose any data

       #

       $TimeSpan = $History* 60 + 5

       import-Module FailoverClusters

       $ClusterLogCollection = Get-ClusterLog - Destination $Repository - TimeSpan $TimeSpan

      

       #

       # Get the current Date and Time

       #

       $Now = Get-Date

       $strDateNow = [ string ]$Now. Year + "-" + $Now. Month + "-" + $Now. Day + "-" `

+ $Now. Hour + "h" + $Now. Minute

       #

       # Rename each item

       #

       if ($ClusterLogCollection. count - gt 0 )

       {

              $strDateNow >> $LoggingFile

              "Tracing for " + [ string ]$History + " hours" >> $LoggingFile

              #

              # Renaming items

              #

              foreach ($ClusterLog in $ClusterLogCollection)

              {

                     $strDirectory = $ClusterLog. DirectoryName

                     $strName = $ClusterLog. Name

                     $strFullName = $ClusterLog. FullName

                     $strNewName = $strDateNow + "_" + $strName

                     Rename-Item - Path $strFullName - NewName $strNewName

                     $strNewName + " generated" >> $LoggingFile

              }

}

       else

       {

              "Failed to collect cluster logs today" >> $LoggingFile

       }

 

Ce script accepte quatre arguments :

- Le répertoire ou stocker les logs

- La quantité d’infirmation à relever en heures

- Un fichier de log qui enregistre l’exécution des relevés

- Une option « verbose » non utilisée dans la version actuelle

2. Ensuite, autoriser l’exécution de scripts Powershell sur le serveur. Dans l’exemple nous choisissons la stratégie « Unrestricted », mais il est possible d’affiner d’avantage. Pour cela, se référer à l’aide en ligne de la commande Set-ExecutionPolicy.

image001

3. Enfin créer une tâche planifiée qui lancera le script :

a. Lancer le Task Scheduler.

image002

b. Dans le « Task Scheduler », créer une « Basic Task ».

image003

c. Dans le menu « Create a Basic Task », entrer le nom de la tâche et une description qui permettent de l’identifier aisément, puis cliquer sur « Next ».

image004

d. Dans le menu « Task Trigger », choisir une tâche journalière puis cliquer sur « Next ».

image005

e. Dans le menu « Daily », choisir la fréquence et l’heure à laquelle tournera la première instance, puis cliquer sur « Next ».

image006

f. Dans le menu « Action », choisir l’action « Start a program » puis cliquer sur « Next ».

image007

g. Dans le menu « Start a Program » entrer le moteur de script « Powershell.exe » dans la case « Program/Script », et dans la case « Add arguments (optional) » entrer les arguments de façons à ce que le script soit lancé avec les options qui vous intéressent, puis cliquer sur « Next ».

Par exemple :

C:\Temp\ClusterLogs\ClusterLogCollector.ps1 -r C:\Temp\ClusterLogs -h 24 -l Logging.log

image008

h. Dans le menu « Summary », cocher la case « Open the Properties dialog for this task when I click Finish », puis cliquer sur « Finish ».

image009

i. Dans l’onglet « General », prendre soin de faire en sorte que :

i. La tâche soit exécutée même si personne n’est loguée

ii. La tâche soit exécutée sous privilèges élevés

iii. La tâche soir configurée pour Windows® 7, Windows ServerTM 2008 R2

image010

j. Dans l’onglet « Triggers », vérifier que tout est conforme aux options choisies précédemment

image011

k. Faites de même pour les onglets « Actions » et « Conditions »

image012

image013

l. Dans l’onglet « Settings », vérifier que les paramètres correspondent à votre environnement. La valeur de timeout par défaut est de 6h et pourrait être justifiée en fonction des autres tâches qui tournent, du nombre de nœud dans le cluster et de la bande passante de chacun.

image014

m. Enfin, en cliquant sur « OK », vous devrez entrer vos credentials.

Conclusion

Au bout de quelques temps vous aurez l’inextinguible joie de découvrir un historique de cluster logs long comme le bras et dont le support est si friand !

image015

 

Serge Gourraud