Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

使用关联事件触发事件策略

配置事件策略,以便在发生两个或多个相关事件时执行。

了解关联事件

除了将事件策略配置为针对单个事件触发之外,您还可以配置关联两个或多个事件的事件策略。如果事件按指定发生,则事件策略将执行配置的作。例如,当 UI_COMMIT_PROGRESS 事件发生后 5 分钟内生成UI_CONFIGURATION_ERROR事件时,您可能希望发出某些作模式命令。再举一个例子,如果一个DCD_INTERFACE_DOWN事件在 60 秒的间隔内生成两次,你可能希望上传一个特定的文件。

要在事件策略中关联事件,请在 [edit event-options] 层次结构级别包含以下语句:

events 语句中,可以列出多个触发事件。有关在事件策略中定义事件的信息,请参阅 事件策略和事件通知概述。要将这些事件与其他事件相关联,请配置 within 和/或语 attributes-match 句。

within 语句定义在触发事件之前的指定时间间隔内必须(或不得)发生的关联事件。该 attributes-match 语句使系统除了考虑事件本身之外,还考虑了事件的属性。语 attributes-match 句可以将事件的属性与另一个事件的属性或正则表达式相关联。

只有当满足指定的条件时,事件策略才会执行语句中 then 配置的作。以下各节讨论如何使用这些语句。

按时间间隔关联事件

您可以将事件策略配置为仅在触发事件发生在另一个事件之后的指定时间间隔内时执行。为此, within seconds events 请配置语句。如果语句中定义 within seconds events 的任何关联事件发生在第一条语句中 events 定义的任何触发事件之前的配置秒数内,则执行该策略。秒数可以从 60 到 604,800。 not 仅当相关事件未在触发事件之前的配置时间间隔内发生时,该语句才会使策略执行。

例如,如果其中一个触发事件event3event4event5在其中一个相关事件event2event1或发生后的 60 秒内发生,设备将执行以下策略:

要配置事件策略以按时间间隔关联事件,请执行以下作:

  1. 配置一个或多个触发器事件。

  2. 配置在触发事件之前和指定时间间隔内必须发生或不得发生的关联事件。

    • 若要指定关联事件必须在触发事件之前的指定时间间隔内发生,请 not 省略关键字。

    • 若要指定关联事件不得在触发事件之前的指定时间 间隔内发生 ,请包含 not 关键字。

  3. 配置事件策略在满足条件时执行的作。

注意:

如果在任何触发事件之前发生任何关联事件(或者如果配置关键 not 字则未发生),设备将执行事件策略。要要求在触发事件之前发生(或不发生)多个关联事件,请配置多个 within 语句。每个语句必须指定不同的时间间隔。

within该语句还支持在给定时间间隔内触发事件发生一定次数时执行事件策略。有关更多信息,请参阅基于事件计数触发事件策略

基于事件属性关联事件

许多事件都有一个或多个属性,您可以在事件策略中引用这些属性。例如,考虑事件 UI_COMMIT 的以下系统日志消息:

通用 UI_COMMIT 事件消息为: User 'username' requested 'command' operation (comment: message)

它具有以下三个属性: usernamecommandmessage

attributes-match 语句支持您使用 equalsmatchesstarts-with 比较将事件属性与所需值进行比较,从而构建更精确的事件策略匹配。该语句按如下方式关联事件:

  • event1.attribute-name equals event2.attribute-name- 仅当 attibute 和event2属性具有相同的值时event1,才执行策略。

  • event.attribute-name matches regular-expression- 仅当属性值与给定的正则表达式匹配时 event ,才执行策略。有关更多信息,请参阅 使用正则表达式优化触发策略的事件集

  • event1.attribute-name starts-with event2.attribute-name- 仅当属性值以属性值event2开头时event1,才执行策略。

语句中attributes-match引用的事件必须是触发器事件或事件策略within语句中包含的关联事件。在以下语句中attributes-match,必须定义一个或多个within语句:

  • 包括或 equals starts-with 比较

  • 包括一个 matches 比较,该比较包括非触发事件的事件的子句。

attributes-match 句可以包含多个 equalsmatchesstarts-with 比较语句。系统使用逻辑 AND 运算符评估多个比较语句。因此,要执行事件策略,所有 attributes-match 条件的计算结果都必须为 true。

