资讯动态

Cisco Model-Driven Telemetry (MDT) 输入插件:面向 IOS XR / IOS XE / NX-OS 的遥测接入实战指南

发布时间:2026/9/14 18:35:44 来源:尧图企业网站定制
Cisco Model-Driven Telemetry (MDT) 输入插件面向 IOS XR / IOS XE / NX-OS 的遥测接入实战指南【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegrafCisco 设备通过模型驱动遥测Model-Driven TelemetryMDT将结构化状态与计数器数据以 GPB-KV 编码持续推送到采集端。Telegraf 的inputs.cisco_telemetry_mdt插件在 Telegraf v1.11.0 中引入以服务型输入Service Input方式在 TCP 或 gRPC 端口上监听 Cisco IOS XR、IOS XE 与 NX-OS 设备发起的 dialout 连接并将遥测报文解析为带source、path、subscription标签的标准指标。本文将结合插件源码、配置样例与测试用例完整讲解从配置、传输到数据解析的每一步帮助你快速构建面向 Cisco 网络的遥测采集链路。插件定位与适用平台该插件消费的是Cisco 模型驱动遥测MDT数据其核心特征包括数据来源Cisco IOS XR、IOS XE 与 NX-OS 平台传输方式TCP 或 gRPCdialout即设备主动向采集端推送gRPC 传输可选启用 TLS 做认证与加密数据编码GPB-KVself-describing-gpb自描述 GPB 键值格式。从官方支持矩阵看gRPC dialout 传输支持 IOS XR64-bit6.1.x 及更高版本、IOS XE 16.10 及更高版本、NX-OS 7.x 及更高版本TCP dialout 传输支持 IOS XR32-bit 与 64-bit6.1.x 及更高版本。插件的注册入口位于 cisco_telemetry_mdt.go通过inputs.Add(cisco_telemetry_mdt, ...)向 Telegraf 注册配置段名为[[inputs.cisco_telemetry_mdt]]。服务型输入Service Input的行为差异该插件属于Service Input服务型输入。与普通采集插件按interval周期轮询不同服务型插件会启动一个常驻服务持续监听等待外部设备连接并推送指标或事件。因此它与普通插件有两个关键差异全局或插件级的interval设置可能不生效指标到达频率由设备侧订阅周期决定命令行--test、--test-wait、--once可能无法为该插件产生输出因为这些选项依赖周期性 Gather 行为而服务型插件依赖外部数据到达。关于插件级通用配置如指标修改、标签与字段处理、别名、执行顺序等参见 CONFIGURATION.md。从源码看该插件虽然实现了Gather方法但直接返回nil见 cisco_telemetry_mdt.go其全部工作都在Start启动的监听服务与回调处理中完成印证了服务型插件的设计定位。完整配置详解插件的完整配置样例位于 sample.conf同时通过//go:embed内嵌到插件中以支持telegraf config输出示例配置。下面逐项说明每个参数# Cisco model-driven telemetry (MDT) input plugin for IOS XR, IOS XE and NX-OS platforms [[inputs.cisco_telemetry_mdt]] ## 遥测传输方式可选 tcp 或 grpc。TLS 仅在 grpc 传输下支持。 # transport grpc ## 遥测监听地址与端口 # service_address 127.0.0.1:57000 ## gRPC 最大消息大小上限 4GiB # max_msg_size 4MiB ## 启用 TLS仅 grpc 传输证书与私钥路径 # tls_cert /etc/telegraf/cert.pem # tls_key /etc/telegraf/key.pem ## 启用 TLS 客户端认证并定义允许的 CA 证书仅 grpc 传输 # tls_allowed_cacerts [/etc/telegraf/clientca.pem] ## 针对部分带内嵌标签的嵌套遥测数据指定哪些字段作为标签 # embedded_tags [Cisco-IOS-XR-qos-ma-oper:qos/interface-table/interface/input/service-policy-names/service-policy-instance/statistics/class-stats/class-name] ## 是否在每条遥测消息中包含 delete 字段 # include_delete_field false ## 指定入站 MDT source 字段的自定义名称 # source_field_name mdt_source ## 定义别名将遥测编码路径映射为简短 measurement 名称 [inputs.cisco_telemetry_mdt.aliases] ifstats ietf-interfaces:interfaces-state/interface/statistics ## 定义属性转换Property Xformation模型细节参考 DME 文档 # [inputs.cisco_telemetry_mdt.dmes] # ## 全局属性转换 # prop1 uint64 to int # prop2 uint64 to string # prop3 string to uint64 # prop4 string to int64 # prop5 string to float64 # # ## 将任意值为字符串但内容为浮点数的属性转换为 float64 # auto-prop-xfrom auto-float-xfrom # # ## 按路径sensor-group 下的 telemetry 配置路径的逐路径属性转换 # ## 逐路径配置更优可避免属性类型冲突问题。 # dnpath {Name: show ip route summary,prop: [{Key: routes,Value: string}, {Key: best-paths,Value: string}]} # dnpath2 {Name: show processes cpu,prop: [{Key: kernel_percent,Value: float}, {Key: idle_percent,Value: float}, {Key: process,Value: string}, {Key: user_percent,Value: float}, {Key: onesec,Value: float}]} # dnpath3 {Name: show processes memory physical,prop: [{Key: processname,Value: string}]} ## 额外的 gRPC 连接设置 # [inputs.cisco_telemetry_mdt.grpc_enforcement_policy] # ## 允许在没有 in-flight 调用的情况下发送 keepalive # ## 当 IOS-XE 设备 gRPC 连接保持打开但订阅已被移除且后续新增订阅无法保持稳定会话时可设为 true # # permit_keepalive_without_calls false # # ## 连续 ping 之间的最小超时若插件以 ENHANCE_YOUR_CALM (too_many_pings) 关闭连接可调低该值 # # keepalive_minimum_time 5m各参数要点与源码印证transport默认为grpc。Init中若为空则置为grpc非tcp/grpc的值会返回invalid transport错误见 cisco_telemetry_mdt.go。service_address默认127.0.0.1:57000。Start中使用net.Listen(tcp, c.ServiceAddress)创建监听cisco_telemetry_mdt.go。测试用例中常使用:0表示随机可用端口。max_msg_sizeconfig.Size类型可接受 4MiB 这类带单位的写法。gRPC 路径下转换为grpc.MaxRecvMsgSizeTCP 路径下作为报文长度上限默认 1 MiB超限报文直接报错拒绝见 server_tcp.go。TLS 三项tls_cert、tls_key、tls_allowed_cacerts仅对 gRPC 生效通过ServerConfig.TLSConfig()生成服务端 TLS 配置并注入grpc.Credscisco_telemetry_mdt.go。embedded_tags用于将嵌套遥测结构中某些字段提升为标签配置项基于路径匹配测试配置见 embedded_tags/telegraf.conf。include_delete_field开启后每条消息追加delete字段值为该报文是否标记删除。source_field_name默认mdt_source。当入站报文 keys 中含source时会复制一份到该名称标签cisco_telemetry_mdt.go。aliases将冗长的编码路径映射为简短测量名解析时做反向查找parser.go。dmes属性类型转换。内置转换器包括uint64 to int、uint64 to string、string to float64、string to uint64、string to int64、auto-float-xfromdnpath*开头的键按 JSON 结构解析出按路径的转换规则parser.go类型转换的具体实现见 utils.go。grpc_enforcement_policygRPC keepalive 强制策略包含permit_keepalive_without_calls与keepalive_minimum_time默认 300 秒仅当与默认值不同时才注入grpc.KeepaliveEnforcementPolicycisco_telemetry_mdt.go。传输层实现TCP 与 gRPC 双通道TCP dialout 通道server_tcp.go 实现了 TCP dialout 服务端acceptTCPClients维护活跃连接集合接受连接后为每个客户端启动独立 goroutineStop()时关闭全部连接每条 TCP 报文前带有 12 字节大端序帧头MsgType、MsgEncap、MsgHdrVersion、MsgFlags、MsgLen见 types.go校验MsgFlags必须为 0、MsgLen不得超过max_msg_size默认 1 MiB随后读取完整负载交给handleTelemetry解码。对应测试TestTCPDialoutOverflow验证了超长报文被拒绝并产生dialout packet too long错误TestTCPDialoutMultiple则验证了多设备多路径的并发处理见 cisco_telemetry_mdt_test.go。gRPC dialout 通道server_grpc.go 实现了MdtDialout双向流式 RPC 方法支持分块chunked报文重组当packet.TotalSize非零时先累积chunkBuffer达到TotalSize后再整体解码总大小超过max_msg_size的报文直接丢弃并记录错误设备在packet.Errors中上报错误时会将其转入acc.AddError依赖cisco-ie/nx-telemetry-proto的mdt_dialout与telemetry_bisprotobuf 定义并默认注册 gzip 编码支持。统一的报文处理入口无论 TCP 还是 gRPC最终都进入handleTelemetrycisco_telemetry_mdt.goproto.Unmarshal解码telemetry.Telemetry消息逐条处理DataGpbkv确定时间戳优先 GPBKV 自带时间戳否则用消息时间戳纳秒换算提取顶层keys与content字段生成标签keys递归解析为标签parseKeys随后强制写入source取NodeIdStr、subscription取SubscriptionIdStr、path取EncodingPath使用metric.NewSeriesGrouper()按系列聚合字段最后批量AddMetric。GPB-KV 数据解析与测量命名测量命名规则默认情况下measurement 名称 产生数据的编码路径encoding path若配置了aliases则使用别名NX-OS 判断依据IOS XR / IOS XE 的编码路径含冒号如ietf-interfaces:interfaces-state/...NX-OS 路径不含冒号包含EVENT-LIST的 NX-OS 路径按事件流解析parser.go。标签与字段所有指标均包含以下标签标签含义source设备标识消息的 NodeIdpath产生数据的编码路径subscription订阅 ID其他标签如interface_name、dn、row_number等取决于路径与数据模型。部分实现细节keys 解析时短名优先冲突时回退为含路径的完整键名parser.goNX-OS DME 数据解析attributes/children提取dn作为标签并针对rib、microburst、ROW_*NXAPI 行式输出、事件列表等结构有专门处理parser.go字段类型由 GPB 自描述类型决定bytes/string/bool/uint32/uint64/sint32/sint64/double/float见 utils.go。内置属性转换数据库插件内置了一张按路径区分的属性类型表database.go覆盖show processes cpu、show environment power、show interface transceiver details、show bgp ipv4 unicast、sys/vpc、sys/bgp、sys/ch、sys/intf、sys/proc、sys/lldp等常用 NX-OS 路径将对应属性统一转换为 string/float/int64 类型避免类型混乱。通过dmes配置可以覆盖或补充这些默认规则。指标输出示例配置别名ifstats后接口统计输出类似如下原文示例ifstats,pathietf-interfaces:interfaces-state/interface/statistics,hostlinux,nameGigabitEthernet2,sourcecsr1kv,subscription101 in-unicast-pkts27i,in-multicast-pkts0i,discontinuity-time2019-05-23T07:40:23.00036200:00,in-octets5233i,in-errors0i,out-multicast-pkts0i,out-discards0i,in-broadcast-pkts0i,in-discards0i,in-unknown-protos0i,out-unicast-pkts0i,out-broadcast-pkts0i,out-octets0i,out-errors0i 1559150462624000000 ifstats,pathietf-interfaces:interfaces-state/interface/statistics,hostlinux,nameGigabitEthernet1,sourcecsr1kv,subscription101 in-octets3394770806i,in-broadcast-pkts0i,in-multicast-pkts0i,out-broadcast-pkts0i,in-unknown-protos0i,out-octets350212i,in-unicast-pkts9477273i,in-discards0i,out-unicast-pkts2726i,out-discards0i,discontinuity-time2019-05-23T07:40:23.00036300:00,in-errors30i,out-multicast-pkts0i,out-errors0i 1559150462624000000可以看到编码路径被别名映射为ifstats接口名GigabitEthernet1/2来自 keys 解析成为name标签统计项则作为字段。NX-OS 侧遥测订阅配置参考设备侧需要将遥测数据推送至 Telegraf 监听地址。下表汇总了 NX-OS 上常见监控目标对应的数据源DME / NXAPI / NATIVE与路径配置可作为 sensor-group 订阅配置的直接参考原文完整列表需求数据源配置环境DMEpath sys/ch query-condition query-targetsubtreetarget-subtree-classeqptPsuSlot,eqptFtSlot,eqptSupCSlot,eqptPsu,eqptFt,eqptSensor,eqptLCSlot环境DMEpath sys/ch depth 5另一种配置方式环境NXAPIshow environment power/show environment fan/show environment temperature接口统计DMEpath sys/intf query-condition query-targetsubtreetarget-subtree-classrmonIfIn,rmonIfOut,rmonIfHCIn,rmonIfHCOut,rmonEtherStats接口状态DMEpath sys/intf depth unbounded query-condition query-targetsubtreetarget-subtree-classl1PhysIf,pcAggrIf,l3EncRtdIf,l3LbRtdIf,ethpmPhysIfVPCDMEpath sys/vpc query-condition query-targetsubtreetarget-subtree-classvpcDom,vpcIfCPU 资源DMEpath sys/procsys query-condition query-targetsubtreetarget-subtree-classprocSystem,procSysCore,procSysCpuSummary,procSysCpu,procIdle,procIrq,procKernel,procNice,procSoftirq,procTotal,procUser,procWait,procSysCpuHistory,procSysLoad内存资源DMEpath sys/procsys/sysmem/sysmemused、path sys/procsys/sysmem/sysmemusage、path sys/procsys/sysmem/sysmemfree逐进程 CPUDMEpath sys/proc depth unbounded query-condition rsp-foreign-subtreeephemeralvxlansvi 统计DMEpath sys/bd query-condition query-targetsubtreetarget-subtree-classl2VlanStatsBGPDMEpath sys/bgp query-condition query-targetsubtreetarget-subtree-classbgpDom,bgpPeer,bgpPeerAf,bgpDomAf,bgpPeerAfEntry,bgpOperRtctrlL3,bgpOperRttP,bgpOperRttEntry,bgpOperAfCtrlmac 动态表DMEpath sys/mac query-condition query-targetsubtreetarget-subtree-classl2MacAddressTablebfdDMEpath sys/bfd/inst depth unboundedlldpDMEpath sys/lldp depth unboundeduribDMEpath sys/urib depth unbounded query-condition rsp-foreign-subtreeephemeralu6ribDMEpath sys/u6rib depth unbounded query-condition rsp-foreign-subtreeephemeral组播流DMEpath sys/mca/show/flows depth unbounded组播统计DMEpath sys/mca/show/stats depth unbounded组播 igmpNXAPIshow ip igmp groups vrf all、show ip igmp interface vrf all、show ip igmp snooping、show ip igmp snooping groups、show ip igmp snooping groups detail、show ip igmp snooping groups summary、show ip igmp snooping mrouter、show ip igmp snooping statistics组播 pimNXAPIshow ip pim interface vrf all、show ip pim neighbor vrf all、show ip pim route vrf all、show ip pim rp vrf all、show ip pim statistics vrf all、show ip pim vrf allmicroburstNATIVEpath microburst上述 DME/NXAPI/NATIVE 路径与插件内置转换数据库database.go中的sys/...与show ...键一一对应设备侧选择的路径可直接被插件识别并正确处理类型。测试用例插件能力的行为验证仓库内置了丰富的端到端测试用例每个场景由packet.json模拟的遥测报文GPB 编码前结构与telegraf.conf对应配置组成覆盖常见部署形态simple、nested基础与嵌套 GPB-KV 报文解析NXDME、NXDME_subtree、NXDME_evenlist_with_dnNX-OS DME 模型、子树查询与事件列表NXAPI、NXAPI_table_multirow、NXAPI_Xform_multi、NXAPI_Xform_NXAPINXAPI 行式输出与属性转换embedded_tags内嵌标签提升为标签deleted_field、deleted_field_no_contentdelete 字段处理duplicate_nested_keys嵌套键冲突时的标签处理microburst、microburst_alias原生 microburst 路径及其别名source_field_rewritesource_field_name重写。同时 cisco_telemetry_mdt_test.go 通过真实的 TCP/gRPC 客户端连入插件监听端口发送报文验证了报文过大拒绝、多设备并发、非法帧头断开连接、gRPC dialout 往返等行为。配套处理建议如需在采集后做单位或类型转换可分别使用 scale 处理器插件数值缩放与 converter 处理器插件字段类型转换保持遥测采集链路与数据清洗链路的职责分离。小结inputs.cisco_telemetry_mdt插件为 Telegraf 提供了面向 Cisco 网络的标准化遥测接入能力双传输通道TCP/gRPC、可选的 gRPC TLS 安全加固、GPB-KV 自描述解码、别名简化测量名、属性类型转换与内嵌标签提取一应俱全。结合 NX-OS 侧的 DME/NXAPI 订阅配置即可在数分钟内建立起从 Cisco 设备到 InfluxDB 等时序存储的完整遥测管线。后续建议在部署时通过embedded_tags、aliases与dmes三组配置对齐设备侧的路径与模型以获得最整洁、类型最一致的指标输出。【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价