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

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

了解相关事件

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

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

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

该 within 语句定义了在触发事件之前的指定时间间隔内必须(或不得)发生的相关事件。该 attributes-match 语句使系统能够考虑事件的属性。该 attributes-match 语句可以将事件的属性与另一个事件的属性或正则表达式相关联。只有当满足指定条件时,事件策略才会执行语句中 then 配置的操作。以下部分讨论如何使用这些语句。

按时间间隔关联事件

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

例如,如果其中一个触发事件 event3、 event4或 event5在其中一个相关事件event2event1或 之后的 60 秒内发生,则设备将执行以下策略。

要将事件策略配置为仅在多个事件后指定时间间隔内发生触发事件时才执行,必须配置单独 within 的语句。每个 within 语句必须使用不同的时间间隔。配置多个 within 语句时,每个语句都必须有一个匹配事件,该事件必须在其各自的时间范围内发生,策略才能触发。因此,系统会使用逻辑“与”来评估语句。

例如,如果其中一个触发事件 、 event4event5或 event6发生在之后的 60 秒event1内,并且在任一 event2 或 event3之后的 50 秒内也发生,则设备将执行以下策略。

要配置事件策略以按时间间隔关联事件:

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

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

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

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

    • 要指定多个相关事件必须在触发事件发生之前的指定时间间隔内发生,请包含多个 within 语句,每个语句定义不同的时间间隔。

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

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

基于事件属性关联事件

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

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

它具有以下三个属性:username、 和 commandmessage。

该attributes-match语句使您能够通过使用 equals、 和 matchesstarts-with 比较将事件属性与所需值进行比较来构建更精确的事件策略匹配。该语句按如下方式关联事件:

  • event1.attribute-name equals event2.attribute-name—仅当属性和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语句:

  • 包括或equalsstarts-with比较

  • 包括一个 matches 比较,其中包括一个子句,该子句是不是触发事件的事件。

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

例如,假设您配置了多个实时性能监控 (RPM) 探针,其中一个探针使用所有者名称Connectivity,并具有名为 Management的测试。如果在事件策略中引用探测的ping_test_failed事件,则要区分哪个 RPM 探测测试生成了事件。以下事件策略与事件和test-ownertest-name属性匹配ping_test_failed,以便事件策略仅针对正确的探测触发。仅当两个匹配条件均为 true 时,才会执行事件策略。有关示例的详细说明,请参阅示例:根据时间间隔和事件属性关联事件。

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

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

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

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

  • 使用 系统日志资源管理器 工具。

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

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

系统日志资源管理器应用程序使您能够搜索给定操作系统和版本的标准系统日志消息。消息详细信息包括可以为该事件引用的属性。此外,属性字段还列出了该事件的所有属性。

在 CLI 中,help syslog event操作模式命令还会显示可为给定事件引用的属性列表。命令输出在尖括号 (<>) 中显示事件属性。以下输出显示事件ACCT_ACCOUNTING_SMALL_FILE_SIZE具有三个属性:filename、 和 file-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},将 event e1, e2or 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替换为变量。如果 、 或 之一e1发生在 、 或 e6之后的 60 e5秒e4内,则将该相关事件的属性值 interface-name (e4 , e5或 e6) 替换{$*.interface-name}为该e3变量。 e2如果关联事件没有interface-name属性,则软件不会执行命令show interfaces {$*.interface-name}。

如果在两个 和 的 的 60 秒内发生,则e1{$*.interface-name}该变量使用 的属性e4值 interface-name 。e5e4策略使用e4,因为事件进程 (eventd) 按语句中within配置的顺序搜索相关事件。在这种情况下,顺序> e5 >e4e6。

示例:基于时间间隔关联事件

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

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

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

在以下事件策略中,如果两个事件的事件属性值匹配,则这两个事件是相关联的。匹配两个事件的属性可确保两个事件相关。在这种情况下,接口地址必须匹配,物理接口 (ifd) 名称也必须匹配。

当路由协议进程 (rpd) 向内核发送更改接口状态的请求,但请求失败时,就会发生错误 RPD_KRT_IFDCHANGE 。如果接口配置了路由器发现,但接口不按要求支持 IP 组播操作,则会发生此 RPD_RDISC_NOMULTI 错误。

示例:根据时间间隔和事件属性关联事件

在以下示例中,组织希望记录所有导致与管理网络断开连接的失败配置。该组织使用实时性能监控 (RPM) 测试设置,每分钟验证管理网络的可访问性。操作员始终使用 commit confirmed CLI 命令提交更改。 commit confirmed 如果配置更改影响连接,该命令会自动回滚配置。

事件策略执行事件脚本 save-rollback.slax,以将自动回滚覆盖的失败配置复制到特定位置。事件脚本将 /config/juniper.conf.1.gz 回滚文件复制到 /var/tmp 目录中,以便存储和以后检查。

事件策略触发事件是UI_COMMIT_NOT_CONFIRMED事件。当设备自动回滚已确认的提交时,会发生此事件。当系统触发提交确认回滚时,UI_COMMIT_NOT_CONFIRMED事件会发生两次。第一个事件消息表示回滚正在进行中,第二个事件消息表示回滚已完成。因此,事件策略必须将两个UI_COMMIT_NOT_CONFIRMED事件关联起来,以便系统不会触发事件策略两次。在此示例中,第二个UI_COMMIT_NOT_CONFIRMED事件必须在第一个事件发生后的 50 秒内发生。

为了确定配置是否导致与管理网络的连接中断,事件策略还会将UI_COMMIT_NOT_CONFIRMED事件与 RPM 探测的PING_TEST_FAILED事件相关联。当管理网络的 RPM 测试失败时,将发生PING_TEST_FAILED事件。在此示例中,UI_COMMIT_NOT_CONFIRMED事件必须在PING_TEST_FAILED事件发生后的 60 秒内发生。要指定生成事件的 RPM 探测测试,事件策略将包含该 attributes-match 语句,并且仅在事件的 test-owner 属性匹配 Connectivity 且事件的 test-name 属性匹配 Management时才触发。

事件策略为PING_TEST_FAILED事件和第一个UI_COMMIT_NOT_CONFIRMED事件配置单独 within 的语句。通过使用多个 within 语句,必须同时发生这两个条件才能触发事件策略。每个 within 语句需要不同的时间间隔。同样,策略必须同时 attributes-match 满足这两个条件才能触发策略。

事件策略配置如下:

save-rollback.slax事件脚本如下:

当运行 Junos OS 的设备触发事件策略时,设备会使用包含时间戳的新文件名将回滚配置文件保存在 /var/tmp 目录中。