はじめに
このドキュメントでは、YANGスイートを使用してCisco IOS®-XEデバイスでモデル駆動型テレメトリを設定し、サンプルのテレメトリリモートプロシージャコール(RPC)を実行する方法について説明します。
前提条件
要件
次の項目に関する知識があることが推奨されます。
- テレメトリを使用するときに必要なデータを理解するには、YANGの知識が必要です。
- get、get-config、edit-configなどのNETCONF操作に関する知識。
使用するコンポーネント
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
- Cisco IOS XE 17.3.3を使用したCSR1000V
- Cisco YANG Suiteバージョン2.8
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
関連製品
このドキュメントは、Cisco IOS XEデバイス(Cisco Catalyst 9000スイッチ、Cisco ASR 1000、ISR 4000、およびCSR 1000ルータを含む)にも適用できます。
背景説明
YANG Suiteをインストールする必要があります。YANG Suiteのインストールの詳細については、ドキュメントまたはGithubリポジトリを参照してください。
NETCONF-YANGは、NETCONFを使用しない場合でも、デバイス上で設定および実行する必要があります。NETCONF設定の詳細については、ドキュメントを参照してください。
対象のデバイスに関連付けられたデバイスプロファイル、YANGリポジトリ、およびYANGモジュールセットがYANG Suiteに存在している必要があります。デバイスプロファイル、YANGリポジトリ、およびYANGモジュールセットの作成方法の詳細については、YANG Suiteのマニュアルの「デバイスプロファイルの管理」を参照してください。
モデル駆動型テレメトリに関する情報
テレメトリは、測定データやその他のデータをリモートまたはアクセスできないポイントで収集し、モニタリングのために受信機器に送信する自動通信プロセスです。モデル駆動型テレメトリは、YANGでモデル化されたデータをデータコレクタにストリーミングするメカニズムを提供します。
アプリケーションは、NETCONF、RESTCONF、またはgRPCネットワーク管理インターフェイス(gNMI)プロトコルを介して標準ベースのYANGデータモデルを使用して、必要な特定のデータ項目に登録できます。サブスクリプションは、コマンドライン(CLI)を使用して作成することもできます。
構造化データは、サブスクリプションの基準とデータタイプに基づいて、定義された期間(定期的)または変更時にパブリッシュされます。
テレメトリロール
テレメトリを使用するシステムでは、さまざまな役割が関係します。このドキュメントでは、次のテレメトリの役割について説明します。
- パブリッシャ:テレメトリデータを送信するネットワーク要素。
- レシーバ:テレメトリデータを受信します。これはコレクタとも呼ばれます。
- コントローラ:サブスクリプションを作成するが、テレメトリデータを受信しないネットワーク要素。購読に関連付けられたテレメトリデータが作成され、受信者に送信されます。これは、管理エージェントまたは管理エンティティとも呼ばれます。
- 加入者:加入者を作成するネットワーク要素。技術的には、これもまたレシーバである必要はありませんが、このドキュメントでは両方とも同じです。
サブスクリプションの概要
購読は、テレメトリロール間の関連付けを作成し、そのロール間で送信されるデータを定義するアイテムです。
Cisco IOS XEシステムのテレメトリでは、動的サブスクリプションと設定済みサブスクリプションの2種類のサブスクリプションが使用されます。
ダイナミックサブスクリプションは、パブリッシャに接続するクライアント(サブスクライバ)によって作成され、ダイヤルインと見なされます。サブスクリプションを設定すると、パブリッシャはレシーバへの接続を開始し、その結果、レシーバはダイヤルアウトと見なされます。
サブスクリプションID
サブスクリプションは、32ビットの正の整数値で識別されます。設定済みサブスクリプションのIDはコントローラによって設定され、動的サブスクリプションのIDはパブリッシャによって設定されます。
データソースの仕様
サブスクリプション内のテレメトリデータのソースは、ストリームとフィルタを使用して指定されます。ストリームという用語は、関連する一連のイベントを指します。RFC 5277では、あるフォワーディング基準に一致するイベント通知のセットとしてイベントストリームが定義されています。
Cisco IOS XEは、yang-pushおよびyang-notif-nativeの2つのストリームをサポートします。
通常、ストリームからの一連のイベントはフィルタリングされます。異なるフィルタタイプは、異なるストリームタイプに使用されます。
このドキュメントでは、ストリームタイプとしてyang-pushを使用し、XPathフィルタを利用しています。
設定
YANG Suiteを使用した定期的なダイナミックサブスクリプションの設定
ダイナミックサブスクリプションは、パブリッシャに接続するサブスクライバによって作成され、その接続内のメカニズム(通常はRPC)を使用してサブスクリプションの作成を呼び出します。サブスクリプションの有効期間は、サブスクライバとパブリッシャ間の接続の有効期間に制限され、テレメトリデータはそのサブスクライバにのみ送信されます。これらのサブスクリプションは、パブリッシャまたはサブスクライバがリブートされても保持されません。インバンドの<establish-subscription> RPCを使用して、ダイナミックサブスクリプションを作成できます。<establish-subscription> RPCは、IETFテレメトリサブスクライバからネットワークデバイスに送信されます。RPCのstream、xpath-filter、およびperiodフィールドは必須です。
RPCが送信されると、パブリッシャからのRPC応答には、結果文字列を含む要素を持つメッセージが含まれます。
次の表に、<rpc-reply>メッセージの応答と応答の理由を示します。

