智算网络监控实战:用 gNMI 看清 RoCE 的每一次异常
原创
小斐Lab
小斐Lab
网络小斐
2026年10月29日 14:58
浙江
去阅读
大家好,我是小斐呀。
好久没有更新了,最近一直在弄 AI 相关的项目,没有时间更新,不过最近接触了智算中心的 AI 交换机监控,打算用两篇文章展开聊聊关于夜莺体系基于 gNMI 协议采集 RoCE 交换机指标,下面我们就展开一下聊聊吧。
接触过的智算中心网络设备主要还是以 RoCE 为主,使用 IB 也有,在国内感觉应该更多是 RoCE 多,我这次接触的就是国产锐捷的网络设备,实施的对象就是锐捷 RoCE 无损数据中心交换机产品。
采集方式
由于我一直以来的最佳实践都是以采集设备指标为第一目标,日志反而是后续补充,指标输出的格式都是 Prometheus 数据格式,时序数据库使用 VictoriaMetrics 作为基础底座,剩下就是夜莺作为整套监控告警核心组件,采集以及监控告警架构如下:
核心组件就是上面所示,在这个过程中核心还是在数据采集阶段和数据后续利用阶段,当然难点也是在这两个阶段,毕竟中间的阶段组件都帮忙解决了不需要我们额外做处理,我们直接利用即可,最主要核心在前置采集阶段和后置指标可视化和告警阶段,这些都是需要我们自行解决,而我就是做这些标准化动作。
gNMI 协议采集
锐捷无损数据中心交换机其实都是支持 SNMP 和 gRPC 这两个通信协议,而在无损数据中心中由于对指标的要求性能较高,采集间隔需要短,指标数据都要达到秒级,而 gRPC Telemetry 通常比传统 SNMP 轮询更适合高频指标采集。
在通过 gRPC Telemetry 采集网络设备指标时,特别是针对 PFC 、 ECN 、 Buffer / Queue 以及端口微突发等指标,我们就需要前置了解一下网络设备 Telemetry 技术栈了。
从图上可以看出 gNMI 是基于 gRPC 实现的网络管理接口。
那么在这个过程中支持两种对接模式: Dial-in 和 Dial-out 模式,分别适应不同的场景如下所示:
在接下来的场景我们将使用 Categraf 采集器下的 gNMI 插件来实现对 RoCE 的交换机指标采集。
在这个采集对接模式下 Categraf 的 gNMI 作为 gRPC Client 交换机等被采集设备作为 gRPC Server 角色,实现设备的数据采集上报。
为什么这样子设计呢,因为我们需要在 Categraf 的 gNMI 下写采集配置文件,需要下发配置,我不是需要对所有指标都要采集,而是下发我需要采集的指标,这个往往就是 Yang 路径,最终形成这样一个采集路线图:
按照这个模式可以满足 RoCE 交换机需要采集高频性能指标。
设备配置
交换机侧首先需要确定是否支持 gRPC Telemetry 然后再确定是否支持 gNMI 只有支持这个才能往下走,在 Dial-in 模式下交换机侧需要配置如下(以锐捷为例):
grpc
rpc gnmi enable
authen login local
subscr enable
subscr-sample-interval 1
subscr-source-interface Mgmt 0
username categraf provilege 15 login mode grpc password 0 \"password\"
主要开始 gNMI 使用本地用户认证,开启订阅开关,设备订阅采样间隔 1 秒,订阅源接口为管理接口。
RoCE交换机业务口基本上都设置业务的,一般不对外通信,所以管理数据都是通过单独的单独的管理网接口进行。
最后就是在交换机侧确定好 gRPC Server 的 IP 和 端口 即可。
编码和明文
首先建议在服务器上安装 gnmic 工具,然后使用工具模拟确定编码和数据流模式:
# 明文不走 TLS
gnmic -a 192.168.1.1:50051 -u categraf -p 'password' --insecure capabilities
# 走 TLS 不校验证书
gnmic -a 192.168.1.1:50051 -u categraf -p 'password' --skip-verify capabilities
功能探测:
- 确认 gRPC 握手成功、账号密码通过
- 清单中可以确定支持的编码 json 和 proto
- 支持哪些模型确定数据面边界
gNMI 三种 RPC 方法
gNMI 实现了三种 RPC 方法,分别是:
由于我的场景是持续拿交换机指标数据,所以选择 Subscribe --> stream 模式,其中流式订阅也有三种模式:
接下来我将通过 sample 方式去采集,首先我需要找到相关设备指标的 Yang 路径,这个一般网络设备厂商会提供,或者官方文档有下载。
采集配置
由于采集侧是 Categraf 的 gNMI 插件,并且是作为 Client 端,而网络设备端是作为 Server 端,所以我需要下发采集配置,触发订阅数据上传我需要的指定的数据到 Client 端,如下所示:
[[instances]]
addresses=[\"10.8.177.98:50051\"]
username=\"categraf\"
password=\"password@321\"
# 编码格式:proto / json / json_ietf / bytes
encoding=\"json\"
redial=\"10s\"
max_msg_size=4194304
canonical_field_names=false
trim_field_names=false
guess_path_tag=false
enable_tls=false
# tls_ca = \"/etc/pki/ca.pem\"
# tls_min_version = \"TLS12\"
insecure_skip_verify=true
# tls_cert = \"/etc/pki/cert.pem\"
# tls_key = \"/etc/pki/key.pem\"
# origin = \"\"
# prefix = \"\"
# target = \"\"
# vendor_specific = []
updates_only=false
dump_responses=false
agent_host_tag=\"ident\"
[[instances.tag_subscription]]
name=\"hostname\"
origin=\"\"
path=\"/rg-system:system/hostname\"
subscription_mode=\"sample\"
sample_interval=\"0s\"
suppress_redundant=false
match=\"unconditional\"
disable_concatenation=true
[[instances.subscription]]
name=\"gnmi_system_cpu_util\"
origin=\"openconfig-platform\"
path=\"/components/component/cpu/utilization/state\"
subscription_mode=\"sample\"
sample_interval=\"0s\"
suppress_redundant=false
disable_concatenation=false
[[instances.subscription]]
name=\"gnmi_system_memory\"
origin=\"openconfig-platform\"
path=\"/components/component/state/memory\"
subscription_mode=\"sample\"
sample_interval=\"0s\"
suppress_redundant=false
disable_concatenation=false
实例配置中主要需要注意编码问题和 TLS 问题,确定是支持那个编码,一般都是 json 或者 proto ,确定是否需要 TLS 即可。
上面只是基础的内存和 CPU 的采集配置,我这边对 RoCE 交换机有几个配置采集规划:
根据这些配置文件我们可以实现指标的采集,如下所示:
这里把系统指标、接口指标、光模块指标、邻居指标进行系统性的标准化。
指标展示
通过上述配置采集系统状态、接口信息指标、邻居信息指标、光模块指标等展示图:
这个图是前端自定义写的,然后用数据填充即可。
关于 RoCE 和 BGP 基础采集指标放在下一篇展开聊聊。
end
这次开始使用夜莺采集智算中心的网络设备,也争取实现指标的标准化,如果您的环境下也有对应智算中心相关的网络设备需要统一化采集和监控,也想构建一套比较合适的网络基础设施统一监控告警系统,可以试试这套开源架构,有深入需求可以加我沟通。
我建立了一些对关于网络和基础设施等相关的监控告警群,针对这块的有需求或者想沟通交流,可以加入到群里交流即可,可公众号后台私信加我,我拉你进群。
📣欢迎朋友们关注公众号📢📢:【网络小斐】!
🙋♂️有想法的朋友也可以加我沟通,朋友🔘做个点赞之交!😂😂
欢迎点赞 👍、收藏 💗、关注 💡 三连支持一下,我们下期见~✨
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论