SCOM - 「上書き」を上手に設定するコツ

マイクロソフト株式会社マネージャビリティサポートチームの盛です。

SCOM 2007 で、シールされた管理パックに含まれるルールやモニタの設定を変更する場合、「上書き」を利用します。
上書きの設定画面では、上書きしたいパラメータと実際に変更する値を設定しますが、この際、画面下部のプルダウンメニューから「上書きの保存先」も指定することができます。
この「保存先」を意識して設定するようにすることにより、SCOM 2007 をより便利に利用することができます。

<上書きの設定画面のスクリーンショット - クリックして拡大 - >
 

- 上書きと依存関係について
管理パックに対して「上書き」を設定した場合、「保存先」を変更しなければ、その設定情報は「既定の管理パック」に保存されます。
上書きを設定したとき、設定情報を保存した管理パックには、上書きの対象となった管理パックへの「依存」が発生します。
このため、保存先を変更せずに上書きを設定していった場合、気付くと「既定の管理パック」が上書きの対象となったすべての管理パックに依存している、ということになりかねません。
 
例えば SQL Server 管理パックの「Cannot open user default database. Login failed」ルールと IIS 管理パックの「Security: IIS Logging error: can't create directory」モニタの設定値を上書きで変更し、その上書きを両方とも、既定の管理パックに保存した場合を考えます。
この場合、「既定の管理パックは SQL Server 管理パックと IIS 管理パックに依存している」ということになります。

- 依存関係によって発生する問題点
他の管理パックから依存されている管理パックは、その依存関係がある限り削除することができません。
例えば上の例では、ある日 IIS 管理パックによる監視が不要になったのでこの管理パックを削除しようと考えたとしても、IIS 管理パックを削除しようとした際に「次の管理パックは、削除しようとしてる管理パックに依存しています。まず、次の管理パックを手動で削除してください」というメッセージが表示されて処理が失敗してしまいます。
 
この問題を回避する単純な方法は、依存している既定の管理パックを削除することなのですが、そんなことをすれば IIS 管理パックに対する上書きだけでなく、SQL Server 管理パックに対する上書きや、カスタムで作成した「アラート」表示、「状態」表示なども削除されてしまいます。
直感的には、削除しようとしている管理パックに対する上書きだけを注意深く見つけ出して削除すれば良いようにも思えるのですが、この作業を行ってもやはり依存性は残ってしまいます。

- 依存関係から生じる問題を回避する方法と予防する方法
こうした状況になった場合には、以下の「既定の管理パックから不要な上書きと依存関係だけを削除する方法」に記載した方法で回避することができます。
しかしこの回避方法は、管理パックを直接編集する作業を含む点で煩雑かつ危険であり、移行や運用の観点でも望ましくありません。
このような問題の発生を未然に防ぎ、SCOM 2007 の運用をより容易にする方法としては、上書き対象の管理パックごとに上書き保存用の管理パックを作成することが有効となります。
上に記載した例の場合には、SQL Server 管理パックの「Cannot open user default database. Login failed」ルールに対する上書きを「 SQL Server 上書き管理パック」に保存し、IIS 管理パックの「Security: IIS Logging error: can't create directory」モニタに対する上書きを「 IIS 上書き管理パック」に保存する、といった様になります。
このようにしておけば、IIS 管理パックを削除したいときには、IIS 上書き管理パックをまず削除するだけで済むので、非常に作業が簡単になります。
 
またこの方法には他にも、管理パックの移行性の観点でメリットがあります。
環境 A で設定した IIS 管理パックによる監視の内容を、そのまま環境 B に移行したいとします。
このとき、上書き保存用の管理パックを管理パックごとに作っておけば、IIS 管理パックと IIS 上書き管理パックを環境 A からエクスポートし、それらを環境 B にインポートするだけで同じ設定で監視を開始することができます。
皆さんも今後上書きを設定される際には、管理パックごとに専用の上書き保存用管理パックを作成されることを強くお勧めいたします。

