NETCONF イベント通知
NETCONF クライアントは、NETCONF セッションでイベント通知を購読して、デバイスの操作や管理アクティビティに影響を与える可能性のあるイベントのアラートを受信できます。
NETCONF イベント通知の概要
Junos OS Evolvedを実行している一部のデバイスは、NETCONFサーバーとNETCONFクライアント間の非同期イベント通知サービスであるNETCONFイベント通知をサポートしています。通知サービスを有効にすると、NETCONFサーバーは、通知を購読しているすべてのNETCONFクライアントに、イベントが発生すると同時に非同期にイベント通知を送信します。クライアントは、NETCONF通知を購読して、デバイスの運用や管理アクティビティに影響を与える可能性のあるイベントのアラートを受信できます。
NETCONF サーバーは、以下のタイプのイベントに対して通知を送信します。
netconf-session-start—NETCONFセッションがいつ開始されたかを示し、セッションを開始したユーザーを識別します。netconf-session-end—NETCONFセッションがいつ終了し、セッションを所有していたユーザーとセッションが終了した理由を示します。netconf-config-change- 管理セッションがアクティブな設定への変更をコミットしたことを示し、変更の概要を提供します。
サポートされているデバイスで、NETCONF イベント通知サービスを有効にできます。手順については 、NETCONF イベント通知を有効にしてサブスクライブする方法 を参照してください。インター リーブ機能で説明されているように、オプションでインターリーブ機能を設定することで、NETCONFクライアントが通知を購読し、同じNETCONFセッションでRPCを送信できるようになります。
NETCONF 通知またはテレメトリ データのいずれか 1 つの通知セットのみを一度に設定してストリーミングすることをお勧めします。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>- 関心のあるイベントのストリーム。ストリームは、いくつかの転送条件に一致する一連のイベント通知です。サブスクリプションは、サブスクリプションの有効期間中、1 つのストリームにバインドされます。
NETCONFストリームはデフォルトで、Junosデバイス上で唯一サポートされているストリームです。NETCONF サーバは、サブスクリプション要求が他のストリームに対するものである場合、エラーを返します。このパラメーターを省略すると、デバイスはサブスクリプション要求をNETCONFストリームの要求として扱います。 -
<filter>- 考えられるすべてのイベントのサブセットを選択するサブツリー フィルター。NETCONF クライアントがフィルタを指定した場合、サーバはフィルタで選択されたイベントのみを転送します。クライアントがフィルターを指定しない場合、サーバーはすべてのイベントを転送します。Junos OS Evolvedは、トップレベルフィルターのみをサポートしており、この要素に対するXPATHフィルターの使用はサポートしていません。詳細については、 フィルタリング機能 を参照してください。
NETCONFクライアントがイベント通知にサブスクライブすると、NETCONFサーバーは発生時に通知を送信します。通知は、NETCONF セッションが終了するまで続きます。
NETCONF クライアントは、デフォルトですべてのイベント通知を受信します。ユーザー権限に基づいて通知の内容を制限または制限する方法はありません。一部のイベント ( netconf-config-change イベントなど) には機密情報が含まれる場合があるため、情報への読み取りアクセスを制御することが重要です。
NETCONF イベント通知の詳細については、次の RFC を参照してください。
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セッションの総数が削減されます。この機能をサポートするデバイスでインターリーブ機能を使用するには、[edit system services netconf notification]階層レベルで interleave ステートメントを設定する必要があります。
NETCONFクライアントは、例えば <close-session> や <kill-session> 操作で、NETCONFセッションまたはNETCONFセッションの基盤となるトランスポートセッションのいずれかを終了させることで、サブスクリプションを終了します。インターリーブ機能を有効にすると、クライアントは同じセッション内から <close-session> 操作を実行してセッションを終了できます。インターリーブ機能を有効にしない場合、クライアントは、例えば別のセッションから <kill-session> 操作を実行するなどして、セッションを終了できます。
フィルタリング機能
NETCONF クライアントがイベント通知を購読すると、クライアントはストリーム内のすべてのイベント通知を購読するか、イベント通知のサブセットを購読できます。イベント通知のサブセットをサブスクライブするために、クライアントは <create-subscription> RPC に省略可能な <filter> 要素を含めます。サブスクリプション要求にフィルターが含まれている場合、フィルターはイベントストリーム内の各通知に適用され、NETCONFサーバーは一致するイベントのみをクライアントに転送します。それ以外の場合、サーバーはすべてのイベントを転送します。
<create-subscription> 操作の <filter> パラメータ形式は、他の NETCONF 操作の filter パラメータ形式と同様です。これは、目的のイベント通知を選択するサブツリーフィルターを囲みます。ただし、<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クライアントに送信します。
この例では、以下のハードウェアとソフトウェアが必要です。
-
NETCONF イベント通知サービスをサポートする Junos OS Evolved リリース 21.2R1 以降を実行するデバイス。サポートされているデバイスについては、 機能エクスプローラー を参照してください。
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 セッションの基盤となるトランスポート セッションを終了します。