PI Services

Le blog des collaborateurs de PI Services

SCOM et alertes WMI: Script de redémarrage du service wmi et de ses dépendances

 

Le script suivant récupère les alertes ouvertes pour une machine, qui correspondent a des erreurs de requetage wmi. Si il en trouve au moins une dont le repeatcount est supérieur a une valeur donnée en variable, il redémarre le service wmi et ses dépendances et clos les alertes correspondantes.

   1:  
   2: $scomms="scom2k12sp1srv1"
   3: $targetcomputer="scom2k12sp1dc1"
   4: $repeatcountthreshold="1"
   5: $wmi="WinMgmt"
   6:  
   7: $scomcred=Get-Credential -Credential "scom2k12sp1maq1\administrator"
   8: $arrwmialerts=@(“Operations Manager failed to run a WMI query","Workflow Initialization: Failed to start a workflow that queries WMI for performance data","Workflow Initialization: Failed to start a workflow that queries WMI for WMI events","Operations Manager failed to run a WMI query for WMI events",
   9: "Operations Manager failed to run a performance data WMI query","Workflow Initialization: Failed to start a workflow that queries WMI","Script Based Test Failed to Complete")
  10:  
  11: Import-Module operationsmanager
  12:  
  13: New-SCOMManagementGroupConnection -ComputerName $scomms -Credential $scomcred
  14:  
  15: $arrcomputernewalertnames=Get-SCOMAlert | Where-Object {$_.Resolutionstate -eq "0" -and $_.NetbiosComputerName -eq $targetcomputer -and $_.RepeatCount -gt $repeatcountthreshold -and $_.IsMonitorAlert -eq $false } | Select-Object -Property name -ExpandProperty name
  16: $arrcomputernewalerts=Get-SCOMAlert | Where-Object {$_.Resolutionstate -eq "0" -and $_.NetbiosComputerName -eq $targetcomputer -and $_.RepeatCount -gt $repeatcountthreshold -and $_.IsMonitorAlert -eq $false }
  17:  
  18:  
  19:  
  20: $matchingalerts=0
  21: foreach ($wmialert in $arrwmialerts)
  22: {
  23:   if ($arrcomputernewalertnames -contains $wmialert)
  24:     {
  25:     Write-Host -ForegroundColor Red -BackgroundColor White "L'alerte "$wmialert.ToUpper()" a été répétée plus de $repeatcountthreshold fois sur $targetcomputer"
  26:     Write-Host -ForegroundColor Yellow "Fermeture de l'alerte "$wmialert.ToUpper()" avant redemarrage du service $wmi et de ses dependances"
  27:     $matchingalerts= ($matchingalerts + 1)
  28:     $arrcomputernewalerts | Where-Object {$_.Name -like "$wmialert*"} | foreach {Set-SCOMAlert -ResolutionState 255 -Alert $_ }
  29:     }
  30: }
  31:  
  32:  
  33: ###FUNCTIONS###
  34: Function Restart-Wmi ($targetcomputer)
  35: {
  36: Invoke-Command -ComputerName $targetcomputer -Credential $scomcred -ScriptBlock {
  37: $winmgmt=Get-Service -Name Winmgmt
  38: $winmgmtrundep=$winmgmt.DependentServices | Where-Object {$_.Status -eq "Running"}
  39: Stop-Service -Name Winmgmt -Force -ErrorAction SilentlyContinue
  40: Start-Sleep -Seconds 5
  41: Start-Service -Name Winmgmt -ErrorAction silentlycontinue
  42: Start-Sleep -Seconds 5
  43:  
  44: foreach ($dep in $winmgmtrundep) 
  45:     {
  46:     if (Get-WmiObject win32_service | Where-Object {$_.Name -eq $dep.Name -AND $_.state -ne "running" -AND $_.startmode -eq "Auto"}) 
  47:         {
  48:         write-host -ForegroundColor Green "demarrage de la dependance "$dep.Name.ToUpper()""
  49:         Start-Service -Name $dep.Name -erroraction SilentlyContinue -ErrorVariable ("start_"+$dep.Name+"_error").ToString()
  50:         }
  51:     }
  52:  
  53: }
  54: }
  55:  
  56:  
  57: Function NewEventSource
  58: {
  59:     if(!(Test-Path 'HKLM:\SYSTEM\CurrentControlSet\services\eventlog\Operations Manager\RestartWMIScript'))
  60:     {
  61:     New-EventLog -LogName "Operations Manager" -Source RestartWMIScript
  62:     }
  63: }
  64: ###FUNCTIONS###
  65:  
  66:  
  67:  
  68:  
  69:  
  70:  
  71: if ($matchingalerts -gt 0)
  72: {
  73: write-host -ForegroundColor Yellow "Redemarrage du service WinMgmt et de ses dependances"
  74: Restart-Wmi $targetcomputer
  75: }
  76: else
  77: {
  78: write-host -ForegroundColor Green "Pas d'alertes correspondantes trouvées"
  79: Write-Host -ForegroundColor Green "Pas de redemarrage du service WinMgmt et de ses dependances"
  80: exit
  81: }
  82:  
  83:  
  84:  
  85:  
  86:  
  87: ###VERIFICATION ET LOG D'ERREURS
  88:  
  89:  
  90: Invoke-Command -ComputerName $targetcomputer -Credential $scomcred -ScriptBlock {
  91: param($targetcomputer)
  92: $wmi=Get-Service -Name WinMgmt -ComputerName $targetcomputer
  93: if ($wmi.Status -ne "Running")
  94: {
  95: $function:NewEventSource
  96: Write-EventLog -LogName 'Operations Manager' -Source RestartWMIScript -EntryType Error -EventId 1002 -Message "erreur de demarrage du service winmgmt"
  97: }
  98:  
  99: } -Argumentlist $targetcomputer
 100:  
 101: ###VERIFICATION ET LOG D'ERREURS
 102:  
 103:  
 104:  

Reporting Services: InvalidReportLink

 

Dans certains cas un message d’erreur est renvoyé lors de l’exécution de rapports sous SQL Reporting Services faisant état d’un lien invalide:

image

Si vous ouvrez le même rapport directement depuis le site web de votre instance Reporting Services (Dans cet exemple un rapport sur les performances mémoire de Sharepoint), le message est effectivement le même.

image 

image

Pour corriger cela, ouvrez les propriétés du rapport, toujours sur le même site (Pas le fichier .rdpl, mais le fichier du même nom, qui n’a pas d’extension affiché) et sélectionnez Gérer.

image

image

A présent il faut cliquer sur Changer le lien. Vous pouvez vous referez a un environnement de test, de preprod, pour voir quel est le lien vers la définition du rapport (Dans cet exemple il s’agit d’un rapport issu de System Center Operations Manager. La majorité des rapports de performance sont rattaché a Microsoft.SystemCenter.Datawarehouse.Report.Performance).

Cliquez sur Changer le lien, sélectionnez la définition du rapport et cliquez OK

image

image

image

 

Le rapport a récupéré son lien. Cliquez Sur Appliquer.

image

 

Et il est a nouveau disponible a l’exécution:

image

SCOM – Orchestrator: Vidage automatique du cache de l’agent SCOM

Une des actions récurrentes pour régler certains problèmes d’exécution des règles/moniteurs de supervision consiste en le vidage du cache de données de l’agent SCOM.

Voici un exemple d’implémentation dans un runbook Orchestrator:

Au passage veillez a ranger vos runbook par thèmes et a les nommer de manière explicite

image

image

 

image

le runbook débute avec une activité “Initialize Data” mais cela pourrait être en réponse, par exemple a un évènement dans l’eventlog OperationsManager.”

“Initialize Data” permet de débuter un runbook en lui passant des paramètres de départ. Dans cet exemple, on ne passe aucun paramètre.

On arrête le service de l’agent Scom sur une machine:

imageimage

 

On vide le cache de l’agent (dossier …\System Center Operations Manager\Agent\Health Service State\Health Service Store) avec une activité de type Delete File dans l’integration Pack File Management

image

imageimage

 

La suite du workflow dépend des retours faits par l’activité de vidage du cache

Si le vidage retourne en état Failed (propriétés du lien vers “Vidage cache KO”) on affiche une erreur d’exécution dans la console Orchestrator

imageimage

imageimage

 

Si le vidage retourne en état Success on affiche un message d’information dans la console Orchestrator

image

Et dans tout les cas on redémarre a la suite le service de l’agent Scom:

imageimage

imageimage

SCOM – : Commandes Powershell pour positionner en masse un Failover Management Server

 

Il existe une méthode de l’objet powershell scom get-scomagent permettant de positionnez la failover management server vers lequel basculera vos agent en cas de crash de leur Primary Management Server.

Les commandes suivantes présentent la logique d’execution de ce positionnement:

On attribue a deux variables le Primary Management Server et le Failover Management Server

$primaryms=Get-SCOMManagementServer -Name "MyPrimaryServer1.home.com"

$failoverms=Get-SCOMManagementServer -Name "MyFailoverServer1.home.com"

On attribue a une variable tout les agents qui ont comme Primary Management Server le serveur "MyPrimaryServer1.home.com”

