gNMI 流媒体
您可以使用 gRPC 网络管理接口 (gNMI) 从 Cumulus Linux 收集系统资源、接口和计数器信息,并将其导出到您自己的 gNMI 客户端。
配置 gNMI 代理
netq-agent
软件包包含 gNMI 代理,默认情况下禁用它。要启用 gNMI 代理,请执行以下操作
cumulus@switch:~$ sudo systemctl enable netq-agent.service
cumulus@switch:~$ sudo systemctl start netq-agent.service
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 代理依赖于它从 NVUE 服务收集的数据。为了使用 gNMI 进行完整的数据收集,您必须启用 NVUE 服务。要检查 nvued
服务的状态,请运行 sudo systemctl status nvued.service
命令
cumulus@switch:mgmt:~$ sudo systemctl status nvued.service
● nvued.service - NVIDIA User Experience Daemon
Loaded: loaded (/lib/systemd/system/nvued.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2023-03-09 20:00:17 UTC; 6 days ago
如果需要,启用并启动服务
cumulus@switch:mgmt:~$ sudo systemctl enable nvued.service
cumulus@switch:mgmt:~$ sudo systemctl start nvued.service
仅使用 gNMI 代理
NVIDIA 建议您同时使用 gNMI 和 NetQ 代理收集数据。但是,如果您不想同时使用这两个代理收集数据,或者您没有将数据流式传输到 NetQ,则可以禁用 NetQ 代理。然后,Cumulus Linux 仅将数据发送到 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 支持以下 gNMI 订阅模式
POLL
模式ONCE
模式STREAM
模式,仅支持ON_CHANGE
订阅
支持的模型
Cumulus Linux 支持以下 OpenConfig 模型
模型 | 支持的数据 |
---|---|
openconfig-interfaces | 名称、Operstatus、AdminStatus、IfIndex、MTU、LoopbackMode、Enabled、计数器(InPkts、OutPkts、InOctets、InUnicastPkts、InDiscards、InMulticastPkts、InBroadcastPkts、InErrors、OutOctets、OutUnicastPkts、OutMulticastPkts、OutBroadcastPkts、OutDiscards、OutErrors) |
openconfig-if-ethernet | AutoNegotiate、PortSpeed、MacAddress、NegotiatedPortSpeed、计数器(InJabberFrames、InOversizeFrames、InUndersizeFrames) |
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 数据(PortIdType、PortDescription、LastUpdate、SystemName、SystemDescription、ChassisId、Ttl、Age、ManagementAddress、ManagementAddressType、Capability) |
模型 | 支持的数据 |
---|---|
nvidia-if-wjh-drop-aggregate | 聚合的 WJH 丢弃,包括第 1 层、第 2 层、路由器、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 数据
您可以将 刚刚发生了什么 (WJH) 数据从 NetQ 代理导出到您自己的 gNMI 客户端。请参阅上面的 nvidia-if-wjh-drop-aggregate
参考 YANG 模型。
支持的功能
gNMI 代理支持 WJH 事件的 Capabilities
和 STREAM
订阅请求。
WJH 丢弃原因
NetQ 发送到 gNMI 代理的数据采用 WJH 丢弃原因的形式。SDK 生成丢弃原因,Cumulus Linux 将它们存储在 /usr/etc/wjh_lib_conf.xml
文件中。使用此文件作为指导,以筛选特定原因类型(L1、ACL 等)、原因 ID 或事件严重性。
第 1 层丢弃原因
原因 ID | 原因 | 描述 |
---|---|---|
10021 | 端口管理关闭 | 验证端口配置 |
10022 | 自动协商失败 | 手动设置端口速度,禁用自动协商 |
10023 | 与对等链路的逻辑不匹配 | 检查电缆或收发器 |
10024 | 链路训练失败 | 检查电缆或收发器 |
10025 | 对等设备正在发送远程故障 | 更换电缆或收发器 |
10026 | 信号完整性不良 | 更换电缆或收发器 |
10027 | 不支持电缆或收发器 | 使用支持的电缆或收发器 |
10028 | 电缆或收发器已拔下 | 插入电缆或收发器 |
10029 | 校准失败 | 检查电缆或收发器 |
10030 | 电缆或收发器状态不良 | 检查电缆或收发器 |
10031 | 其他原因 | 其他 L1 丢弃原因 |
第 2 层丢弃原因
原因 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 | 组播范围 FFx0:/16 中的 IPv6 目标 | 注意 | 预期行为 - 数据包不可路由 |
306 | 组播范围 FFx1:/16 中的 IPv6 目标 | 注意 | 预期行为 - 数据包不可路由 |
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 | 注意 | 验证访问控制列表配置 |
602 | 入口路由器 ACL | 注意 | 验证访问控制列表 |
603 | 出口路由器 ACL | 注意 | 验证访问控制列表 |
604 | 出口端口 ACL | 注意 | 验证访问控制列表 |
缓冲区丢弃原因
原因 ID | 原因 | 严重性 | 描述 |
---|---|---|---|
503 | 尾部丢弃 | 警告 | 监控网络拥塞 |
504 | WRED | 警告 | 监控网络拥塞 |
505 | 端口 TC 拥塞阈值已超过 | 注意 | 监控网络拥塞 |
506 | 数据包延迟阈值已超过 | 注意 | 监控网络拥塞 |
gNMI 客户端请求
您可以使用主机上的 gNMI 客户端来请求代理订阅的功能和数据。以下示例使用 gNMIc 客户端。
以下示例显示了针对 WJH 数据的 gNMIc STREAM
请求
gnmic -a 10.209.37.121:9339 -u cumulus -p ****** --skip-verify subscribe --path "wjh/aggregate/l2/reasons/reason[id=209][severity=error]/state/drop" --mode stream --prefix "/interfaces/interface[name=swp8]/" --target netq
{
"source": "10.209.37.121:9339",
"subscription-name": "default-1677695197",
"timestamp": 1677695102858146800,
"time": "2023-03-01T18:25:02.8581468Z",
"prefix": "interfaces/interface[name=swp8]/wjh/aggregate/l2/reasons/reason[severity=error][id=209]",
"target": "netq",
"updates": [
{
"Path": "state/drop",
"values": {
"state/drop": "[{\"AggCount\":283,\"Dip\":\"0.0.0.0\",\"Dmac\":\"1c:34:da:17:93:7c\",\"Dport\":0,\"DropType\":\"L2\",\"EgressPort\":\"\",\"EndTimestamp\":1677695102,\"FirstTimestamp\":1677695072,\"Hostname\":\"neo-switch01\",\"IngressLag\":\"\",\"IngressPort\":\"swp8\",\"Proto\":0,\"Reason\":\"Source MAC is multicast\",\"ReasonId\":209,\"Severity\":\"Error\",\"Sip\":\"0.0.0.0\",\"Smac\":\"01:00:5e:00:00:01\",\"Sport\":0}]"
}
}
]
}
{
"source": "10.209.37.121:9339",
"subscription-name": "default-1677695197",
"timestamp": 1677695132988218890,
"time": "2023-03-01T18:25:32.98821889Z",
"prefix": "interfaces/interface[name=swp8]/wjh/aggregate/l2/reasons/reason[severity=error][id=209]",
"target": "netq",
"updates": [
{
"Path": "state/drop",
"values": {
"state/drop": "[{\"AggCount\":287,\"Dip\":\"0.0.0.0\",\"Dmac\":\"1c:34:da:17:93:7c\",\"Dport\":0,\"DropType\":\"L2\",\"EgressPort\":\"\",\"EndTimestamp\":1677695132,\"FirstTimestamp\":1677695102,\"Hostname\":\"neo-switch01\",\"IngressLag\":\"\",\"IngressPort\":\"swp8\",\"Proto\":0,\"Reason\":\"Source MAC is multicast\",\"ReasonId\":209,\"Severity\":\"Error\",\"Sip\":\"0.0.0.0\",\"Smac\":\"01:00:5e:00:00:01\",\"Sport\":0}]"
}
}
]
}
以下示例显示了针对接口端口速度的 gNMIc ONCE
模式请求
gnmic -a 10.209.37.121:9339 -u cumulus -p ****** --skip-verify subscribe --path "ethernet/state/port-speed" --mode once --prefix "/interfaces/interface[name=swp1]/" --target netq
{
"source": "10.209.37.123:9339",
"subscription-name": "default-1677695151",
"timestamp": 1677256036962254134,
"time": "2023-02-24T16:27:16.962254134Z",
"target": "netq",
"updates": [
{
"Path": "interfaces/interface[name=swp1]/ethernet/state/port-speed",
"values": {
"interfaces/interface/ethernet/state/port-speed": "SPEED_1GB"
}
}
]
}
以下示例显示了针对接口状态的 gNMIc POLL
模式请求
gnmic -a 10.209.37.121:9339 -u cumulus -p ****** --skip-verify subscribe --path "state/oper-status" --mode poll --prefix "/interfaces/interface[name=swp1]/" --target netq
{
"timestamp": 1677644403153198642,
"time": "2023-03-01T04:20:03.153198642Z",
"prefix": "interfaces/interface[name=swp1]",
"target": "netq",
"updates": [
{
"Path": "state/oper-status",
"values": {
"state/oper-status": "UP"
}
}
]
}
received sync response 'true' from '10.209.37.123:9339'
{
"timestamp": 1677644403153198642,
"time": "2023-03-01T04:20:03.153198642Z",
"prefix": "interfaces/interface[name=swp1]",
"target": "netq",
"updates": [
{
"Path": "state/oper-status",
"values": {
"state/oper-status": "UP"
}
}
]
}