用語:
SCOM-フルネームの代わり。
アラートはアラートと同じです。 ロシア語には単に良い類似物はありません。
はじめに
SCOMでは、他の多くの監視システムとは異なり、アラートは独立したオブジェクトです。 設定によっては、チェックが既に緑色になっている場合がありますが、アラートはアクティブなままです。 アラートが使用および処理されます。
- オペレーター(人)
- 標準コネクタ(例:コマンドチャネル)
- 外部コネクタ(たとえば、Service Deskシステムと同期するためのコネクタ)
コマンドチャネルの存在は、アラートを処理するための十分な機会を既に与えていますが、このアプローチは、第一に、あまり美しくなく、第二に、パフォーマンスにおいて最高ではありません。 したがって、出現したアラートに文字を送信する独自の外部コネクタを作成しましょう。 はい、これには標準がありますが、ストーリーの過程で、コネクタの機能が事実上無制限であることが明らかになります。 せっかちな人のために:スクリプトは完全にここにあります 。
コネクタを作成するには、Powershellを使用します。 なぜなら:
- C#よりも簡単です
- このようなスクリプトは、保守/変更が簡単です
SCOM SDKライブラリも使用されます。 これらは通常、 C:\ Program Files \ Microsoft System Center 2012 R2 \ Operations Manager \ Server \ SDK Binaries on SCOM serverにあります。
コネクタの取り付け
まず、外部コネクタを作成する必要があります 。このため、 スクリプトも使用します 。 メインスクリプトで同じオブジェクトを使用するため、詳細には分解しません。 その主な部分:
$connectorGuid = New-Object Guid("{6A1F8C0E-B8F1-4147-8C9B-5A2F98F10007}"); if ($action -eq "InstallConnector") { # SCOM $mg = New-Object Microsoft.EnterpriseManagement.ManagementGroup($ManagementServer); $icfm = $mg.ConnectorFramework; $info = New-Object Microsoft.EnterpriseManagement.ConnectorFramework.ConnectorInfo; $info.Description = "..."; $info.DisplayName = $ConnectorName; $info.Name = $ConnectorName; $connector = $icfm.Setup($info, $connectorGuid); $connector.Initialize(); }
任意のGUIDを選択します。主なことは、メインコネクタスクリプトで同じものを使用することです。 ところで、リンクからスクリプトによってコネクタを削除できます。
重要です。 作成されたコネクタは、SCOMグラフィカルコンソールで使用可能になります。 アラートへのサブスクリプションを設定できます-手順は、標準コネクタの場合とほぼ同じです。 これが行われない場合、アラートはコネクタに送信されません。
コネクタロジック
メインスクリプトを実行しましょう。 構成パラメーターを定義することから始めましょう。
# , $ScriptPath = $MyInvocation.MyCommand.Path -replace $MyInvocation.MyCommand.Name; # SCOM $ManagementServer = "scom.contoso.com"; # GUID , $strGuid = "{6A1F8C0E-B8F1-4147-8C9B-5A2F98F10007}"; # email $emailTo = 'azat.khadiev@contoso.com'; $emailFrom = 'scom@contoso.com'; # smtp server $Smtp = 'mail.contoso.com';
組織のインフラストラクチャに応じてメールアドレスとサーバーアドレスを変更します。
# SDK, $DLLs = ("Microsoft.EnterpriseManagement.Core.dll","Microsoft.EnterpriseManagement.OperationsManager.dll","Microsoft.EnterpriseManagement.Runtime.dll"); foreach ($lib in $DLLs) { [Reflection.Assembly]::LoadFile($ScriptPath + $lib) | Out-Null }
これらのライブラリを使用して、SCOMシステムオブジェクトを作成し、それを操作できます。 次:
try { # $mg = New-Object Microsoft.EnterpriseManagement.ManagementGroup($ManagementServer); $icfm = $mg.ConnectorFramework; $connectorGuid = New-Object Guid($strGuid); $connector = $icfm.GetConnector($connectorGuid); # $alerts = $connector.GetMonitoringAlerts(); } catch { Write-Host $_.Exception.Message.ToString(); exit 2; } # $connector.AcknowledgeMonitoringAlerts($alerts);
この方法でマークされたアラートは、変更されるまでコネクタに到達しません。ステータスの変更または属性の変更のいずれかです。 次:
foreach ($alert in $alerts) { try { # , , $alertContext = [xml]$alert.Context; $alertResolutionStateName = @{0="New";255="Closed"}; # xml, XPATH $monitorClass = $alertContext.SelectNodes("//Property[@Name='__CLASS']/text()").Value; $subject = "This is an alert message from SCOM"; $emailBody = "`n" + $alertResolutionStateName[[int]$alert.ResolutionState] + "`n" + $alert.MonitoringObjectFullName + "`n" + $alert.TimeRaised + "`n" + $monitorClass; # Send-MailMessage -SmtpServer $Smtp -Subject $subject -From $emailFrom -To $emailTo -Body $emailBody # #$alert.CustomField1 = "Notification sent."; #$alert.Update(); } catch { Write-Host $_.Exception.Message.ToString(); } }
したがって、SCOMの各アラートにメッセージを送信しました。 印象的ではありませんか? ただし、tryブロックの最後の3行に注意してください。 実際、この方法で、アラート属性にいくつかの情報を書き込むか、それを閉じることさえできます(つまり、Closedステータスを設定します)。 これはすでにもっと面白いです。 確かに、1つのポイントがあります。この方法でアラートを変更すると、次回スクリプトを実行したときに、(変更されたように)再びコネクタに落ち、無限の処理を取得できます。 したがって、変更する前に、対応する条件についてアラートをチェックする必要があります。 この例では、CustomField1属性が空であることを確認できます。それ以外の場合は、変更を加えないでください。
したがって、一般的に、コネクタは準備ができています。 1回のスクリプト実行で、その時点で利用可能なすべてのアラートが処理されます。 連続操作の場合は、無限ループで実行するか、タスクスケジューラで定期的な実行を構成できます。 これは、C#で記述されたサービスを維持するよりもはるかに簡単です。
適用分野
オプション1。 組織にはサービスデスクシステムがあります。 APIがあり、あなたはそれに精通しています。 このコネクタを使用して、SCOMとシステム間の統合を構成できます。 必要に応じて、両面にすることができます。チケットを閉じるとき、アラートを閉じます。
オプション2。 組織では、インフラストラクチャは責任の領域に分割されます。 たとえば、機器およびシステムのリストと責任者のリストは、1つのドキュメントに統合されます。 このコネクタとこのドキュメントを使用して、特定の情報でアラート属性を更新できます。 したがって、オペレーターがそれを正しく処理しやすくなります。
それだけです、ご清聴ありがとうございました。