相関イベントを使用してイベント ポリシーをトリガーする
概要 2 つ以上の相関イベントが発生したときに実行するイベント ポリシーを構成します。
イベント ポリシーでイベントのトリガーと関連付けを表す方法
イベント スクリプト引数およびサポートされているイベント ポリシー ステートメント ( execute-commands
ステートメントなど) では、イベント ポリシー変数を使用して、 トリガー イベント と 相関イベントを区別できます。イベントのトリガーと関連付けは、 [edit event-options policy policy-name]
階層レベルの次のステートメントで設定されます。
- トリガー イベント—
events
ステートメントで設定 - 相関イベント:
within seconds events
ステートメントで設定
次の形式のイベント ポリシー変数を使用して、イベントのトリガーと関連付けを表すことができます。
-
{$$.attribute-name}
- 二重ドル記号($$
)表記は、ポリシーをトリガーするイベントを表します。属性名と組み合わせると、変数はトリガーとなるイベントに関連付けられた属性の値に解決されます。たとえば、{$$.interface-name}
は、トリガーとなるイベントに関連付けられたインターフェイス名に解決されます。 -
{$event.attribute-name}
- イベント名 ($event
) 表記の単一ドル記号は、event
に一致する最新のイベントを表します。属性名と組み合わせると、変数はそのイベントに関連付けられた属性の値に解決されます。たとえば、ポリシーがshow interfaces {$COSD_CHAS_SCHED_MAP_INVALID.interface-name}
コマンドを発行すると、{$COSD_CHAS_SCHED_MAP_INVALID.interface-name}
変数は、イベント プロセスによってキャッシュされた最新のCOSD_CHAS_SCHED_MAP_INVALID
イベントに関連付けられたインターフェイス名に解決されます。 -
{$*.attribute-name}
- アスタリスク ($*
) 表記のドル記号は、相関するイベントのいずれかに一致する最新のイベントを表します。変数は、ポリシー設定で指定された相関イベントのいずれかに一致する最新のイベントに関連付けられた属性の値に解決されます。
イベント ポリシーでは、イベント ポリシー変数を使用して特定のイベントを参照できます。次のイベント ポリシーについて考えてみます。
[edit event-options] policy p1 { events [ e1 e2 e3 ]; within 60 events [ e4 e5 e6 ]; then { execute-commands { commands { "show interfaces {$$.interface-name}"; "show interfaces {$e4.interface-name}"; "show interfaces {$*.interface-name}"; } output-filename command-output.txt; destination some-dest; } } }
show interfaces {$$.interface-name}
コマンドでは、イベント e1
、e2
、またはe3
の interface-name
属性の値が {$$.interface-name}
変数に置き換えられます。
show interfaces {$e4.interface-name}
コマンドでは、最新のe4
・イベントの interface-name
属性の値が {$e4.interface-name}
変数に置き換えられます。
show interfaces {$*.interface-name}
コマンドでは、最新のe4
、e5
、またはe6
イベントの interface-name
属性の値が {$*.interface-name}
変数に置き換えられます。e4
、e5
、またはe6
後 60 秒以内に e1
、e2
、またはe3
のいずれかが発生した場合、その相関イベント (e4
、e5
、または e6
) の interface-name
属性の値が {$*.interface-name}
変数に置き換えられます。相関イベントにinterface-name
属性がない場合、ソフトウェアはshow interfaces {$*.interface-name}
コマンドを実行しません。
e4
とe5
の両方から 60 秒以内にe1
が発生した場合、e4
の interface-name
属性の値が {$*.interface-name}
変数に置き換えられます。これは、イベント プロセス (eventd) が、within
ステートメントで構成された順序で、相関するイベントを検索するためです。この場合、順序は
例: 指定した時間間隔内の他のイベントの受信に基づくイベントの関連付け
この例のイベント ポリシーは、一連のコマンドを発行し、結果の出力ファイルをアーカイブ サイトにアップロードします。このポリシーは、トリガー イベント( event3
、 event4
、または event5
)の 1 つが、相関イベント( event1
または event2
)が発生してから 60 秒以内に発生した場合に実行されます。ポリシーの擬似コードは次のとおりです。
if trigger event is (event3 or event4 or event5) and (event1 or event2 has been received within the last 60 seconds) then { run a set of commands; log the output of these commands to a location; }
イベント ポリシーでは、構成で 2 つのアーカイブ サイトを指定します。デバイスは、リスト内の最初のアーカイブ サイトへの転送を試み、転送に失敗した場合にのみ次のサイトに移動します。イベント ポリシーの構成は次のとおりです。
[edit event-options] policy 1 { events [ event3 event4 event5 ]; within 60 events [ event1 event2 ]; then { execute-commands { commands { "command"; } output-filename my_cmd_out; destination policy-1-command-dest; } } } destinations { policy-1-command-dest { archive-sites { scp://robot@my.big.com/a/b; scp://robot@my.little.com/a/b; } } }
例:イベント属性に基づくイベントの関連付け
次のイベント ポリシーでは、イベント属性値が一致する場合、2 つのイベントが関連付けられます。両方のイベントの属性を照合することで、2 つのイベントが関連していることが保証されます。この場合、インターフェイスアドレスと物理インターフェイス(ifd)名が一致する必要があります。
RPD_KRT_IFDCHANGE
エラーは、ルーティングプロトコルプロセス(rpd)がカーネルにインタフェースの状態を変更する要求を送信し、その要求に失敗した場合に発生します。RPD_RDISC_NOMULTI
エラーは、インターフェイスがルーター検出用に設定されているが、そのインターフェイスが要求された IP マルチキャスト操作をサポートしていない場合に発生します。
この例では、 rpd_rdisc_nomulti.interface-name
は so-0/0/0.0 で、 rpd_krt_ifdchange.ifd-index
は so-0/0/0 である可能性があります。
[edit event-options] policy 1 { events rpd_rdisc_nomulti; within 500 events rpd_krt_ifdchange; attributes-match { rpd_rdisc_nomulti.interface-address equals rpd_krt_ifdchange.address; rpd_rdisc_nomulti.interface-name starts-with rpd_krt_ifdchange.ifd-index; } then { ... actions ... } }