- 既定の管理パックから不要な上書きと依存関係だけを削除する方法
既定の管理パックとの依存関係により削除できなくなった管理パックは、事前に既定の管理パックの内容を修正して依存関係を消去することで、削除することができます。(既定の管理パック以外でも応用できます)
具体的には、以下の手順を実施します。
1. SCOM 管理コンソールを開きます。
2. [管理」ペインの [管理パック] ノードに移動します。
3. 削除しようとしている管理パックを右クリックして [プロパティ] を開きます。
4. [全般] タブで [ID] の値を確認し、プロパティ ウインドウを閉じます。
   (ここでは、"Microsoft.Windows.InternetInformationServices.2003" を削除するものとします)
5. [既定の管理パック] を右クリックし、[管理パックのエクスポート] を選択します。
6. [フォルダの参照] ウインドウで保存先を指定し、[OK] を押します。
  (「既定の管理パック」が、XML 形式のテキストファイルとして生成されます)
7. 手順 6 で出力した管理パックを、エディタや XML Notepad などで開きます。
8. 手順 4 で確認した ID を検索し、<Reference> タブで囲まれた部分を見つけます。
例:
  <Reference Alias="Windows5"> <---------- エイリアス
    <ID>Microsoft.Windows.InternetInformationServices.2003</ID> <---------- 検索したID
    <Version>6.0.6278.0</Version>
    <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
  </Reference>
9. 手順 8 で見つけた部分の 1 行上に設定されている管理パック参照の エイリアスを確認します。
  (ここでは、"Windows5" です)
10. 確認後、手順 8 で確認した <Reference> タブで囲まれた部分をすべて削除します。
11. 手順 9 で確認した エイリアスに「!」を加えた文字列を検索します。見つからない場合、手順 13. に移行します。
  (ここでは "Windows5! " です。当該文字列が見つからない場合もあります。)
12. 文字列が見つかった場合、手順 10 で見つけた文字列を含む、<*Override> と、</*Override> で囲まれた部分をすべて削除します。
  削除対象の例:
 
  例 1 ルールに対する上書きの情報
  ----------------------------------
  <RulePropertyOverride ID="OverrideForRuleServiceconfigurationrelatedfailureCouldnotinitializetheloggingmoduleforsite6RuleForContextMicrosoftWindowsInternetInformationServices2003WebSited61b98d3dc96474bb2f99ea7c662f527" Context="Windows5!Microsoft.Windows.InternetInformationServices.2003.WebSite" Enforced="false" Rule="Windows5! Service_configuration_related_failure__Could_not_initialize_the_logging_module_for_site__6_Rule" Property="Enabled">
    <Value>false</Value>
  </RulePropertyOverride>
     
例 2 モニタに対する上書きの情報
----------------------------------
  <MonitorPropertyOverride ID="OverrideForMonitorMicrosoftServiceconfigurationrelatedfailureCouldnotinitializetheloggingmoduleforsite6RuleForContextMicrosoftWindowsInternetInformationServices2003WebSited61b98d3dc96474bb2f99ea7c662f527" Context="Windows5! Microsoft.Windows.InternetInformationServices2003.WebSited" Enforced="false" Monitor="Windows5! Microsoft.Windows.InternetInformationServices2003.WebSited.ServiceMonitor" Property="AutoResolve">
    <Value>false</Value>
  </MonitorPropertyOverride>

13. <Identity> という文字列を検索し、<Version> タブで囲まれた部分の値を現在の値より大きい値に変更します。
  (例えば、"6.0.6278.0" の場合、"6.0.6278.1" に変更します)
14. 変更内容を保存してエディタを終了します。
  (これで、「既定の管理パック」から、削除対象の参照情報が削除されました。)
15. SCOM 管理コンソールを開きます。
16. [管理] ペインの [管理パック] ノードを右クリックし、[管理パックのインポート] を選択します。
17. 手順 14 で保存した管理パックを選択してインポートを実行します。
  (これで、「既定の管理パック」が更新されます。)
19.  再度削除する管理パックのプロパティを開き、[依存関係] タブに再インポートした管理パックが表示されていないことを確認します。

- 補足 -
インストール時にインポートされている既定の管理パックは、「%PROGRAMFILES%\System Center Operations Manager 2007」フォルダに、「Microsoft.SystemCenter.OperationsManager.DefaultUser.xml」として格納されています。万が一、誤って既定の管理パックを削除してしまった場合には、このファイルをインポートすることでインストール時の状態には戻すことができます。

- 参考情報 -
"Best practices to use when you configure overrides in System Center Operations Manager 2007"
https://support.microsoft.com/kb/943239/en-us