スクリプト モニターとルール
適用対象: System Center 2012 R2 Operations Manager,System Center 2012 - Operations Manager,System Center 2012 SP1 - Operations Manager
監視スクリプトは、イベントやパフォーマンス カウンターなどのその他の標準的な方法で必要なデータを収集できないときに使用します。 このスクリプトはエージェントにある情報からデータを収集し、Operations Manager エージェントと共にインストールされているe MOM.ScriptAPI オブジェクトを使用してプロパティ バッグを作成します。
監視スクリプトは、すべての Operations Manager エージェントにインストールされている MOM.ScriptAPI オブジェクトにアクセス可能な任意のスクリプト言語で作成できます。 オペレーション コンソールを使用してスクリプトを VBScript または JScript で作成することが可能です。 使用する、 Windows PowerShell スクリプトなどの別の Authoring tool を使用する必要があります、 System Center Operations Manager 2007 R2 作成コンソール または 管理パックの作成者です。
プロパティ バッグ
出力データがモニターの式で評価されるかあるいはパフォーマンス データまたはイベントの収集ルールにマップされるように、監視スクリプトは出力データをプロパティ バッグとして送信します。 プロパティ バッグとは、それぞれ名前を持つ値のセットです。 どのような名前でも指定できますが、それぞれの値を説明する名前を使うのがベスト プラクティスです。 プロパティ バッグはワークフローのライフ期間だけ存在します。 ワークフローが次回実行される時は、スクリプトが実行され新しい値で新しいプロパティ バッグを作成します。
プロパティ バッグは任意の数値を持つことが可能ですが、データセット全体は 4 MB を超過しません。 ほとんどのスクリプトは、この制限よりもはるかに低い合計サイズの値だけを必要とします。 ワークフローがすべての値を使用しなければいけないという要件はありません。
スクリプトは、MOM.ScriptAPI オブジェクトの CreatePropertyBag メソッドを使用してプロパティ バッグを作成します。 ワークフローは、プロパティ バッグからの値を、次の構文を使用する $Data 変数と共に使用します。
$Data/Property[@Name="PropertyName"]
たとえば、パフォーマンス データを作成するスクリプトは、次の表の値があるプロパティ バッグを作成する場合があります。 この表は、スクリプトによって作成された値の名前と対応する $Data 変数を示し、この変数がプロパティ バッグをパフォーマンス データにマップするために使われます。
プロパティ バッグの値の名前 |
サンプル値 |
変数 |
---|---|---|
ObjectName |
MyObject |
$Data/Property[@Name='ObjectName']$ |
CounterName |
MyCounter |
$Data/Property[@Name='CounterName']$ |
InstanceName |
MyInstance |
$Data/Property[@Name='InstanceName']$ |
値 |
10 |
$Data/Property[@Name='Value']$ |
スクリプトの構造
次のコードは、監視スクリプトの基本構造を説明するサンプル監視スクリプトを示します。 このサンプル スクリプトには次の特徴があります。
スクリプトが実行されているコンピューター名の引数およびアプリケーションの場所へのパスの引数を受け取る。
ComputerName、InstanceName、および PerfValue という名の値を持つプロパティ バッグを作成する。
sComputerName = WScript.Arguments(0)
sApplicationPath = WScript.Arguments(1)
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
oBag.AddValue "ComputerName", sComputerName
oBag.AddValue "InstanceName", "MyInstance"
oBag.AddValue "Value", 1.0
oAPI.Return(oBag)
スクリプトの各セクションの詳細をここで説明します。
sComputerName = WScript.Arguments(0)
sApplicationPath = WScript.Arguments(1)
スクリプトの最初の 2 行は引数を受け取ります。 これらの値は、スクリプトを実行しているルールまたはモニターの Arguments パラメーターにあることが予期されます。 スクリプトは、スクリプトのロジックに必要な任意の数の引数を使用することができます。
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
次の 2 行はプロパティ バッグを作成します。 これらの行もほとんどの監視スクリプトで変更されません。 スクリプトの他の部分の主要な目的は、エージェント コンピューターで収集されたデータを使って、プロパティ バッグに値を追加することです。
oBag.AddValue "ComputerName", sComputerName
oBag.AddValue "InstanceName", "MyInstance"
oBag.AddValue "Value", 1.0
プロパティ バッグが作成された後、任意の数の値を追加することができます。 プロパティ バッグ オブジェクトにある AddValue メソッドで、その値に続く項目の名前を使って、値を追加します。 この例では明示的な値を使用します。 実際の監視スクリプトでは、エージェント コンピューターから情報を収集してこれらの値に含めるための追加コードが予期されます。
oAPI.Return(oBag)
すべての値がプロパティ バッグに追加されると、ワークフローに戻ります。 これは必須行で、この行がないとプロパティ バッグはスクリプトの終了時に破棄されます。 このメソッドは、スクリプトが単一のプロパティ バッグだけを作る場合にのみ使用されます。 複数のプロパティバッグを返すスクリプトと、その方針が使用される場合の条件の詳細については、「 System Center Operations Manager 2007 R2 Authoring Guide (System Center Operations Manager 2007 R2 オーサリング ガイド)」の「Cookdown (クックダウン)」セクションを参照してください。
スクリプトの引数
ほとんどのスクリプトは、スクリプトの実行時にコマンド ラインからスクリプト宛に送信される値である、引数を使用します。 引数を使用すると、単一のスクリプトを、スクリプト自体を修正せずに、複数のシナリオで使用することができます。
監視スクリプトでは、スクリプトが必要とする情報が、スクリプトが実行される各エージェント上で異なる場合があるため、引数が不可欠となります。 モニターまたはルールのターゲット オブジェクトのいずれかのプロパティを、スクリプト引数の値として使用できます。 この値は、スクリプトの実行時に各エージェント上で個別に解決されます。
引数には、オペレーション コンソールの [パラメーター] ボタンからアクセスします。 個々の引数は、スクリプト内でアクセスされる順番に、スペースで区切ります。 これは、スクリプトをコマンド ラインから実行する場合に指定するコマンド ラインと同一です。
各引数は、明示的な値、あるいはターゲット オブジェクトのプロパティ値を使用する $Target 変数のいずれかです。 $Target 変数はスクリプトが実行されるときに解決されるので、コマンド ラインでスクリプトに解決された値が提供されます。 適切な構文がわかっている場合は $Target 変数を入力することができます。 ターゲット オブジェクトとその親のプロパティをすべて一覧する [ターゲット] ボタンからプロパティを選択するよりも簡単です。
重要 |
---|
スペースを含む値に解決される可能性がある $Target 変数は、引用符で囲む必要があります。 値にスペースが含まれ、引用符で囲まれていない場合、スクリプトは 2 つの別々の引数と解釈します。 引用符で囲むことにより、値が確実に 1 つの引数として解釈されるようになります。 [ターゲット] メニューからプロパティを選択する場合は、引用符は含まれません。 プロパティを選択したあとで引用符を入力する必要があります。 |
たとえば、前例のスクリプトでは、コンピューター名とアプリケーション パスの 2 つの引数が予期されます。 これが "Widows コンピューター" クラスによってホストされているクラスをターゲットにしているモニターまたはルールの一部であるとすると、コンピューター名を PrincipalName プロパティから取得できます。 アプリケーション パスがターゲット クラスのプロパティであった場合は、引数は次の例のようになります。 引数がスペースを含む 1 つの値に解決されるように、ApplicationPath プロパティが引用符で囲まれていることに注目してください。
$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$ "$Target/Property[Type="MyApp.MyClass"]/ApplicationPath$"
スクリプトに 「MyScript.vbs」 と名前をつけ、コンピューター名が「MyServer01」、アプリケーション パスが「C:\Program Files\Contoso\My Application」であったとすると、このスクリプトで実行されるコマンド ラインは次のようになります。
MyScript.vbs MyServer01 "C:\Program Files\Contoso\My Application"
スクリプトのモニターおよびルールに関するトピック
-
スクリプトを使ってパフォーマンス データまたはイベント データを収集するルールを作成する。
-
スクリプトの結果を評価してヘルス状態を設定するモニターを作成する。
-
モニターを作成するには、UNIX および Linux コマンド、スクリプト、または複数のコマンド (パイプライン演算子を使用) の 1 行のシーケンスの実行の出力が評価されます。