YANG SuiteからRPCを送信して、定期的なサブスクリプションを設定できます。
XPathフィルタを取得する手順
XPathフィルタを取得するには、ストリーミングする必要があるデータを定義した後でYANG Suiteを利用できます。この例では、メモリ統計情報はストリーミングするデータです。
ステップ 1:YANG SuitのProtocols > NETCONFで、使用中のデバイスに関連付けられているYANGセットを選択します。この例では、YANGセットはCSR1000Vと呼ばれます。
ステップ 2:対象のデータを含むYANGモジュールをロードします。この例ではCisco-IOS-XE-memory-operです。
ステップ 3:YANGツリーで、XPathフィルタを取得するノードを探します。この例ではmemory-statisticです。このノードを右クリックして、Propertiesを選択します。
ステップ 4:表示されるポップアップウィンドウには、XPathフィルタを定義する2つのプロパティがあります。これらの値はXpathとPrefixです。

定期的なNETCONFダイナミックサブスクリプションを作成する手順
定期的なNETCONFダイナミックサブスクリプションを作成するには、IETF-event-notification YANGモジュールを使用する必要があります。
ステップ 1:YANG SuitのProtocols > NETCONFで、使用中のデバイスに関連付けられているYANGセットを選択します。この例では、YANGセットはCSR1000Vと呼ばれます。
ステップ 2:IETF-event-notifications YANGモジュールをロードします。
ステップ 3:NETCONF操作はOther RPCである必要があります。
ステップ 4:Deviceドロップダウンメニューで対象のデバイスを選択し、Open device window in a new window or in a new tabをクリックします。
ステップ 5:別のウィンドウが開いたら、Start Sessionをクリックして、デバイスとのアクティブなNETCONFセッションを確立します。これは、確立されたNETCONFセッションウィンドウの例です。

手順 6:前のウィンドウに戻ります。ietf-event-notificationツリーの下のノードで、establish-subscriptionノードを展開し、inputを選択します。
手順 7:stream、filter、およびupdate-triggerの値を定義する必要があります。
ストリーム:yang-push。
フィルタ: xpath-filter
XPathフィルタは次の形式にする必要があります。
/prefix:xpath
この例では、「XPathフィルタを取得する手順」セクションで取得したパラメータを使用します。
/memory-ios-xe-oper:memory-statistics/memory-statistic
ヒント: XPathフィルタの「/」の位置に注意してください
ステップ 8:update-triggerはセンチセカンド(1/100秒)単位の値です。 1000の期間を指定すると、10秒ごとに更新が取得されます。
ステップ 9:stream、filter、およびupdate-triggerの値を指定したら、Build RPCをクリックします。次の図に示すようなRPCが表示されます。