例如,假设您配置了多个实时性能监控 (RPM) 探测,其中一个探测使用所有者名称 Connectivity ,并且具有名为 Management的测试。如果在事件策略中引用探 ping_test_failed 针的事件,则需要区分哪个 RPM 探针测试生成了该事件。以下事件策略与 ping_test_failed 事件的 test-ownertest-name 属性匹配,以便仅针对正确的探测触发事件策略。仅当两个匹配条件都为真时,才会执行事件策略。

同样,在具有 messages 属性的非标准 SYSTEM 事件上触发以下事件策略。在 attributes-match 语句中,所有 matches 语句都必须为 true,才能调用事件策略:

您可以在语句中使用 attributes-match 事件策略变量来区分触发事件属性和关联事件属性。触发事件是在层次结构级别上配置 [edit event-options policy policy-name events] 的事件。双美元符号 ($$) 表示法表示正在触发策略的事件,并 {$$.attribute-name} 解析为触发事件的属性值。对于关联事件,带有事件名称 ($event) 表示法的单个美元符号表示与事件名称匹配的最新事件,并 {$event.attribute-name} 解析为与该事件关联的属性值。

例如,如果在 5 分钟内执行了 4 次或更多提交,并且一个或多个关联事件的用户名与触发事件的用户名相同,则以下事件策略将执行语句下的 then 作。

有许多方法可以查找可以为特定事件引用的属性,例如:

  • 使用 系统日志浏览器

  • help syslog event在 CLI 中使用作模式命令。

  • 配置属性时,在配置模式中使用上下文相关帮助。

系统日志浏览器应用程序允许您搜索给定作系统和版本的标准系统日志消息。消息详细信息包括可以为该事件引用的属性。

或者,在 CLI 中, help syslog event 作模式命令还会显示可以为给定事件引用的属性列表。命令输出以尖括号 (<>) 显示事件属性。以下输出显示 ACCT_ACCOUNTING_SMALL_FILE_SIZE 该事件具有三个可以引用的属性: filenamefile-sizerecord-size

注意:

您可以使用竖线 (|) 符号过滤搜索输出。有关使用管道符号的详细信息,请参阅 CLI 用户指南

您还可以通过在[edit event-options policy policy-name]层次结构级别发出set attributes-match event?配置模式命令来查看事件属性,如以下示例所示:

注意:

在此 set 命令中,事件名称和问号 (?) 之间没有空格。

如何在事件策略中表示触发和关联事件

在事件脚本参数和支持的事件策略语句(如语句) 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}- 带有星号 ($*) 表示法的美元符号表示与任何相关事件匹配的最新事件。该变量解析为与与策略配置中指定的任何关联事件匹配的最新事件关联的属性值。

在事件策略中,您可以使用事件策略变量引用特定事件。请考虑以下事件策略:

show interfaces {$$.interface-name}命令中,将e1事件、e2e3 的属性值interface-name替换为{$$.interface-name}变量。

show interfaces {$e4.interface-name}命令中,将替换最近e4事件的属性值interface-name{$e4.interface-name}代替变量。

show interfaces {$*.interface-name}命令中,将用最近e4e5e6事件的属性值interface-name替换变量{$*.interface-name}。如果 、e2、或 e3 之一e1在 、 e5、 或 e6之后 e460 秒内出现,则该相关事件的属性值 interface-namee4e5、或e6) 将替换为{$*.interface-name}变量。如果关联事件没有interface-name属性,则软件不会执行命令show interfaces {$*.interface-name}

如果e1e4e5的 60 秒内发生,则将属性的interface-namee4值替换{$*.interface-name}为变量。这是因为事件进程 (eventd) 按语句中within配置的顺序搜索关联事件。在本例中,顺序为 e4 > e5 > e6

示例:根据在指定时间间隔内接收到的其他事件来关联事件

此示例中的事件策略发出一组命令,并将生成的输出文件上传到存档站点。如果其中一个触发事件event3、、或 event5在其中一个相关事件event2event1或发生后的 60 秒内发生,则event4执行该策略。该策略的伪代码如下所示:

事件策略在配置中指定两个存档站点。设备会尝试传输到列表中的第一个存档站点,仅当传输失败时才会移动到下一个站点。事件策略配置为:

示例:基于事件属性关联事件

在以下事件策略中,如果两个事件的事件属性值匹配,则这两个事件是相关的。对两个事件的属性进行匹配可确保这两个事件相关。在这种情况下,接口地址必须匹配,物理接口 (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。