2. Catalyst遥测数据模型与标准

在传统SNMP轮询体系中,网管站按固定周期向设备发起请求,设备被动应答。这种方式在采集高频指标时会产生明显的CPU与带宽开销,而且不同厂商、不同平台的MIB结构差异很大,跨平台统一分析非常困难。模型驱动遥测(Model-Driven Telemetry,MDT)改变了这一模式:设备按照预定义的数据模型主动、持续地推送数据,采集端只需订阅感兴趣的路径。理解MDT,核心是理解四件事:YANG定义"数据长什么样",gRPC/gNMI定义"数据怎么传",NETCONF定义"配置怎么改",而Catalyst 9000的模型支持决定了"哪些路径真正可用"。

YANG:把设备数据变成有结构的树

YANG(RFC 7950)是一种数据建模语言,它把设备上的配置和状态抽象成一棵层级化的树。树的每个节点都有明确的类型、约束和语义,节点路径用类似文件路径的方式表达。例如接口的入向单播报文计数,在OpenConfig模型下大致对应:

/interfaces/interface[name=Ethernet1/0/1]/state/counters/in-unicast-pkts

这条路径包含几个关键信息:interfaces是顶层容器,interface是列表(list),name是列表的键(key),state表示只读状态数据,counters是计数器容器,in-unicast-pkts是具体的叶子节点(leaf)。YANG中还有几个必须区分的概念:container是纯结构容器,本身不承载值;list是可重复的条目集合,靠key唯一标识;leaf是实际承载数据的末端节点;leaf-list是同类型值的数组。此外,config true/false区分可配置节点与只读状态节点,mandatory、range、pattern等约束决定了合法取值范围。

YANG本身只是"语法和结构",真正让数据可编码、可传输的是编码格式。同一棵YANG树可以映射为JSON、XML或GPB(gRPC Protocol Buffers)等不同编码。JSON可读性最好,适合调试;GPB是二进制编码,体积小、解析快,适合高频大规模采集。Catalyst 9000在gNMI场景下通常优先使用JSON_IETF或GPB编码。

OpenConfig与原生模型:两套并行的路径体系

Catalyst 9000同时支持两类模型。一类是OpenConfig模型,它是厂商中立的开源模型集,路径以/interfaces/...、/system/...、/network-instances/...等开头,跨厂商一致性好,适合构建统一采集平台。另一类是Cisco原生模型,路径通常以Cisco-IOS-XE-开头,例如Cisco-IOS-XE-interfaces-oper、Cisco-IOS-XE-process-cpu-oper,它覆盖更细、更新更快,能暴露OpenConfig尚未标准化的平台特有指标。

两者的取舍很实际:如果目标是多厂商统一看板,优先用OpenConfig;如果需要某个平台特有的深度指标(如特定ASIC队列丢包、控制平面进程级CPU),原生模型往往是唯一选择。实际部署中常见做法是"OpenConfig为主、原生模型补缺",但要注意同一指标在两套模型下的路径、单位和语义可能不同,不能简单混用。

gNMI、gRPC与NETCONF的分工

这三者常被混为一谈,实际职责不同。gRPC是Google开源的高性能RPC框架,基于HTTP/2,支持双向流、多路复用和二进制传输,是承载遥测数据的传输层。gNMI(gRPC Network Management Interface)是建立在gRPC之上的管理协议,定义了Capabilities、Get、Set、Subscribe四类操作,其中Subscribe是遥测订阅的核心。NETCONF(RFC 6241)则是更早的模型驱动配置协议,基于SSH/XML,擅长配置下发和事务性变更,但用于高频状态采集时效率不如gNMI流式订阅。

gNMI的Subscribe支持三种模式:ONCE只取一次当前值;POLL由采集端按需拉取;SAMPLE由设备按固定周期推送,是周期性指标采集的主力;ON_CHANGE仅在数据变化时推送,适合事件类、状态翻转类数据,能显著降低无效流量。订阅时还需要指定编码格式、采样间隔和是否携带时间戳。

