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 会话的基础传输会话。