暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

部署 IOS-XE Model Driven Telemetry

非资深老网工 2020-02-03
1397

虽然 Telemetry 这个概念很早就有了,但似乎自从 Broadcom Trident3 芯片支持 Inband Telemetry 之后才火起来。但是这种 Hardware Telemetry 只适用于特定的数据中心场景,毕竟不是所有的业务都有 RDMA 的需求,而且毫秒级的海量数据也不是那么容易处理的。所以,软件层面的 Model Driven Telemetry (MDT) 对于日常的网络运维工作更有价值,而且 Cisco 大部分的产品都支持,包括 NX-OS,IOS XR,IOS XE,所以使用场景并不局限于数据中心,可以扩展到园区网和骨干网。最近几天在 IOS XE 系统上做了一些 MDT 的实验,在这里做个笔记。


1. 实验目的

越过出口防火墙,从 LAN 直接监测外网/骨干网的连通性,以及链路时延和抖动情况。


2. 什么是 Model Driven Telemetry?

关于 Model 和 Telemetry 的概念就不再赘述了,可以阅读我之前的几篇文章:

Model Driven Telemetry 和传统的 SNMP、NetFlow 的区别就在于它向外吐出来的是基于 YANG 模型的结构化的数据。


3. 为什么要使用 Model Driven Telemetry?

个人认为有这么几个原因:

  • NetFlow  sFlow 的功能过于单一,使用场景受限

  • SNMP Get 对 CPU 的压力过大,而且 Interval 较长,一般不会少于 60 秒,反应不及时

  • SNMP OID 较少,能够吐出来的信息不够多

  • SNMP Trap 基于事件,无法持续监控

  • SNMP 吐出的信息是 Text,对自动化编程不友好

相对地,MDT 基于 YANG,数据是结构化的;能够吐出的信息很丰富;Interval 可以很短,比如 1 秒;对 CPU 的压力很小;有开源工具可以直接实现可视化。

MDT 有两种方式:

  • On-Change:基于事件,例如 OSPF 邻居状态发生改变时会吐数据给 Receiver

  • Periodic:持续地周期性地吐数据给 Receiver,适合 CPU、内存、IP SLAs 这类监控手段。本次实验也采用这种方式




4. MDT 实验环境介绍

实验环境有 4 个重要的组成部分:

  • IOS XE 设备:通过 gRPC 协议将监控数据吐给监控平台。我们安装一个 CSR1000v 虚拟机来代替。请注意需要 16.10 或以上版本

  • telegraf:接收 gRPC 数据,并将其转换成 JSON 文本

  • InfluxDB:存储 telegraf 转换之后的数据

  • Grafana:从 InfluxDB 调取数据并可视化呈现

telegraf、InfluxDB 和 Grafana 是 Telemetry 可视化平台,我们称之为 TIG。另外,我们还需要一个 YANG Viewer。本实验使用 Cisco 的开源工具 YANG-Explorer。


5. 部署 MDT 实验环境

5.1 部署 TIG 工具套件

IOS XE 设备很简单,可以安装一个 CSR1000v 虚拟机,关键是 TIG 的部分。好在 Cisco Devnet 网站提供了很多 Sandbox Lab,其中 TIG 是以 Docker Container 的形式存在的。我们可以预约一个 Lab,然后通过 SCP 把 TIG 的 Docker image 下载下来,这样就可以省去安装和配置的工作,需要的时候直接 Load docker image 即可。

访问 https://devnetsandbox.cisco.com/RM/Topology ,用 CCO ID 或者 Google ID 登陆,预定 Model Driven Telemetry Sandbox Lab:

待 Lab Active 之后,SSH 登陆 Devbox 虚机,可以看到有 2 个 Docker image:

  1. developer@Gold-MDT-Devbox:~$ docker images

  2. REPOSITORY TAG IMAGE ID CREATED SIZE

  3. yangexplorer latest 8839217c6325 3 months ago 2.07GB

  4. tig_mdt latest 4a2bafff395c 3 months ago 766MB