ステップ 10:これで、[RPCの実行]をクリックして、定期的なNETCONFダイヤルインサブスクリプションを作成できます。
ステップ 11NETCONFセッションが確立されたウィンドウにRPCメッセージが表示されます。
次の図は、送信されたRPCの例であり、OKメッセージで受信されたRPC応答です。これは、サブスクリプションが正常に完了したことを意味します。

次の図は、10秒ごとに受信されるメモリ統計情報データの例です。

YANGスイートを使用した変更時のダイナミックサブスクリプションの設定
「YANG Suiteによる定期サブスクリプションの設定」セクションで示したすべての手順がこのセクションに適用されます。唯一の違いは、update-trigger値にあります。ここでは、ダンプニング期間を値0で定義する必要があります。他の値は設定できません。
これは、CDPネイバーデータの変更時にサブスクリプションを確立するRPCの例です。

YANGスイートを使用した定期構成サブスクリプションの設定
設定済みのサブスクリプションは、コントローラによるパブリッシャ上の管理操作によって作成され、サブスクリプションによって定義されたテレメトリデータの受信者の指定を明示的に含みます。これらのサブスクリプションは、デバイスの設定の一部になると、パブリッシャのリブート後も保持されます。
設定されたダイヤルアウトサブスクリプションは、次のいずれかの方法でデバイスに設定されます。
- 設定CLIを使用して、コンソールまたはVTYを介してデバイス設定に変更する。
- NETCONF/RESTCONFを使用して、必要なサブスクリプションを設定します。
このドキュメントでは、CLIを使用してダイヤルアウトサブスクリプションを設定する方法については説明しません。代わりに、YANG SuiteからNETCONF RPCメッセージを送信してダイヤルアウトサブスクリプションを設定する方法を示します。
設定されたサブスクリプションでは、gRPCプロトコルが使用可能で、yang-pushストリームでのみ使用できます。gRPCトランスポートプロトコルでは、キー値のGoogleプロトコルバッファ(kvGPB)エンコードのみがサポートされます。
YANG Suiteを受信者として使用して、ダイヤルアウトサブスクリプションのサンプルをテストできます。
定期的な設定済みサブスクリプションを作成するには、Cisco-IOS-XE-mdt-cfg YANGモジュールを使用する必要があります。
ステップ 1:YANG Suiteで、Protocols > gRPC Telemetryの順に選択し、IPアドレスとポートを入力します。次に、YANG SuiteのStart telemetry receiverをクリックし、指定されたIPアドレスとポートでリスニングを開始します。
注:gRPC Telemetryオプションが使用できない場合は、YANG SuiteのAdmin > Manage pluginsページからプラグインをインストールできます

ステップ 2:Protocols > NETCONFの下で、使用中のデバイスに関連付けられているYANGセットを選択します。この例では、YANGセットはCSR1000Vと呼ばれます。
ステップ 3:Cisco-IOS-XE-mdt-cfg YANGモジュールをロードします。
ステップ 4:NETCONF操作はedit-configである必要があります。
ステップ 5:対象のデバイスを選択します。
手順 6:Cisco-IOS-XE-mdt-cfgツリーで、mdt-subscriptionノードにsubscription-id、stream、encoding、period、xpath-filterの値を定義する必要があります。また、受信側に関する情報:IPアドレス、ポート、プロトコル。
手順 7:この例では、次の値を使用します。
subscription-id:100
ストリーム:yang-push
エンコード:encode-kvgpb
期間: 1000
xpathフィルタ: /memory-ios-xe-oper:memory-statistics/memory-statistic

受信側に関する情報を定義する必要があります。
アドレス: <IPアドレス>
ポート: <port>
プロトコル:grpc-tcp

ステップ 8:[RPCをビルド]ボタンをクリックします。
ステップ 9:Run RPCをクリックします。
ステップ 10:成功すると、Protocols > gRPC Telemetryの下で情報が受信されるようになります。

YANGスイートを使用した変更時の設定済みサブスクリプションの設定
変更時のダイヤルアウトサブスクリプションを設定するには、「YANGスイートを使用する定期的に設定されるサブスクリプションの設定」で説明したプロセスと同じプロセスに従います。変更される唯一の値は、falseに設定する必要があるno-sync-on-startリーフです。
次の図は、変更時に設定されるサブスクリプションのRPCの例です。

