gNMI 流媒体

您可以使用 gRPC 网络管理接口 (gNMI) 从 Cumulus Linux 收集系统资源、接口和计数器信息,并将其导出到您自己的 gNMI 客户端。

配置 gNMI 代理

默认情况下,gNMI 代理处于禁用状态。要启用它,请运行

 cumulus@switch:~$ netq config add agent gnmi-enable true

gNMI 代理在端口 9339 上监听。如果您的另一个应用程序使用了该端口,您可以更改默认端口。/etc/netq/netq.yml 文件存储配置。

使用以下命令调整设置

  1. 禁用 gNMI 代理

    cumulus@switch:~$ netq config add agent gnmi-enable false
    
  2. 更改 gNMI 代理监听的默认端口

    cumulus@switch:~$ netq config add agent gnmi-port <gnmi_port>
    
  3. 重启 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-platformopenconfig-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-lldpLLDP 数据(端口 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 模型作为参考

nvidia-if-ethernet-ext
nvidia-if-wjh-drop-aggregate

使用 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原因严重性描述
201MLAG 端口隔离注意预期行为
202目标 MAC 已保留 (DMAC=01-80-C2-00-00-0x)错误从对等端收到错误的数据包
203VLAN 标记不匹配错误验证链路两端的 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 表
305IPv6 目标位于多播范围 FFx0:/16 内注意预期行为 - 数据包不可路由
306IPv6 目标位于多播范围 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错误从对等端收到错误的数据包
317IPv4 源 IP 是有限广播错误从对等端收到错误的数据包
318IPv4 目标 IP 是本地网络 (destination=0.0.0.0/8)错误从对等端收到错误的数据包
320入口路由器接口已禁用警告验证您的配置
321出口路由器接口已禁用警告验证您的配置
323IPv4 路由表 (LPM) 单播未命中警告验证此目标 IP 的路由表
324IPv6 路由表 (LPM) 单播未命中警告验证此目标 IP 的路由表
325路由器接口环回警告验证接口配置
326数据包大小大于路由器接口 MTU警告验证路由器接口 MTU 配置
327TTL 值太小警告实际路径长于 TTL

隧道丢弃原因

原因 ID原因严重性描述
402Overlay 交换机 - 源 MAC 是多播错误对等端发送了错误的数据包
403Overlay 交换机 - 源 MAC 等于目标 MAC错误对等端发送了错误的数据包
404解封装错误错误对等端发送了错误的数据包

ACL 丢弃原因

原因 ID原因严重性描述
601入口端口 ACL注意验证 ACL 配置
602入口路由器 ACL注意验证 ACL 配置
603出口路由器 ACL注意验证 ACL 配置
604出口端口 ACL注意验证 ACL 配置

缓冲区丢弃原因

原因 ID原因严重性描述
503尾部丢弃警告监控网络拥塞
504WRED警告监控网络拥塞
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
      }
   }
}