其中 tig_mdt 就是 TIG 工具套件,一共 700 多 MB,我们把这个 image 导出并下载到本地。至于 yangexplorer,2 GB 太大了,没必要下载。

  1. developer@Gold-MDT-Devbox:~$ docker save tig_mdt > tig_mdt_devnet.tar

  2. developer@Gold-MDT-Devbox:~$ ls

  3. tig_mdt_devnet.tar

  4. developer@Gold-MDT-Devbox:~$ md5sum tig_mdt_devnet.tar

  5. 978c6b001a01ad7bbb4b893dbc9ba4af tig_mdt_devnet.tar

注意检查 tar 文件的 MD5 Checksum,Sandbox VPN 带宽很低,长时间下载很容易造成文件损坏。如果 Checksum 不一致,在 Load image 的时候会出错。然后安装 docker,load image,运行 container。Grafana 需要利用 TCP 3000 端口提供Web GUI,telegraf 需要利用 TCP 57500 端口提供 gRPC receiver 服务。所以在运行 docker image 的时候要配置 port mapping。

  1. chengc2@chengc2_ubuntu1810:~$ docker load -i tig_mdt_devnet.tar

  2. chengc2@chengc2_ubuntu1810:~$ docker run -d -p 3000:3000 -p 57500:57500 --name TIG tig_mdt

  3. e9a9e7c9ccf34b29bcb18e9518b1faa314df60454d9a25242f95bb92c7cbed08

  4. chengc2@chengc2_ubuntu1810:~$

  5. chengc2@chengc2_ubuntu1810:~$ docker ps

  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  7. e9a9e7c9ccf3 tig_mdt "/start.sh" 5 seconds ago Up 4 seconds 0.0.0.0:3000->3000/tcp, 0.0.0.0:57500->57500/tcp TIG

使用下面的命令可以进入 docker container:

  1. chengc2@chengc2_ubuntu1810:~$ docker exec -it TIG /bin/bash

  2. root@e9a9e7c9ccf3:/#

TIG 的安装目录和配置文件所在目录是 etc,默认配置的 interval 是 10s。Grafana GUI 的用户名/密码是 admin/Cisco123。


5.2 部署 YANG-Explorer

YANG-Explorer 的安装和使用方法请参考:

https://github.com/CiscoDevNet/yang-explorer

安装完成之后,访问 https://github.com/YangModels/yang/tree/master/vendor/cisco/xe ,下载 yang 文件,上传到 Yang-Exploer,然后 Subscribe:


6. 配置 CSR1000v

6.1 配置 IP SLAs

本实验的目的是利用 IP SLA 直接从局域网内部监控外网链路的延时和抖动。在不需要外网目的设备支持 IPSLA Responder 的情况下,可以选择 3 种 IP SLA:

  • ICMP Jitter:

    • 需要目的设备支持RFC 792's timestamp requests and replies

    • 因为回应的时间戳的目的设备不是Cisco设备,所以ICMP Jitter的精确性要比UDP Jitter差很多

    • 另外,NTP协议本身的误差就比较高,是秒级的误差,所以得到的Jitter结果可能不具参考价值

  • HTTP(仅支持HTTP 1.0)

    • 可得到RTT,包含3部分:

      • DNS解析耗时

      • TCP连接耗时

      • HTTP交互耗时

  • DNS

    • 可得到RTT

我们在 CSR1000v 上同时配置上述 3 种 IP SLAs:

  1. hostname CSR1000v

  2. !

  3. ip domain lookup

  4. ip name-server 8.8.8.8

  5. ip domain name cisco.com

  6. !

  7. ip dns server

  8. !

  9. ip sla 10

  10. # 每次探测发送10个探针包,每个探针包的间隔50ms。默认20ms

  11. icmp-jitter 10.75.37.1 source-ip 10.75.37.224 interval 50

  12. # 探测的频率设置为10s

  13. frequency 10

  14. ip sla schedule 10 life forever start-time now

  15. !

  16. ip sla 20

  17. # 现在还支持HTTP1.0的网站似乎只有政府网站了...所以用默认的频率 60s

  18. http get http://www.gov.cn/

  19. ip sla schedule 20 life forever start-time now

  20. !

  21. ip sla 30

  22. dns www.cisco.com name-server 8.8.8.8

  23. frequency 10

  24. ip sla schedule 30 life forever start-time now


6.2 配置 MDT

  1. telemetry ietf subscription 102

  2. encoding encode-kvgpb

  3. filter xpath /ip-sla-ios-xe-oper:ip-sla-stats/sla-oper-entry

  4. stream yang-push

  5. update-policy periodic 500

  6. receiver ip address 10.10.20.50 57500 protocol grpc-tcp

需要注意几个问题:

  1. kvgpb 编码格式是 JSON key-value pare Google Protocol Buffers format。如果利用 TIG 套件实现 MDT 可视化,则必须选择 kvgpb 编码和 grpc-tcp 协议(这是 TIG 套件的默认配置。当然也可以修改配置文件选择 grpc-tls,获得更强的安全性,但需要配置证书,不建议采用)

  2. 如果您有一台较低版本的 Catalyst 9000 系列交换机,可以看到它支持 MDT,但是仅支持 encode-tdl。这是 Text 格式,很难利用。而且官方的 Command reference guide 根本就没有对其进行介绍,应该是放弃它了。所以请注意,必须使用 IOS XE 16.10 或者以上版本来部署 MDT。

  3. periodic 的单位是百分之一秒。500 意味着 500*1/100=5秒。记得修改 telegraf 和 Grafana 的配置文件,更改 interval。

  4. 利用 YANG-Explorer 从 YANG 文件中读取 filter xpath,也就是需要订阅的 Telemetry 内容。因为我们不仅需要 RTT/Jitter 等信息,还需要获取 IP SLA Operator-ID 等信息,所以在 Yang-Explorer 上面点击 sla-oper-entry 这个 container,然后在右边就可以看到对应的 xpath:


7. 配置 Grafana 的数据图表

7.1 选择数据库

浏览器访问 http://<server_ip>:3000/ ,选择从 InfluxDB 的哪个数据库抓取数据:

7.2 创建图表并配置数据源

首先创建一个新的图表(Panel):

因为我们在 CSRv 上配置的 subscription 包含了很多数据,所以需要选择我们想展示的特定的数据。例如源到目的(SD)和目的到源(DS)的 Jitter:

7.3 优化图表参数

7.4 配置告警

Grafana 可以自动发送 Email 或短信告警。Email 告警需要在 conf 配置文件中设置 SMTP,短信告警则需要在配置文件中设置 SMS 网关。本次测试因为条件限制不做这两项设置,但是可以配置告警条件:

7.5 最终的可视化效果

从上图可以观察到,部署了周期为 5 秒的 MDT 之后,CSRv 的 CPU 利用率仅升高 10%。


8. 一点总结

比较 3 种 IP SLA Operations,我们可以发现 ICMP Jitter 方式,很难在外网找到一个支持 RFC 792's timestamp requests and replies 的设备。即使找到了,由于 NTP 的精度较差,也很难得到令人满意的结果。

HTTP 方式包含 3 个步骤的 RTT,而且结果受 HTTP Server 的性能和负载所影响,同样精度不高。

DNS 方式是比较合理的,建议采用这种方式。DNS Server 的响应速度通常比 HTTP Server 快很多,每次探测耗时几十 ms,所以探测频率可以设置的较快。二次开发程序,计算每一次 DNS 探测 RTT 的值,以及和上一次探测的差值,即可判断网络的延时和丢包情况。

最后,SNMP 已经 30 多岁了,应该尽快用 MDT 代替之!



长按二维码关注本文作者公众号

文章转载自非资深老网工,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论