確認
ここでは、設定が正常に機能しているかどうかを確認します。
show telemetry ietf subscription allを使用して、Cisco IOS XE上のテレメトリサブスクリプションに関する情報を表示します。
Device#
show telemetry ietf subscription all
Telemetry subscription brief
ID Type State Filter type
--------------------------------------------------------
100 Configured Valid xpath
2147483651 Dynamic Valid xpath
show telemetry ietf <subscriptionID> detailを使用して、サブスクリプションに関する詳細をリストします。
Device#show telemetry ietf 100 detail
Telemetry subscription detail:
Subscription ID: 2147483651
Type: Dynamic
State: Valid
Stream: yang-push
Filter:
Filter type: xpath
XPath: /memory-ios-xe-oper:memory-statistics/memory-statistic
Update policy:
Update Trigger: periodic
Period: 10000
Encoding: encode-xml
Source VRF:
Source Address:
Notes:
Receivers:
Address Port Protocol Protocol Profile
-----------------------------------------------------------------------------------------
10.88.246.10 57344 netconf
show telemetry internal connectionを使用して、受信側への接続のステータスを確認します。
Device# show telemetry internal connection
Telemetry connection
Peer Address Port VRF Source Address Transport State Profile
--------------- ----- --- --------------- ---------- ------------- -------------
10.88.246.10 57344 0 10.88.246.2 grpc-tcp Active
トラブルシュート
ここでは、設定のトラブルシューティングに使用できる情報を示します。
シナリオ 1.テレメトリサブスクリプションの状態が有効で、受信側でストリームを受信しない場合。
受信側への接続のステータスを確認します。
Device#show telemetry internal connection
Telemetry connection
Peer Address Port VRF Source Address Transport State Profile
--------------- ----- --- --------------- ---------- ------------- -------------
10.88.246.10 57350 0 10.88.247.86 grpc-tcp Connecting
状態がConnectingの場合は、パブリッシャとレシーバの間の接続が正しいことを確認します。
Device# ping
使用中のポートが開いていることを確認します。
Device# telnet
Trying 10.88.246.10, 57350 ...
% Connection refused by remote host
この例では、ポートはオープンでも到達可能でもありません。ポートをブロックできるファイアウォールがないことを確認し、指定されたポートが正しいことを確認します。
VRFを使用するデバイスでは、設定されたサブスクリプションに対して、RPC内の送信元VRF/送信元アドレスを指定する必要があります。次の図は、送信元VRFが指定されているRPCを示しています。

シナリオ 2.テレメトリサブスクリプションの状態が無効な場合。
Device# show telemetry ietf subscription all
Telemetry subscription brief
ID Type State Filter type
--------------------------------------------------------
200 Configured Invalid xpath
サブスクリプションの詳細を確認します。
Device# show telemetry ietf subscription 200 detail
Telemetry subscription detail:
Subscription ID: 200
Type: Configured
State: Invalid
Stream: yang-push
Filter:
Filter type: xpath
XPath: /memory-ios-xe-oper:/memory-statistics/memory-statistic
Update policy:
Update Trigger: periodic
Period: 1000
Encoding: encode-kvgpb
Source VRF:
Source Address:
Notes: XPath parse error 'Invalid expression: offset(21)' 58.
Receivers:
Address Port Protocol Protocol Profile
-----------------------------------------------------------------------------------------
10.88.247.89 57344 grpc-tcp
XPathフィルタの構文に注意してください。このフィルタには「:」の後に余分な「/」が付いています。正しいXPathフィルタは次のとおりです。
/memory-ios-xe-oper:memory-statistics/memory-statistic
XPathフィルタで文字が見つからない、余分な文字が含まれているなどの構文エラーが発生すると、サブスクリプションが無効になる可能性があります。
YANG Suiteツールのサポートが必要な場合は、サポートメーラーまたはサポートフォーラムにお問い合わせください。
関連情報