大家好,我是小斐呀。
AI
的兴起,导致英伟达的硬件设备风生水起,各地的 AI
智算中心也如雨后春笋般拔地而起。在这个过程中英伟达的 GPU
和 网络设备
扮演者非常重要的角色,在这里以交换机来展开说明,主要有两大类 IB
交换机和 RoCE
交换机。
IB
交换机NVIDIA Mellanox
是InfiniBand
交换机主要厂商之一,产品主要以NVIDIA Quantum
系列InfiniBand
网络交换机为主。RoCE
交换机NVIDIA
也有对应的设备,产品主要以NVIDIA Spectrum
以太网交换机为主结合Spectrum
网络软件形成一套解决方案。
下面就展开聊聊 Spectrum
以太网交换机使用 NVIDIA Cumulus Linux
网络操作系统的指标监控最佳实践。
架构
首先我们需要确定型号,需要监控的交换机型号是 Spectrum-4 SN5000 Series
系列以及 Spectrum-3 SN4700
系列和 Spectrum SN2000 Series
系列。
设备硬件版本查看:
# 查看设备的 EEPROM 信息,包含厂商、型号等信息
cumulus@switch:mgmt:~$ decode-syseeprom
从这个命令工具可以看出交换机型号是英伟达 SN5600
设备。
系统版本:
cumulus@switch:mgmt::~$ cat /etc/os-release
NAME="Cumulus Linux"
VERSION_ID=5.9.1
VERSION="Cumulus Linux 5.9.1"
PRETTY_NAME="Cumulus Linux"
ID=cumulus-linux
ID_LIKE=debian
CPE_NAME=cpe:/o:cumulusnetworks:cumulus_linux:5.9.1
HOME_URL="http://www.cumulusnetworks.com/"
SUPPORT_URL="http://support.cumulusnetworks.com/"
从上面的命令可以看出来英伟达 SN5600
交换机系统版本是 Cumulus Linux 5.9.1
基于这个版本我现在需要开启对这个型号的交换机进行指标监控,需要拿到系统资源指标、接口计数器指标、 LLDP
邻居指标等,特别需要关注接口 PFC
和 ECN
等指标信息。
由于英伟达 SN5600
交换机支持网络 Telemetry
协议栈,而且使用的是 gNMI
标准,简单说说 Telemetry
特点:
模式:推模式( push mode
),YANG
模型定义结构,精度可以达到亚秒级别
gNMI
标准下的采集架构如下所示:
在夜莺中构建的采集架构如下所示:
使用夜莺开源采集器 Categraf
下的 gnmi
插件采集对应交换机 telemetry
数据。
配置 gNMI 代理
因使用英伟达 SN5600
系列,以及操作系统使用 Cumulus linux
系统,版本是 5.9.1
只能从 SNMP
和 gNMI
协议方向去采集指标,在操作系统 5.10.x
以上的版本支持了 OpenTelemetry
并且系统自身暴露了很多指标,可直接通过 OTLP
或 PWR
协议把指标写入到如 VictoriaMetrics
时序库中。
开启 gNMI 配置
# 开机自启 netq-agent
cumulus@switch:~$ sudo systemctl enable netq-agent.service
# 启动 netq-agent
cumulus@switch:~$ sudo systemctl start netq-agent.service
# 启用 gNMI 代理
cumulus@switch:~$ netq config add agent gnmi-enable true
# 禁用 gNMI 代理
cumulus@switch:~$ netq config add agent gnmi-enable false
# 重新启动 NetQ 代理以合并配置更改
cumulus@switch:~$ netq config restart agent
# 更改 gNMI 代理监听的默认端口
cumulus@switch:~$ netq config add agent gnmi-port 9400
gNMI
代理监听 9339
端口, gNMI
代理依赖于从 NVUE
服务收集的数据。要使用 gNMI
进行完整的数据收集,必须启用 NVUE 服务。
# 查看状态
cumulus@switch:~$ sudo systemctl status nvued.service
# 开机自启
cumulus@switch:mgmt:~$ sudo systemctl enable nvued.service
# 启动服务
cumulus@switch:mgmt:~$ sudo systemctl start nvued.service
当上面开启 gNMI
代理后,需要验证服务是否可以正常使用,在 gNMI Client
端提供 gnmic
验证工具作为验证服务是否可以正常。
# 安装部署 gnmic
bash -c "$(curl -sL https://get-gnmic.openconfig.net)"
# 查看版本
gnmic version
测试:
# 测试 gNMI 接口连通性
gnmic -a 172.16.10.10:9339 -u cumulus -p cumulus@2025 --skip-verify capabilities
# 输出如下:
gNMI version: 0.10.0
supported models:
- nvidia-wjh, NVIDIA, 1.0.1
- nvidia-if-ethernet-counters-ext, NVIDIA, 1.0.0
- openconfig-interfaces, OpenConfig, 3.7.1
- openconfig-if-ethernet, OpenConfig, 2.13.0
- openconfig-if-ethernet-ext, OpenConfig, 0.1.1
- openconfig-system, OpenConfig, 2.1.0
- openconfig-lldp, OpenConfig, 0.2.1
- openconfig-platform, OpenConfig, 0.27.0
supported encodings:
- JSON
- PROTO
测试拿取接口速度:
# 测试拿接口数据
gnmic -a 172.16.10.10:9339 -u cumulus -p cumulus@2025 --skip-verify subscribe --path "ethernet/state/port-speed" --mode once --prefix "/interfaces/interface[name=swp40s0]/" --target netq
# 测试拿接口速率
gnmic -a 172.16.10.10:9339 -u cumulus -p cumulus@2025 --skip-verify subscribe --path "/interfaces/interface/ethernet/state/port-speed" --stream-mode on-change --target netq
# 输出如下:
{
"source": "172.16.10.10:9339",
"subscription-name": "default-1747666654",
"timestamp": 1747665410368314220,
"time": "2025-05-19T22:36:50.36831422+08:00",
"target": "netq",
"updates": [
{
"Path": "interfaces/interface[name=swp40s0]/ethernet/state/port-speed",
"values": {
"interfaces/interface/ethernet/state/port-speed": "SPEED_400GB"
}
}
]
}
接下来需要通过 Categraf
配置去拿对应的指标,我们编辑 gnmi
的订阅配置文件,然后做配置测试,下面我先写一个测试配置示例,测试数据是否能正常通过 Categraf
采集到数据:
interval="1s"
# gNMI telemetry 输入插件
[[instances]]
addresses = ["172.16.10.10:9339"]
username = "cumulus"
password = "cumulus@2025"
redial = "10s"
max_msg_size = 4194304
insecure_skip_verify = true
encoding = "proto"
# origin = ""
prefix = "/interfaces/interface[name=swp40s0]/"
target = "netq"
canonical_field_names = false
trim_field_names = false
guess_path_tag = false
# 订阅列表
[[instances.subscription]]
name = "port_speed"
path = "ethernet/state/port-speed"
subscription_mode = "sample"
sample_interval = "60s"
这里测试会发现有错误提示:
W! Error in gNMI subscription: failed to setup subscription: rpc error: code = Unavailable desc = connection error: desc = "error reading server preface: EOF"
这个问题的原因就是没有在配置文件中开启 TLS
认证,内网环境客户端跳过验证证书:
# 把这些配置加上即可
enable_tls = true
tls_ca = ""
tls_min_version = "TLS12"
insecure_skip_verify = true
所以最终的测试配置文件如下:
cumulus@switch:mgmt::~$ cat /etc/os-release
NAME="Cumulus Linux"
VERSION_ID=5.9.1
VERSION="Cumulus Linux 5.9.1"
PRETTY_NAME="Cumulus Linux"
ID=cumulus-linux
ID_LIKE=debian
CPE_NAME=cpe:/o:cumulusnetworks:cumulus_linux:5.9.1
HOME_URL="http://www.cumulusnetworks.com/"
SUPPORT_URL="http://support.cumulusnetworks.com/"
0
Cumulus Linux 5.9
版本支持的 Yang
模型数据如下所示:
cumulus@switch:mgmt::~$ cat /etc/os-release
NAME="Cumulus Linux"
VERSION_ID=5.9.1
VERSION="Cumulus Linux 5.9.1"
PRETTY_NAME="Cumulus Linux"
ID=cumulus-linux
ID_LIKE=debian
CPE_NAME=cpe:/o:cumulusnetworks:cumulus_linux:5.9.1
HOME_URL="http://www.cumulusnetworks.com/"
SUPPORT_URL="http://support.cumulusnetworks.com/"
1
注意在同一个插件下,多个配置文件的场景,需要确定全局 interval
只能有一个,避免因多个 interval
导致冲突,测试下来发现数字型 interval
会默认覆盖掉,文本型 interval
直接报错,这块写配置文件需要注意点。
配置文件
当测试好可以拿到的指标后,我们就可以开始写对应的采集配置文件:
gnmi_system.toml
cumulus@switch:mgmt::~$ cat /etc/os-release
NAME="Cumulus Linux"
VERSION_ID=5.9.1
VERSION="Cumulus Linux 5.9.1"
PRETTY_NAME="Cumulus Linux"
ID=cumulus-linux
ID_LIKE=debian
CPE_NAME=cpe:/o:cumulusnetworks:cumulus_linux:5.9.1
HOME_URL="http://www.cumulusnetworks.com/"
SUPPORT_URL="http://support.cumulusnetworks.com/"
2
这里有接口指标,邻居指标,系统基础指标,分别提供三个文件存放采集。
可视化
上面的采集文件可以在夜莺中拿到 gnmi
为前缀的指标数据:
cumulus@switch:mgmt::~$ cat /etc/os-release
NAME="Cumulus Linux"
VERSION_ID=5.9.1
VERSION="Cumulus Linux 5.9.1"
PRETTY_NAME="Cumulus Linux"
ID=cumulus-linux
ID_LIKE=debian
CPE_NAME=cpe:/o:cumulusnetworks:cumulus_linux:5.9.1
HOME_URL="http://www.cumulusnetworks.com/"
SUPPORT_URL="http://support.cumulusnetworks.com/"
3
通过拿到的指标,我们可以做对应的可视化面板:
在 Cumulus linux 5.10.x
版本以上的系统中,已经适配支持 OpenTelemetry
且 OpenTelemetry
暴露了很多可用指标,非常适合采集指标到时序库做监控告警使用,具体架构如下所示:
gNMI
标准的 Telemetry
更加通用,是 OpenConfig
组织主导定义的,现在如 华为
、 华三
、 思科
、 锐捷
等厂商的网络设备也逐步支持,主要以 YANG
+ gRPC(Dial-in模式)
+ 流式订阅
组成基本的监控采集方式。
我这边星球中新建了一个 Telemetry
专栏,后续将和 SNMP
一样适配和采集国内网络厂商的 Telemetry
指标 SNMP
将进入遇到就适配的阶段,如果你也想要一个比较活跃的学习环境和氛围,可以和一群志同道合的人深入沟通,可以加入我的星球,这里已经聚齐一群大佬,就我自己每天都在群里学到了很多大佬的想法,快扫码加入:
最后,如果你对这块的有需求或者想沟通交流,可以加入之前建立的群,到群里咨询或交流即可,加群可公众号后台私信加我,我拉你进群。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...