単一の Varbind の複数のイベント変数への解析
この例では、デバイスが単一の varbind を含むトラップを生成します。その varbind には、アラームの適切な処理に必要な複数のコンポーネントが含まれています。コンポーネントを抽出し、イベント識別子として使用できるイベント変数に配置するためのプロシージャが必要です。トラップを解析し、varbind に適切に定義されたパターン(エラー テキスト:重大度)を持つ文字列が含まれていることを認識しています。エラー テキストには、任意の文字列を使用できますが、重大度は一連の値に制限されています: Critical、Major、Minor、Clear、None、Special。そのため、自分の varbind に合わせて (.*):(Critical|Major|Minor|Clear) のパターンを作成する必要があります。左側を識別子として使用し、右側を重大度として使用します。各エラー テキスト用に作成される一意のアラーム インスタンスも使用します。一致したエラー テキスト アラームのみをクリアするための Clear トラップのみを使用します。さまざまな多くのエラー コードおよび重大度の組み合わせを処理できる 1 つのイベントを作成します。プロシージャを使用して、複数のイベント変数を作成するようにイベントに指示します。ただし最初に、トラップの AlertMap ファイルにエントリを作成する必要があります。以下の手順に従います。
casp1032jp
この例では、デバイスが単一の varbind を含むトラップを生成します。その varbind には、アラームの適切な処理に必要な複数のコンポーネントが含まれています。コンポーネントを抽出し、イベント識別子として使用できるイベント変数に配置するためのプロシージャが必要です。
トラップを解析し、varbind に適切に定義されたパターン(エラー テキスト:重大度)を持つ文字列が含まれていることを認識しています。エラー テキストには、任意の文字列を使用できますが、重大度は一連の値に制限されています: Critical、Major、Minor、Clear、None、Special。
そのため、自分の varbind に合わせて (.*):(Critical|Major|Minor|Clear) のパターンを作成する必要があります。左側を識別子として使用し、右側を重大度として使用します。各エラー テキスト用に作成される一意のアラーム インスタンスも使用します。一致したエラー テキスト アラームのみをクリアするための Clear トラップのみを使用します。
さまざまな多くのエラー コードおよび重大度の組み合わせを処理できる 1 つのイベントを作成します。プロシージャを使用して、複数のイベント変数を作成するようにイベントに指示します。ただし最初に、トラップの AlertMap ファイルにエントリを作成する必要があります。
以下の手順に従います。
- SpectroSERVER に管理者としてログインします。
- SS/CsVendor/vendor_directoryディレクトリで、AlertMap ファイルを見つけます。注:AlertMap ファイルはアラートを CA Spectrum イベントにマップします。MIB ツールを使用してイベントにトラップをマップすると、AlertMap ファイルが自動的に作成されます。
- テキスト エディタでファイルを開きます。
- 新しいエントリに対して以下の構文を使用します:アラート コードイベント コードOID マップここで、OID マップには、OID、値変数 ID、インスタンス変数 ID が含まれます。たとえば、以下の構文で架空の例を使用します。1.3.6.1.4.1.17844.1.2.6.0 0x05a91900 1.3.6.1.4.1.17844.1.1.1(1,0)
- エラー コードを 1 つの変数に、重大度を別の変数に抽出する正規表現パターンを作成します。この例では、類似した他の要件で再利用できるように、任意の数のトークンを解析するプロシージャを作成します。疑似コード:Given a text string and a pattern Set the starting index If the text string matches the pattern then for each () in the pattern, extract the text enclosed and put it into an event variable at the current index; increment the index else throw an error message When all the () are exhausted, create an event with the new event variable listEventDisp ファイルの例:0x05a91000 P " \SetVariable({V pattern},{S \"(.*):(Critical|Major|Minor|Clear|None|Special)\"}, \ SetVariable({V counter},{U 500}, \If(Regexp(GetEventVariable({U 1}),{V pattern}), \CreateEventWithVariables({C CURRENT_MODEL},{H 0x05a91002}, \ ForEach(GetRegexpList(\GetEventVariable({U 1}),{V pattern}),{Variable X}, \{Variable retVal},GetEventVariableList(), \Prog2(Assign({V retVal},SetEventVariable({V retVal},{V counter},{Variable X})), \ Assign({V counter},Add({V counter},{U 1}))))), \CreateEventWithVariables({C CURRENT_MODEL},{H 0x05a91001}, GetEventVariableList()))))"注:処理中に検証が行われます。入力文字列がパターン(たとえば、ERROR TEXT:BadSeverity という構文に一致しない場合)に一致しない場合は、アラームが作成されます。アラームの詳細には、入力形式が正しくないため処理が完了しなかったことが示されます。検証を含めることはトラブルシューティングに役立ちます。 このサンプル コードの詳細なチュートリアルの詳細については、以下の「コードのチュートリアル」を参照してください。
- 「イベント マップへのプロシージャの追加」で説明されている構文を使用してイベント マップにプロシージャを追加します。サーバは、現在のモデルとイベントを事前設定して、このプロシージャの評価に適した環境を設定します。
コードのチュートリアル
0x05a91000 P " \ SetVariable({V pattern},{S \"(.*):(Critical|Major|Minor|Clear|None|Special)\"}, \ SetVariable({V counter},{U 500}, \ If(Regexp(GetEventVariable({U 1}),{V pattern}), \ CreateEventWithVariables({C CURRENT_MODEL},{H 0x05a91002}, \ ForEach(GetRegexpList(\ GetEventVariable({U 1}),{V pattern}),{Variable X}, \ {Variable retVal},GetEventVariableList(), \ Prog2(Assign({V retVal},SetEventVariable({V retVal},{V counter},{Variable X})), \ Assign({V counter},Add({V counter},{U 1}))))), \ CreateEventWithVariables({C CURRENT_MODEL},{H 0x05a91001}, GetEventVariableList()))))"
{V pattern} は、抽出パターンです。3 つのトークンが必要な場合は、このパターンを変更するだけで済みます。以下の例に、抽出パターンを示します。
(.*):(.*):(Something|Else) The (.*) brown (fox|duck) (jumped|slid) over the lazy (.*) => {S 501}=quick {S 502}=fox {S503}=jumped {S 504}=dog
{V counter} は、開始インデックスです。GetRegexpList 関数は、文字列全体がカウンタに含まれており、最初に抽出されたトークンが counter + 1 にあることを識別します。
GetEventVariable({U 1}) は varbind 1 の値を返します(イベント メッセージでは {S 1} または {I 1} として識別される場合があります)。この命令は実質的に、「イベント変数はインデックス 1 で取得します」を意味します。変数が varbind 100 にある場合は、U 100 を使用します。たとえば、次のようにします。
ForEach で、「GetRegexpList によって返されたリスト内の各アイテムに対して、なんらかの処理を行ってください」と指示します。
GetRegexpList が抽出されたトークンのリストを返しますが、イベント変数としてのみ使用することはできません。EventVariableList に書き込む必要があります。
Prog2 は、2 つの独立したアクションを連続的に実行できるコード ブロックに似ています。この場合、コードは「現在のトークンを、現在のインデックスにあるイベント変数リストに割り当て、インデックス カウンタをインクリメントします」と指示しています。