NETCONF 活动通知
NETCONF 客户端可以订阅 NETCONF 会话中的事件通知,以接收可能会影响设备作或管理活动的事件警报。
NETCONF 活动通知概述
运行 Junos OS 演化版的某些设备支持 NETCONF 事件通知,这是 NETCONF 服务器和 NETCONF 客户端之间的异步事件通知服务。启用通知服务后,NETCONF 服务器会在事件发生时异步向所有订阅通知的 NETCONF 客户端发送事件通知。客户端可以订阅 NETCONF 通知,以接收可能影响设备作或管理活动的事件警报。
NETCONF 服务器发送以下类型事件的通知:
netconf-session-start
- 指示 NETCONF 会话何时启动并标识启动会话的用户。netconf-session-end
—指示 NETCONF 会话结束的时间,并标识拥有该会话的用户以及会话终止的原因。netconf-config-change
—指示管理会话何时对活动配置提交更改,并提供更改摘要。
您可以在支持的设备上启用 NETCONF 事件通知服务。有关说明,请参阅 如何启用和订阅 NETCONF 事件通知 。您可以选择性地配置交错功能,使 NETCONF 客户端能够在同一 NETCONF 会话中订阅通知并发送 RPC,如 交错功能中所述。
我们建议您一次只能配置和流式传输一组通知,即 NETCONF 通知或遥测数据。如果将设备配置为启用 NETCONF 通知,则设备会通过 NETCONF 通道流式传输所有通知,而不会通过 gRPC 流式传输遥测通知。
启用 NETCONF 事件通知后,NETCONF 服务器会在 notification
功能交换中播发功能和 interleave
功能。
<nc:hello xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <nc:capabilities> ... <nc:capability>urn:ietf:params:netconf:capability:notification:1.0</nc:capability> <nc:capability>urn:ietf:params:xml:ns:netconf:notification:1.0</nc:capability> <nc:capability>urn:ietf:params:netconf:capability:interleave:1.0</nc:capability> <nc:capability>urn:ietf:params:xml:ns:netmod:notification</nc:capability> ... </nc:capabilities> <nc:session-id>29862</nc:session-id> </nc:hello>
要为特定设备上的事件订阅通知服务,NETCONF 客户端会向设备上的 NETCONF 服务器发送 <create-subscription>
RPC,并指示以下内容:
-
<stream>
- 感兴趣的事件流。流是一组与某些转发条件匹配的事件通知。订阅在订阅的生存期内绑定到单个流。该
NETCONF
流是默认流,仅在 Junos 设备上受支持。如果订阅请求是针对任何其他流的,则 NETCONF 服务器将返回错误。省略该参数后,设备会将订阅请求视为流请求NETCONF
。 -
<filter>
- 选择所有可能事件的子集的子树过滤器。如果 NETCONF 客户端指定了过滤器,则服务器只会转发过滤器选择的事件。如果客户端未指定筛选器,则服务器将转发所有事件。Junos OS 演化版仅支持顶级筛选器,不支持对此元素使用 XPATH 筛选器。有关详细信息,请参阅 过滤功能 。
NETCONF 客户端订阅事件通知后,NETCONF 服务器会在发生通知时发送通知。这些通知将一直持续到 NETCONF 会话终止。
默认情况下,NETCONF 客户端接收所有事件通知。无法基于用户权限限制或限制通知的内容。由于某些事件(例如事件 netconf-config-change
)可能包含敏感信息,因此控制对信息的读取访问非常重要。
有关 NETCONF 事件通知的更多信息,请参阅以下 RFC:
-
RFC 5277,NETCONF 事件通知
-
RFC 6470, 网络配置协议 (NETCONF) 基本通知
NETCONF 事件通知格式
NETCONF 事件通知是格式正确的 XML 文档。当 NETCONF 服务器收到内部事件时,它会将其转换为具有顶级 <notification>
元素和 <eventTime>
子元素的相应 XML 编码。通知中包含的实际内容取决于事件。
订阅请求可以包括针对特定类型通知的筛选器。如果订阅请求包含筛选器,则用户定义的筛选器将应用于事件流中的每个通知,并且 NETCONF 服务器仅将匹配的事件转发到客户端。
以下示例事件通知包含一个 netconf-config-change
事件。通知会捕获事件时间戳、提交时间戳、提交配置更改的用户以及这些更改的摘要。
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> <eventTime>2021-04-15T11:39:41-07:00</eventTime> <netconf-config-change xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"> <change-time>2021-04-15T18:39:41Z</change-time> <changed-by> <username>admin</username> <session-id>29862</session-id> <source-host>198.51.100.25</source-host> </changed-by> <datastore>running</datastore> <edit> <target xmlns:junos-conf-root="http://yang.juniper.net/junos/conf/root" xmlns:junos-conf-interfaces="http://yang.juniper.net/junos/conf/interfaces">/junos-conf-root:configuration/junos-conf-interfaces:interfaces/junos-conf-interfaces:interface[junos-conf-interfaces:name='et-0/0/0']/junos-conf-interfaces:description</target> <operation>replace</operation> </edit> </netconf-config-change> </notification>
以下通知包含示例 netconf-session-start
和 netconf-session-end
事件:
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> <eventTime>2021-04-15T11:28:51-07:00</eventTime> <netconf-session-start xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"> <username>admin</username> <session-id>29862</session-id> <source-host>198.51.100.25</source-host> </netconf-session-start> </notification>
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> <eventTime>2021-04-15T11:49:06-07:00</eventTime> <netconf-session-end xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"> <username>admin</username> <session-id>29862</session-id> <source-host>198.51.100.25</source-host> <termination-reason>closed</termination-reason> </netconf-session-end> </notification>
交错功能
默认情况下,NETCONF 客户端在 NETCONF 会话中订阅事件通知后,无法同时在同一会话中发送 RPC。交错功能使 NETCONF 客户端和服务器能够在用于通知的同一 NETCONF 会话中继续交换 RPC 和 RPC 回复。交错功能可减少 NETCONF 会话的总数,因为通知不需要专用的 NETCONF 会话。要在支持此功能的设备上使用交错功能,必须在层次结构级别配置 interleave
语句 [edit system services netconf notification]
。
NETCONF 客户端通过终止 NETCONF 会话或 NETCONF 会话的底层传输会话(例如,使用 <close-session>
或 <kill-session>
作)来结束订阅。如果启用交错功能,则客户端可以通过从同一会话中执行 <close-session>
作来终止会话。如果未启用交错功能,客户端可以终止会话,例如,通过从另一个会话执行 <kill-session>
作。
过滤能力
当 NETCONF 客户端订阅事件通知时,客户端可以订阅流中的所有事件通知,也可以订阅事件通知的子集。若要订阅事件通知的子集,客户端在 RPC 中<create-subscription>
包含可选<filter>
元素。如果订阅请求包含筛选器,则筛选器将应用于事件流中的每个通知,并且 NETCONF 服务器仅将匹配的事件转发到客户端。否则,服务器将转发所有事件。
该作的<filter>
参数格式与其他 NETCONF作的filter
参数格式<create-subscription>
类似。它包含一个子树过滤器,用于选择所需的事件通知。但是,在执行该作的情况下<create-subscription>
,Junos 设备仅支持与所附通知的顶级元素匹配的子树过滤器,例如 <netconf-config-change>
。筛选器应用于流中的通知,并且仅针对包装器的内容<notification>
。
Junos 设备不支持使用 XPath 过滤通知。
过滤特定通知时,必须在标记中包含适当的命名空间。如果未指定命名空间,则事件通知将与过滤器不匹配,并且 NETCONF 服务器不会转发通知。在以下示例中,订阅请求返回所有 NETCONF 事件通知的子集。筛选器仅 <netconf-config-change>
选择和转发事件和 <oc-ifl-event>
事件。
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <create-subscription xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> <filter type="subtree"> <netconf-config-change xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"></netconf-config-change> <oc-ifl-event xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"></oc-ifl-event> </filter> </create-subscription> </nc:rpc> ]]>]]>
如何启用和订阅 NETCONF 事件通知
必须先在设备上启用 NETCONF 事件通知服务,然后 NETCONF 客户端才能订阅 NETCONF 会话中的事件通知。启用服务后,NETCONF 客户端通过向 NETCONF 服务器发送订阅请求来订阅以接收事件通知。NETCONF 服务器回复指示请求是否成功。如果请求成功,服务器会在事件发生时向 NETCONF 客户端发送异步事件通知,直到 NETCONF 会话终止。
此示例需要以下硬件和软件:
-
运行 Junos OS 演化版 21.2R1 或更高版本且支持 NETCONF 事件通知服务的设备。请参阅 功能浏览器 了解支持的设备。
要启用和订阅 NETCONF 事件通知,请执行以下作:
启用 NETCONF 事件通知服务
要使客户端能够订阅 NETCONF 会话中的事件通知,请执行以下作:
订阅以接收活动通知
在设备上启用 NETCONF 事件通知服务后,NETCONF 客户端可以订阅以接收 NETCONF 会话中的事件通知。NETCONF 客户端可以在订阅请求中包含以下可选参数:
-
<stream>
- 感兴趣的事件流。默认且唯一可接受的值为NETCONF
。 -
<filter>
- 子树过滤器,用于选择所有可能事件的子集。
要订阅 NETCONF 会话中的事件通知:
终止订阅
NETCONF 客户端通过终止 NETCONF 会话或 NETCONF 会话的底层传输会话来终止接收事件通知的订阅。
-
如果启用了交错功能,请在 NETCONF 会话中发出
<close-session/>
作。<rpc><close-session/></rpc>
-
从外部 NETCONF 会话发出
<kill-session>
作,并指定要结束的 NETCONF 会话的会话 ID(如初始<hello>
交换元素中<session-id>
所定义)。<rpc><kill-session><session-id>29862</session-id></kill-session></rpc>
-
终止 NETCONF 会话的基础传输会话。