Catalyst 9000 模型驱动遥测:模型层 → 协议层 → 采集层 模型层(YANG 树) OpenConfig 模型 /interfaces/… /system/… Cisco 原生模型 Cisco-IOS-XE-…-oper container / list / leaf / leaf-list 协议层 gRPC(HTTP/2 传输) 双向流 · 多路复用 · 二进制 gNMI(管理接口) Capabilities / Get / Set / Subscribe NETCONF(配置通道) SSH/XML · 事务性变更 适合配置,不适合高频采集 采集层(订阅模式) ONCE 取一次当前值 POLL 按需拉取 SAMPLE 周期推送(主力) ON_CHANGE 变化才推送 路径示例(同一接口入向单播计数) OpenConfig /interfaces/interface[name=Ethernet1/0/1]/ state/counters/in-unicast-pkts Cisco 原生 Cisco-IOS-XE-interfaces-oper: interfaces/interface/statistics/in-unicast-pkts 编码格式选择 JSON / JSON_IETF 可读性好,适合调试与验证 GPB(Protobuf) 体积小、解析快,适合高频采集 XML(NETCONF) 配置事务场景使用

在Catalyst 9000上浏览模型与查询路径

理论讲完,落到设备上。Catalyst 9000运行IOS-XE,模型浏览和路径查询主要靠几条命令。先确认gNMI/gRPC服务是否开启:

show telemetry ietf subscription all
show gnmi-yang state
show platform software yang-management process

要查看设备实际支持的YANG模型清单,可以用:

show yang-interfaces
show telemetry ietf subscription 101 filter type xpath
show running-config | section telemetry

更实用的做法是直接查询模型树。IOS-XE提供了show telemetry ietf subscription配合filter查看已订阅路径,而浏览可用路径则常借助show platform software yang-management process确认YANG进程状态后,通过gNMI Capabilities获取模型列表。下面是一段用gnmic工具查询Capabilities并订阅接口计数的示例(参数为教学示例,非实测值):

# 查询设备支持的模型与编码
gnmic -a 10.0.0.1:57400 -u admin -p Cisco123 \
      --insecure capabilities

# 订阅接口入向单播计数,每10秒采样一次
gnmic -a 10.0.0.1:57400 -u admin -p Cisco123 \
      --insecure subscribe \
      --path "/interfaces/interface[name=Ethernet1/0/1]/state/counters/in-unicast-pkts" \
      --mode sample --sample-interval 10s \
      --encoding json_ietf

执行后,采集端会持续收到类似下面的JSON消息(示例数据):

{
  "source": "10.0.0.1:57400",
  "subscription-name": "default",
  "timestamp": 1710000000000000000,
  "updates": [
    {
      "Path": "interfaces/interface[name=Ethernet1/0/1]/state/counters/in-unicast-pkts",
      "values": {
        "interfaces/interface/state/counters/in-unicast-pkts": 128473
      }
    }
  ]
}

判断订阅是否成功,看三点:一是updates数组是否持续出现新消息;二是timestamp是否递增;三是计数值是否随流量变化。如果长时间没有更新,先检查路径是否拼写正确、模型是否被设备支持,再确认采样间隔是否设置过小导致设备拒绝。

路径查询的实用技巧:先用capabilities拿到模型列表,再在模型文件中搜索关键字(如counters、cpu、queue),比盲猜路径高效得多。OpenConfig路径通常更规整,原生模型路径更贴近IOS-XE内部结构。
常见误区:把NETCONF的<get>当作遥测采集手段。NETCONF适合配置和低频查询,高频状态采集应使用gNMI Subscribe。另外,OpenConfig与原生模型对同一指标的命名和单位可能不同,混用时务必核对语义,避免把"包数"和"字节数"搞混。

模型选择与订阅参数速查

维度 OpenConfig Cisco 原生模型
路径前缀 /interfaces、/system Cisco-IOS-XE-…-oper
跨厂商一致性 高 低(平台专属)
指标覆盖深度 通用指标为主 可到ASIC队列、进程级
典型用途 统一采集平台 深度排障与补缺
推荐编码 JSON_IETF / GPB JSON_IETF / GPB

把这一节串起来看:YANG决定数据结构和路径,OpenConfig与原生模型决定你从哪里取数,gRPC/gNMI决定数据怎么流,NETCONF负责配置侧,而Subscribe模式与编码格式决定采集的效率和可读性。掌握这五者的关系,后续的订阅配置、指标分析和故障定位才有稳固的落脚点。