Comment suivre l'évolution de la configuration des agents Opérations Manager ?

On peut distinguer la configuration de vos machines de la configuration de Scom.

Si vous avez testé la preview d'advisor, vous avez du remarquer qu'il est possible de revoir l'historique de la  configuration de vos machines, exemple ici avec un serveur SQL dont le nombre de processeurs a changé et dont la configuration du moteur SQL a aussi changée:

La configuration de Scom se fait principalement par le tuning des management packs, ce tuning se traduit par un override que l'on retrouvera dans vos Management Packs d'overrides qu'il faut sauvegarder régulièrement.

Grace au script de Stefan Roth sur stefanroth.net, il est possible de retrouver ce que l'on appelle l'effective configuration de vos agents !

Je me suis inspiré de son script pour alimenter une base de données de nom EffectiveConfiguration.

Dans le script original, j'ai juste rajouté cela:

################################################################# 
# Change data for your connection String # 
################################################################# 
$Serveur="full2012R2.NABLA.LOCAL" # Change for your Server Name # 
$Database="EffectiveConfiguration" # Change for your Database Name # 
$Table="dbo.Configuration" # Change for your Table Name # 
################################################################# 
$SQLConnect = new-object system.data.sqlclient.sqlconnection 
$SQLConnect.connectionstring = "Server=$Serveur;database=$Database;trusted_connection=yes;" 

#For each data in array:
$i = 1
$Requete =""
#do {Write-Host $i; $i++}

while ($i -le $array.Count)
{$i
        $Requete = "INSERT INTO [dbo].[Configuration]([ServerName],[Class],[InstanceName],[RuleMonitor],[Enabled],[GeneratesAlert],[AlertSeverity],[AlertPriority],[AlertType],[AlertDescription],[Overriden],[Parameter1],[DefaultValue1],[EffectiveValue1],[Parameter2],[DefaultValue2],[EffectiveValue2],[Parameter3],[DefaultValue3],[EffectiveValue3],[Parameter4],[DefaultValue4],[EffectiveValue4],[DateAdded]) VALUES ('"+$array[$i].ServerName+"','"+$array[$i].class+"','"+$array[$i].InstanceName+"','"+$array[$i].RuleMonitor+"','"+$array[$i].Enabled+"','"+$array[$i].GeneratesAlert+"','"+$array[$i].AlertSeverity+"','"+$array[$i].AlertPriority+"','"+$array[$i].AlertType+"','"+$array[$i].AlertDescription+"','"+$array[$i].Overriden+"','"+$array[$i].Parameter1+"','"+$array[$i].DefaultValue1+"','"+$array[$i].EffectiveValue1+"','"+$array[$i].Parameter2+"','"+$array[$i].DefaultValue2+"','"+$array[$i].EffectiveValue2+"','"+$array[$i].Parameter3+"','"+$array[$i].DefaultValue3+"','"+$array[$i].EffectiveValue3+"','"+$array[$i].Parameter4+"','"+$array[$i].DefaultValue4+"','"+$array[$i].EffectiveValue4+"','"+$array[$i].DateAdded+"')"
  #$temporaire= $array[$i].class+"','"+$array[$i].InstanceName+"','"+$array[$i].RuleMonitor+"','"+$array[$i].GeneratesAlert+"','"+$array[$i].AlertSeverity+"','"+$array[$i].AlertPriority+"','"+$array[$i].AlertType+"','"+$array[$i].AlertDescription+"','"+$array[$i].Overriden+"','"+$array[$i].Parameter1+"','"+$array[$i].DefaultValue1+"','"+$array[$i].EffectiveValue1+"','"+$array[$i].Parameter2+"','"+$array[$i].DefaultValue2+"','"+$array[$i].EffectiveValue2+"','"+$array[$i].Parameter3+"','"+$array[$i].DefaultValue3+"','"+$array[$i].EffectiveValue3+"','"+$array[$i].Parameter4+"','"+$array[$i].DefaultValue4+"','"+$array[$i].EffectiveValue4+"','"+$array[$i].DateAdded+"')"
  
        Write-Host -ForegroundColor Green $Requete
        # End Connection String  
        $SQLConnect.Open() 
        $command = New-object system.data.sqlclient.SqlCommand  
        $command.connection = $SQLConnect 
        $command.commandtext = $Requete 
        $command.Executenonquery()  
   
        # Close Connection to SQL Server
        $SQLConnect.Close()
 $i++      
}
 

Ensuite, j'ai fait un rapport pour visionner la configuration de mes agents, faire des recherches selon différents critères et pour suivre la configuration.

La requête ressemble à ceci:

SELECT [ServerName] ,[Class] ,[InstanceName] ,[RuleMonitor] ,[Enabled] ,[GeneratesAlert] ,[AlertSeverity] ,[AlertPriority] ,[AlertType] ,[AlertDescription] ,[Overriden] ,[Parameter1] ,[DefaultValue1] ,[EffectiveValue1] ,[Parameter2] ,[DefaultValue2] ,[EffectiveValue2] ,[Parameter3] ,[DefaultValue3] ,[Parameter4] ,[DefaultValue4] ,[EffectiveValue4] ,[DateAdded] FROM [EffectiveConfiguration].[dbo].[Configuration] where [ServerName] in (@ServerName)and [Class] in (@Class)and [InstanceName] in (@InstanceName)and [RuleMonitor] in (@RuleMonitor)and enabled in (@Enabled)and DateAdded in (@DateAdded)and [GeneratesAlert] in (@GeneratesAlert)and [AlertSeverity] in (@Severity)and [AlertPriority] in (@Priority)and [AlertType] in (@Type)

 

Et voici ce à quoi cela ressemble dans la console de développement des rapports:

Ensuite il ne reste plus qu'à planifier le PowerShell toutes les semaines par exemple pour retrouver la configuration de tous mes agents, et à consulter le rapport lorsque j'en ai besoin !

Il s'agit d'un "proof of concept" et cela peut bien entendu être adapté à vos besoins. Vous retrouverez le rapport .rdl en attachement.

EffectiveConfiguration.zip