Cisco Model Driven Telemetryの参考資料メモ

# はじめに
Cisco Model Driven Telemetry初心者が、OSSを組み合わせて環境構築する際に参考にした資料のメモです。
今回は**Cisco IOS XEをメインに**まとめていますが、IOS-XRやNX-OSでもサポートされていますし、Telemetry自体は他ベンダー製品でもサポートされています。
ご参考までに、個人的に役に立った度合いを3段階で分けています。（記事の良し悪しというより、後で自分がどれを読み返すかが基準なので悪しからず。）
★★★： Must Read　　★★： Recommended Read　　★： FYI

# 1. Model Driven Programmabilityの概要

(1) ★★ [DevNet Learning Labs - モデル駆動型プログラマビリティの紹介](https://developer.cisco.com/learning/modules/dnav3-intro-mdp-jp)
モデル駆動型プログラマビリティの概要、NETCONFとRESTCONFの使い方が非常に分かりやすくまとめられている。
NETCONFでは、ターミナルから直接XMLを送信したり、ncclientというPythonベースのクライアントツールで操作したりする演習を行う。RESTCONFでは、PostmanでCRUD（Create/Read/Update/Delete）の演習を一通り実施。
Pythonちょっとかじったことあるけど、モデル駆動って何？という方はまずこれから学習するとよいと思う。


# 2. Model Driven Telemetryの概要 (Cisco資料)

(1) ★★★ [JANOG - Telemetryについて](https://www.janog.gr.jp/wg/telemetry-wg/wp-content/uploads/2018/06/20180518_Cisco_Telemetry_WG01.pdf)
CiscoのTelemetry概要やOSSのツールについて、日本語で分かりやすくまとめられている。
![無題0816-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/476aa208-03c2-5cdc-5baa-7b0b48f286db.png)
※出典: Telemetryについて p.24

(2) ★★★ [CLUS2019 - Application Hosting and Model Driven Telemetry on IOS XE](https://www.ciscolive.com/c/dam/r/ciscolive/us/docs/2019/pdf/BRKCRS-2004.pdf)
IOS XEのTelemetryだけでなく、Application Hostingの資料としても参考になる。
（余談だが、最後にCatalyst9300、SD-Access、Wireless、IOS XE Programmability、DNA Assuarance、SD-WANのBooksprintも紹介されていて、地味にありがたい。）

(3) ★★★ [CLUS2019 - Advanced Topics in Cisco IOS Telemetry](https://www.ciscolive.com/c/dam/r/ciscolive/us/docs/2019/pdf/BRKSPG-2503.pdf)
モデル駆動のManagement、Telemetryにおいて、ツールチェーンの関係性がまとまっている。
![無題0815-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/7c865790-784a-46c8-071b-79dcbf59cda4.png)
※出典: CLUS2019 - BRKSPG-2503 Advanced Topics in Cisco IOS Telemetry p.16
![無題0815-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/966bc7da-198e-0e08-9a84-a4bbcf5f9f6d.png)
※出典: CLUS2019 - BRKSPG-2503 Advanced Topics in Cisco IOS Telemetry p.19

また、Encoding、Protocol、Collector、Datastore、Dashboardが色々ある中、どれを使うべきか判断する上でも参考になる。
Protocolは、今のところgRPCがベスト。将来的にはgNMIに抜かれる可能性あり。Encodingは、KV-GPBがデータ効率性と使い易さのバランスが取れていそう。
![無題0815-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/0dfdf397-1301-c28c-a60b-ca94b7b5d394.png)
※出典: CLUS2019 - BRKSPG-2503 Advanced Topics in Cisco IOS Telemetry p.43

Datastore（+Collector、Dashboard）については、時系列データベースとして、従来のElasticsearch（+Logstash、Kibana、Beatsを加えたElastic Stack）以外にも、InfluxDB (+Telegraf、Grafanaを加えたTIG Stack)なども出てきている。
性能面を見ると、ElasticsearchよりInfluxDBとかの方が優秀そう。
![無題0815-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/1cb310e0-7089-2250-7c67-1b21778b8373.png)
※出典: CLUS2019 - BRKSPG-2503 Advanced Topics in Cisco IOS Telemetry p.86

Ciscoの各機種・バージョンのサポート状況もまとまっている。(p.104～108)

(4) ★ [DevNet Learning Labs - IOS-XR Streaming Telemetry](https://developer.cisco.com/learning/modules/iosxr-streaming-telemetry)
IOS-XRにおけるTelemetryの概要、PythonやC++でのコレクタの自作、デプロイのハンズオン。レベル高め。


# 3. Model Driven Telemetryの概要 (その他資料)

(1) ★★ [Telemetry入門](https://qiita.com/dedepi92/items/52f9b4ee3710b055f66a)
概要がコンパクトにまとまっている。

(2) ★★ [ネットワークが創生する価値 再考②：脚光を浴び始めたTelemetry とは – 前編 –](https://www.netone.co.jp/report/column/column1/20171129.html)
(3) ★★ [ネットワークが創生する価値 再考②：脚光を浴び始めた Telemetry とは – 後編 –](https://www.netone.co.jp/report/column/column1/20171206.html)
Telemetry登場の背景、解説、Netone Telemetry PoC概要が記載されている。


# 4. Model Driven Telemetryの実装 (NW機器側)

(1) ★★ [Programmability Configuration Guide, Cisco IOS XE Gibraltar 16.10.x](https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/prog/configuration/1610/b_1610_programmability_cg/model_driven_telemetry.html)
Model-Driven Telemetryの章で、概要をはじめ、IOS XEへのTelemetry設定方法や確認コマンドが記載されている。
注意点として、Telemetryを使う上で`netconf-yang`設定は必須。
※具体的な設定例は、別記事でご紹介する予定です。


# 5. Model Driven Telemetryの実装例
ツールの組み合わせが膨大なことが、個人的に理解しづらい要因だったので、具体的な実装例と使用ツールを整理してみました。

(1) ★★★ [nccでIOX XEのModle Driven Telemetryを試す](https://qiita.com/tetsusat/items/cb8e62acd0524b20814c)
CiscoDevnetから公開されているnccを使って、CLIで性能情報を取得する例。DatastoreやDashboardを使わない単純な例なので、とっかかりには良いと思う。

- NW Device: Cisco IOS XE
- Encoding: XML
- Protocol: NETCONF
- Collector: Python (DevNet ncc)

(2) ★ [Streaming Telemetry Quick Start Guide](https://developer.cisco.com/docs/ios-xe/#!streaming-telemetry-quick-start-guide)
以下パターンの概説。

- NW Device: Cisco IOS XE
- Encoding: XML
- Protocol: NETCONF
- Collector: Kafka
- Data Transfer/Datastore/Dashboard: Logstash/Elasticsearch/Kibana (Elastic Stack)

(3) ★★ [番外編：OSSツールで作る、Telemetry初めの一歩 – 前編 –](https://www.netone.co.jp/report/column/column1/20180731.html)
(4) ★★ [番外編：OSSツールで作る、Telemetry初めの一歩 – 後編 –](https://www.netone.co.jp/report/column/column1/20180905-2.html)
以下パターンの構築手順。

- NW Device: Cisco IOS-XRv、Juniper vMX、Arista vEOS
- Encoding: GPB (Cisco)、JSON (Arista)
- Protocol: gRPC
- Collector: pipeline (Cisco)、ockafka (Arista)
- Collector (分散メッセージングシステム): Kafka (Docker)
- Data Transfer/Datastore/Dashboard: Logstash/Elasticsearch/Kibana (Elastic Stack)

(5) ★★ [bigmuddy-network-telemetry-stacks](https://developer.cisco.com/codeexchange/github/repo/cisco/bigmuddy-network-telemetry-stacks/)
ツールセットをまとめてデプロイできるので、簡単にお試しできる。様々なパターンに対応していて、比較的最近出てきたIOS XEのKV-GBP/gRPCにも対応している模様。
https://github.com/cisco/bigmuddy-network-telemetry-pipeline/issues/16

(6) ★ [Nexus9000v で Telemetry](http://kakkotetsu.hatenablog.com/entry/2017/10/09/011020)
以下パターンの構築手順。

- NW Device: Cisco NX-OS
- Encoding: GPB
- Protocol: gRPC
- Collector: DME (Data Management Engine) [Docker Hub / dockercisco/telemetryreceiver](https://hub.docker.com/r/dockercisco/telemetryreceiver/)
- Datastore/Dashboard: Elasticsearch/Kibana

(7) ★★ [Pipeline by Cisco でTelemetryを試す](https://qiita.com/dedepi92/items/210101e44d0957450533)
以下パターンの構築手順。

- NW Device: Cisco IOS-XR
- Encoding: KV-GPB
- Protocol: TCP
- Collector: Pipeline ※Ciscoが公開している
- Datastore/Dashboard: InfluxDB/Grafana

(8) ★★ [InfluxDB入門](https://qiita.com/dedepi92/items/eaf9f012cc79f784f2d5)
(7)の後続記事。InfluxDBの概要、Influx Query Language (InfluxDBのSQLライクなクエリ言語)等について解説されている。

(9) ★★★ [Telegrafのcisco_telemetry_mdtプラグインを試してみた](https://qiita.com/tetsusat/items/0b76d0e6c6c08e219e90)
以下パターンの構築手順。ツールセットとしては、現時点でのベストパターンか。

- NW Device: Cisco IOS XE
- Encoding: KV-GPB
- Protocol: gRPC
- Collector: Telegraf
- Datastore/Dashboard: InfluxDB/Grafana (Telegrafと合わせてTIG Stack)

# 終わりに
初心者なので勘違いや考慮漏れがあるかも知れません。ご指摘ありましたらコメント頂けると幸いです。:bow: