使用关联事件触发事件策略
配置事件策略,以便在发生两个或多个相关事件时执行。
如何在事件策略中表示触发和关联事件
在事件脚本参数和支持的事件策略语句(如语句) 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}
。如果 、e2
、或 e3
之一e1
在 、 e5
、 或 e6
之后 e4
60 秒内出现,则该相关事件的属性值 interface-name
(e4
、e5
、或e6
) 将替换为{$*.interface-name}
变量。如果关联事件没有interface-name
属性,则软件不会执行命令show interfaces {$*.interface-name}
。
如果e1
在 e4
和 e5
的 60 秒内发生,则将属性的interface-name
e4
值替换{$*.interface-name}
为变量。这是因为事件进程 (eventd) 按语句中within
配置的顺序搜索关联事件。在本例中,顺序为 e4
> e5
> e6
。
示例:根据在指定时间间隔内接收到的其他事件来关联事件
此示例中的事件策略发出一组命令,并将生成的输出文件上传到存档站点。如果其中一个触发事件event3
、、或 event5
在其中一个相关事件event2
event1
或发生后的 60 秒内发生,则event4
执行该策略。该策略的伪代码如下所示:
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; }
事件策略在配置中指定两个存档站点。设备会尝试传输到列表中的第一个存档站点,仅当传输失败时才会移动到下一个站点。事件策略配置为:
[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; } } }
示例:基于事件属性关联事件
在以下事件策略中,如果两个事件的事件属性值匹配,则这两个事件是相关的。对两个事件的属性进行匹配可确保这两个事件相关。在这种情况下,接口地址必须匹配,物理接口 (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 ... } }