$agentstomove=Get-SCOMAgent | where-object {$_.primarymanagementservername -eq "MyPrimaryServer1.home.com”}

Vous pouvez vous assurez qu’aucun des agents ne possede un failover server érroné avec la commande suivante qui positionne cette valeur a Null

$agentstomove | foreach {Set-SCOMParentManagementServer -agent $_ -Failoverserver $null}

Enfin pour positionner le Failover Management Server.  Je vous conseille dans ce cas la de mettre l’option Verbose, surtout si le nombre d’agent a traiter est important afin de voir le résultat

$agentstomove | foreach {Set-SCOMParentManagementServer -agent $_ -Failoverserver $failoverms –verbose}

SCOM : Debug des échecs d’exécution de process et de requêtes wmi.

 

Les alertes “Workflow Runtime: Failed to run a process or script” ou “Workflow Runtime: Failed to run a WMI query” révèle un problème d’exécution d’une règle ou d’un moniteur.

1er cas: ce problème est ponctuel. Le champ repeat count de l’alerte est peu élevé et la dernière occurrence (champ Last Modified) n’est pas très récent:

Dans la plupart de ces cas, le workflow exécuté a l’origine de cette erreur n’a pas pu aboutir pour des problèmes ponctuels de performance ou de disponibilité de la machine cible. Vous pouvez essayez de faire le parallèle entre l’heure de l’alerte et les éventements présent dans les eventlog Application et Systeme de la machine cible.

2nd cas: Ce problème est récurrent. Le champ repeat count de l’alerte est élevé et la dernière occurrence (champ Last Modified) est récente: Cela signifie que le workflow concerné échoue systématiquement pour cette la machine cible.

Action:

Il est important de lire le champ Description de l'alerte pour voir plus de détail sur la commande ou la requête exécutée, le workflow impacté et la machine cible.

Exemples:

*************************************************************

Command executed: "C:\Windows\system32\cscript.exe" /nologo "IsHostingMSCS.vbs" {1C0CCF64-D32D-B64C-A66A-792E7F0934D6} {6E52A2D1-E55F-7E00-A150-D4CFAB747EFE} (…) (…)

Working Directory: C:\Program Files\System Center Operations Manager\Agent\Health Service State\Monitoring Host Temporary Files 2960\58276\

One or more workflows were affected by this.

Workflow name: System.Mom.BackwardCompatibility.Computer.IsHostingMSCS.Discovery

Instance name: Machine1.home.com

*************************************************************

***************************************************************

Object enumeration failed

Query: 'SELECT ServiceName, StartName, DisplayName FROM SqlService WHERE ServiceName="SQLAgent$REC_FR_CI_AS"'

HRESULT: 0x800706be

Details: The remote procedure call failed.

One or more workflows were affected by this.

Workflow name: Microsoft.SQLServer.2008.AgentDiscovery

Instance name: MSSQLSERVER

Instance ID: {6AD519E3-D3C0-7B1B-EE4A-92367A4CDCEC}

***************************************************************

 

Connectez vous sur la machine concernée par l’alerte

Pour les alertes concernant une erreur d’exécution d’un script, tentez d’exécutez dans une fenêtre de commande le script et les argument associés tel que la commande apparait dans le champ Description de l’alerte (Command Executed:…)

Les scripts de supervision des règles/moniteurs retourne dans la plupart des cas leurs données au format XML, ce qui signifie que le script a abouti a une transmission des données récoltées. Dans la cas contraire, le retour affiché par l’exécution de ce script peut être une erreur vbscript ou powershell lié au contenu du script lui-même.

 

Pour les alertes concernant une erreur d’exécution d’une requête wmi, vérifiez sur la machine que la requête wmi précisée dans le champ description de l'alerte (Query:…) peut être effectuée.

=> Utilisez wbemtest.exe présent nativement sur tout les OS Windows pour exécutez la requête wmi.

image

image

image

image

De plus le code situé apres “HRESULT” dans la description de l’alerte indique le type d’erreur wmi. ces types sont disponible sur le lien http://msdn.microsoft.com/en-us/library/aa394559%28v=vs.85%29.aspx

System Center Advisor : Supervision en ligne

 

System Center Advisor est un nouveau service de supervision proposé par la plate-forme cloud Azure, permettant de visualiser en ligne au travers de dashboards basés sur des composants graphiques Silverlight, l’état de santé des applications ci-dessous:

  • Windows Server 2008, 2008 R2 et 2012

  • Active Directory

  • Hyper-V

  • Windows operating system

  • SQL Server
  • SharePoint 2010 et supérieur
  • Exchange Server 2010 et supérieur
  • Lync Server 2010 et supérieur
    En pratique, les serveurs ci-dessus communique avec une ou plusieurs Gateways SCOM, elles même connecté a la plateforme System Center Advisor dans le cloud Azure.
    Ce service gratuit se configure a travers les étapes suivantes:
image

 

- Récupération en ligne des sources de la Gateway et des agents

- Installation de la Gateway et des agents sur le périmètre de supervision.

- Enregistrement de la Gateway et approbation des agents

- Configuration de Runas accounts (Pour Sharepoint et Lync)

 

L’interface de supervision en ligne permet de visualiser l'état des composants, les alertes générés…a travers plusieurs types de vues.

SCOM 2012 :Mise a jour MP Windows OS

 

Un management pack majeur, celui des OS Windows serveur, est passé en version 6.0.7026.0.

Cette mise a jour est disponible sur le lien http://www.microsoft.com/en-us/download/details.aspx?id=9296

Au menu:

  • Correction d’un bug empêchant parfois la collecte des compteurs de performance Processeur.
  • Ajout des règles de collecte de performance suivante:
  •        - Cluster Shared Volume - Free space / MB           
          - Cluster Shared Volume - Total size / MB           
          - Cluster Shared Volume - Free space / %           
          - Cluster Disk - Total size / MB           
          - Cluster Disk - Free space / MB           
          - Cluster Disk - Free space / %

 

  • Correction d’un bug empêchant la découverte des disques de cluster Windows 2008.
  • Correction d’un bug affichant une mauvaise decription d’alerte pour les moniteurs “Cluster Disk Free Space Percent” et “Cluster Disk Free Space MB” quand le nom du volume du disque de cluster est vide.
  • Ajout d’une règle générant une alerte lorsque les requêtes NTLM vers un serveurs dépasse un certain seuil.
  •  

SCOM – Erreur lors de l’Installation sur disques clusters

 

Lors de l’installation du premier serveur de management SCOM et des bases SQL sur un cluster, le popup d’erreur générique suivant peut apparaitre…:

“Setup is unable to create DB on SQL server_____. PLease make sure that the curret user has permissions to create DB on the SQL Server instance specified.”

.…et le message d’erreur suivant est susceptible d’être enregistré dans le log OpsMgrSetupWizard.log:

*********************************

Cannot use file (…)\SCOMINSTALLTESTDB_635031752016683857.mdf' for clustered server. Only formatted files on which the cluster resource of the server has a dependency can be used. Either the disk resource containing the file is not present in the cluster group or the cluster resource of the Sql Server does not have a dependency on it.

***********************************

Ce message fait référence a un problème documenté dans la KB suivante:

http://support.microsoft.com/kb/295732/en-us

En effet il est nécessaire que le/les volumes devant accueillir les bases SQL soient enregistré comme dépendance de la ressource cluster.

Vous pouvez vérifier les liens de dépendances de la ressource en effectuant un clic-droit sur la ressource SQL dans la console de gestion de cluster et en sélectionnant “Show Dependency Report

Pour rajouter le/les disques cibles en tant que dépendance de la ressource de cluster:

    • Ouvrez la console de gestion du cluster, faites un clic-droit sur la ressource SQL et sélectionner …Bring this ressource Offline
    • faites un clic-droit sur la ressource SQL Server, puis cliquez sur Propriétés.
    • Cliquez sur l'onglet dépendances . .
    • Cliquez sur Modifier pour ajouter le disque à la liste de dépendances pour cette ressource.
    • faites un clic-droit sur la ressource SQL et sélectionner …Bring this ressource Online
    Relancer l’installation de SCOM.

Orchestrator & System Center 2012 : Mise en place de l’intégration pack SCOM

 

Executez le package “System_Center_2012_Orchestrator_Integration_Packs.exe” disponible sur le site http://www.microsoft.com/en-us/download/details.aspx?id=28725

Depuis la console “Orchestrator Deployment Manager” faites un clic droit sur le noeud Integration Pack et selectionner Register IP with the Orchestrator

image

image

Cliquez Next

image

Cliquez Add

image

Sélectionnez l’integration pack de SCOM, précédemment extrait de l’archive

image

Cliquez Next

image

Cliquez Finish

image

Cliquez Accept

image

L’integration Pack apparait sous le noeud Integration Pack

image

Faites un clic-droit dessus et selectionnez Deploy IP to Runbook Server or Runbook Designer…

image 

Cliquez Next

image

Cochez L’integration pack de SCOM et cliquez Next

image

Ajoutez le nom du serveur Runbook Designer et cliquez Next

image

Cochez la seconde option pour ne pas stopper les Runbooks automatiquement et vous laisser la possibilité de redémarrer le serveur manuellement si nécessaire.

image

Cliquez Finish

image

Exécutez la console Runbook Designer

image

La boite a outil SC 2012 Operations Manager est disponible désormais dans la console.