gNMI 流媒体
您可以使用 gRPC 网络管理接口 (gNMI) 从 Cumulus Linux 收集系统资源、接口和计数器信息,并将其导出到您自己的 gNMI 客户端。
配置 gNMI 代理
默认情况下,gNMI 代理处于禁用状态。要启用它,请运行
cumulus@switch:~$ netq config add agent gnmi-enable true
gNMI 代理在端口 9339 上监听。如果您的另一个应用程序使用了该端口,您可以更改默认端口。/etc/netq/netq.yml
文件存储配置。
使用以下命令调整设置
禁用 gNMI 代理
cumulus@switch:~$ netq config add agent gnmi-enable false
更改 gNMI 代理监听的默认端口
cumulus@switch:~$ netq config add agent gnmi-port <gnmi_port>
重启 NetQ 代理以应用配置更改
cumulus@switch:~$ netq config restart agent
仅使用 gNMI 代理
NVIDIA 建议同时使用 gNMI 和 NetQ 代理收集数据。但是,如果您不想同时使用这两个代理收集数据,您可以禁用 NetQ 代理。然后数据将专门发送到 gNMI 代理。
要禁用 NetQ 代理,请使用以下命令
cumulus@switch:~$ netq config add agent opta-enable false
您不能同时禁用 NetQ 和 gNMI 代理。如果 Cumulus Linux 上同时启用了这两个代理,并且 NetQ 服务器不可访问,则来自以下模型的数据不会发送到 gNMI
- openconfig-interfaces
- openconfig-if-ethernet
- openconfig-if-ethernet-ext
- openconfig-system
- nvidia-if-ethernet-ext
WJH、openconfig-platform
和 openconfig-lldp
数据在此状态下继续流式传输到 gNMI。如果您仅使用 gNMI 并且不存在 NetQ 遥测服务器,则应通过将 opta-enable
设置为 false
来禁用 NetQ 代理。
支持的模型
Cumulus Linux 支持以下 OpenConfig 模型
模型 | 支持的数据 |
---|---|
openconfig-interfaces | 名称、操作状态、管理状态、接口索引、MTU、环回模式、已启用、计数器(入包、出包、入字节、入单播包、入丢弃包、入多播包、入广播包、入错误、出字节、出单播包、出多播包、出广播包、出丢弃包、出错误) |
openconfig-if-ethernet | 自动协商、端口速度、MAC 地址、协商端口速度、计数器(输入抖动帧、输入超尺寸帧、输入欠尺寸帧) |
openconfig-if-ethernet-ext | 帧大小计数器(InFrames_64Octets、InFrames_65_127Octets、InFrames_128_255Octets、InFrames_256_511Octets、InFrames_512_1023Octets、InFrames_1024_1518Octets) |
openconfig-system | 内存、CPU |
openconfig-platform | 平台数据(名称、描述、版本) |
openconfig-lldp | LLDP 数据(端口 ID 类型、端口描述、上次更新时间、系统名称、系统描述、底盘 ID、TTL、年龄、管理地址、管理地址类型、能力) |
gNMI 客户端还可以使用以下 NVIDIA 模型
模型 | 支持的数据 |
---|---|
nvidia-if-wjh-drop-aggregate | 聚合的 WJH 丢弃,包括 L1、L2、路由器、ACL、隧道和缓冲区丢弃 |
nvidia-if-ethernet-ext | 扩展以太网计数器(AlignmentError、InAclDrops、InBufferDrops、InDot3FrameErrors、InDot3LengthErrors、InL3Drops、InPfc0Packets、InPfc1Packets、InPfc2Packets、InPfc3Packets、InPfc4Packets、InPfc5Packets、InPfc6Packets、InPfc7Packets、OutNonQDrops、OutPfc0Packets、OutPfc1Packets、OutPfc2Packets、OutPfc3Packets、OutPfc4Packets、OutPfc5Packets、OutPfc6Packets、OutPfc7Packets、OutQ0WredDrops、OutQ1WredDrops、OutQ2WredDrops、OutQ3WredDrops、OutQ4WredDrops、OutQ5WredDrops、OutQ6WredDrops、OutQ7WredDrops、OutQDrops、OutQLength、OutWredDrops、SymbolErrors、OutTxFifoFull) |
客户端应使用以下 YANG 模型作为参考
使用 gNMI 收集 WJH 数据
您可以将“刚刚发生”数据从 NetQ 代理导出到您自己的 gNMI 客户端。有关 nvidia-if-wjh-drop-aggregate
参考 YANG 模型,请参阅上一节。
支持的功能
- gNMI 代理支持针对 WJH 事件的功能和流订阅请求。
- 如果您使用的是 SONiC,则只能使用 gNMI 收集 WJH 数据。
WJH 丢弃原因
NetQ 发送到 gNMI 代理的数据采用 WJH 丢弃原因的形式。这些原因由 SDK 生成,并存储在交换机上的 /usr/etc/wjh_lib_conf.xml
文件中。使用此文件作为指南,筛选特定原因类型(L1、ACL 等)、原因 ID 或事件严重性。
L1 丢弃原因
原因 ID | 原因 | 描述 |
---|---|---|
10021 | 端口管理关闭 | 验证端口配置 |
10022 | 自动协商失败 | 手动设置端口速度,禁用自动协商 |
10023 | 与对等链路逻辑不匹配 | 检查电缆/收发器 |
10024 | 链路训练失败 | 检查电缆/收发器 |
10025 | 对等端正在发送远程故障 | 更换电缆/收发器 |
10026 | 信号完整性差 | 更换电缆/收发器 |
10027 | 不支持电缆/收发器 | 使用受支持的电缆/收发器 |
10028 | 电缆/收发器已拔下 | 插入电缆/收发器 |
10029 | 校准失败 | 检查电缆/收发器 |
10030 | 电缆/收发器状态不良 | 检查电缆/收发器 |
10031 | 其他原因 | 其他 L1 丢弃原因 |
L2 丢弃原因
原因 ID | 原因 | 严重性 | 描述 |
---|---|---|---|
201 | MLAG 端口隔离 | 注意 | 预期行为 |
202 | 目标 MAC 已保留 (DMAC=01-80-C2-00-00-0x) | 错误 | 从对等端收到错误的数据包 |
203 | VLAN 标记不匹配 | 错误 | 验证链路两端的 VLAN 标记配置 |
204 | 入口 VLAN 过滤 | 错误 | 验证链路两端的 VLAN 成员资格配置 |
205 | 入口生成树过滤器 | 注意 | 预期行为 |
206 | 单播 MAC 表操作丢弃 | 错误 | 验证此目标 MAC 的 MAC 表 |
207 | 多播出口端口列表为空 | 警告 | 验证 IGMP 加入或多播路由器端口不存在的原因 |
208 | 端口环回过滤器 | 错误 | 验证此目标 MAC 的 MAC 表 |
209 | 源 MAC 是多播 | 错误 | 从对等端收到错误的数据包 |
210 | 源 MAC 等于目标 MAC | 错误 | 从对等端收到错误的数据包 |
路由器丢弃原因
原因 ID | 原因 | 严重性 | 描述 |
---|---|---|---|
301 | 不可路由的数据包 | 注意 | 预期行为 |
302 | 黑洞路由 | 警告 | 验证此目标 IP 的路由表 |
303 | 未解析的邻居/下一跳 | 警告 | 验证邻居/下一跳的 ARP 表 |
304 | 黑洞 ARP/邻居 | 警告 | 验证下一跳的 ARP 表 |
305 | IPv6 目标位于多播范围 FFx0:/16 内 | 注意 | 预期行为 - 数据包不可路由 |
306 | IPv6 目标位于多播范围 FFx1:/16 内 | 注意 | 预期行为 - 数据包不可路由 |
307 | 非 IP 数据包 | 注意 | 目标 MAC 是路由器,数据包不可路由 |
308 | 单播目标 IP 但多播目标 MAC | 错误 | 从对等端收到错误的数据包 |
309 | 目标 IP 是环回地址 | 错误 | 从对等端收到错误的数据包 |
310 | 源 IP 是多播 | 错误 | 从对等端收到错误的数据包 |
311 | 源 IP 位于 E 类 | 错误 | 从对等端收到错误的数据包 |
312 | 源 IP 是环回地址 | 错误 | 从对等端收到错误的数据包 |
313 | 源 IP 未指定 | 错误 | 从对等端收到错误的数据包 |
314 | 校验和或 IPver 或 IPv4 IHL 太短 | 错误 | 电缆不良或从对等端收到错误的数据包 |
315 | 多播 MAC 不匹配 | 错误 | 从对等端收到错误的数据包 |
316 | 源 IP 等于目标 IP | 错误 | 从对等端收到错误的数据包 |
317 | IPv4 源 IP 是有限广播 | 错误 | 从对等端收到错误的数据包 |
318 | IPv4 目标 IP 是本地网络 (destination=0.0.0.0/8) | 错误 | 从对等端收到错误的数据包 |
320 | 入口路由器接口已禁用 | 警告 | 验证您的配置 |
321 | 出口路由器接口已禁用 | 警告 | 验证您的配置 |
323 | IPv4 路由表 (LPM) 单播未命中 | 警告 | 验证此目标 IP 的路由表 |
324 | IPv6 路由表 (LPM) 单播未命中 | 警告 | 验证此目标 IP 的路由表 |
325 | 路由器接口环回 | 警告 | 验证接口配置 |
326 | 数据包大小大于路由器接口 MTU | 警告 | 验证路由器接口 MTU 配置 |
327 | TTL 值太小 | 警告 | 实际路径长于 TTL |
隧道丢弃原因
原因 ID | 原因 | 严重性 | 描述 |
---|---|---|---|
402 | Overlay 交换机 - 源 MAC 是多播 | 错误 | 对等端发送了错误的数据包 |
403 | Overlay 交换机 - 源 MAC 等于目标 MAC | 错误 | 对等端发送了错误的数据包 |
404 | 解封装错误 | 错误 | 对等端发送了错误的数据包 |
ACL 丢弃原因
原因 ID | 原因 | 严重性 | 描述 |
---|---|---|---|
601 | 入口端口 ACL | 注意 | 验证 ACL 配置 |
602 | 入口路由器 ACL | 注意 | 验证 ACL 配置 |
603 | 出口路由器 ACL | 注意 | 验证 ACL 配置 |
604 | 出口端口 ACL | 注意 | 验证 ACL 配置 |
缓冲区丢弃原因
原因 ID | 原因 | 严重性 | 描述 |
---|---|---|---|
503 | 尾部丢弃 | 警告 | 监控网络拥塞 |
504 | WRED | 警告 | 监控网络拥塞 |
505 | 端口 TC 拥塞阈值已 crossing | 注意 | 监控网络拥塞 |
506 | 数据包延迟阈值已 crossing | 注意 | 监控网络拥塞 |
gNMI 客户端请求
您可以在主机服务器上使用 gNMI 客户端来请求代理订阅的功能和数据。
以下示例显示了 gNMI 客户端对接口速度的请求
gnmi_client -target_addr 10.209.37.121:9339 -xpath "/interfaces/interface[name=swp1]/ethernet/state/port-speed" -once
{
"Response": {
"Update": {
"update": [
{
"val": {
"Value": {
"StringVal": "SPEED_40GB"
}
},
"path": {
"elem": [
{
"name": "state"
},
{
"name": "port-speed"
}
]
}
}
],
"timestamp": 1636910588085654861,
"prefix": {
"target": "netq",
"elem": [
{
"name": "interfaces"
},
{
"name": "interface",
"key": {
"name": "swp1"
}
},
{
"name": "ethernet"
}
]
}
}
}
}
以下示例显示了 gNMI 客户端对 WJH 丢弃数据的请求
gnmi_client -target_addr 10.209.37.121:9339 -xpath "/interfaces/interface[name=swp8]/wjh/aggregate/l2/reasons/reason[id=210]"
{
"Response": {
"Update": {
"update": [
{
"val": {
"Value": {
"StringVal": "[{
"IngressPort": "swp8",
"DropType": "L2",
"Reason": "Source MAC equals destination MAC",
"Severity": "Error",
"Smac": "00:02:10:00:00:01",
"Dmac": "00:02:10:00:00:01",
"Proto": 6,
"Sport": 15,
"Dport": 16,
"Sip": "1.1.1.1"
"Dip": "2.2.2.2",
"AggCount": 192,
"FirstTimestamp": 1636907412,
"EndTimestamp": 1636907432,
}]"
}
},
"path": {
"elem": [
{
"name": "state"
},
{
"name": "drop"
}
]
}
}
],
"prefix": {
"elem": [
{
"name": "interfaces"
},
{
"key": {
"name": "swp8"
},
"name": "interface"
},
{
"name": "wjh"
},
{
"name": "aggregate"
},
{
"name": "l2"
},
{
"name": "reasons"
},
{
"key" : {
"severity": "error",
"id": "210"
},
"name" : "reason"
}
],
"target": "netq"
},
"timestamp": 1636907442362981645
}
}
}