CodingBox Q&A Ask question

nxos_ssh 上 NAPALM 的 get_optics 对 QSFP-100G-CWDM4 模块只返回通道 1 的 DOM 数据

Asked Active Viewed 94 AI translation from English
6

我在给几个 Nexus 9000 组网做按端口的光学遥测接入监控。采集走的是 NAPALM,用的采集函数是 get_optics()。

  • Nexus 9000 leaf/spine 对
  • 网络互联链路上用的是 QSFP-100G-CWDM4 模块
  • NAPALM,nxos_ssh 驱动,SSH 传输,还没启用 NX-API

对一个四通道的 100G 模块,这个采集函数只给回一个通道:

>>> pprint(dev.get_optics()['Ethernet1/49'])
{'physical_channels': {'channel': [{'index': 0,
                                    'state': {'input_power': {'instant': ...},
                                              'output_power': {'instant': ...},
                                              'laser_bias_current': {'instant': ...}}}]}}

交换机本身明明是有这份数据的——show interface transceiver details 能打印出全部四条通道的 Rx 功率、Tx 功率和偏置电流——所以这看起来更像是解析器的问题,而不是平台的问题。

我已经检查过的:

  • 我轮询的每一个 QSFP-100G-CWDM4 端口都是同样的结果,所以不是某个模块特殊
  • SFP+ 端口读回来是正常的,这也说得通,因为它本来就只有一条通道要报
  • 通读了驱动里解析光学信息的代码,看起来只有第一个 DOM 块被采到了

有没有人真的通过 NAPALM 在 NX-OS 上采集过按通道的 DOM 数据,还是大家最后都是自己解析交换机的输出?

Comments 4

具体是哪个 NAPALM 版本,这些 leaf 跑的是哪个 NX-OS 分支?nxos_ssh 里的光学信息处理代码被重写过不止一次,交换机上收发器的输出格式在不同分支之间也不完全一样,所以在有人断定这是个 bug 之前,这两点都得先确认。

在你动手写自己的解析器之前,有件事值得先做:在一个 SFP+ 端口上调一次 get_optics(),把结构拿去跟 CWDM4 那个比对。如果两者返回的骨架一模一样、只是数值不同,那说明驱动的文本遍历是正常的,只是在匹配到第一个块之后就放弃了。如果两者的结构本身就不一样,那说明它在 QSFP 端口上根本没走到按通道那部分。这是两种不同的修法,而 SFP+ 的输出是区分它们最省事的办法。

0 IndiagigopsIN Show original (English) AI translation

两台采集设备用的都是 PyPI 上的当前版本,leaf 和 spine 跑的是同一个 NX-OS 分支,所以不管我指向哪台设备结果都一样——不是某台设备特殊。

按你说的做了 SFP+ 的对比。两种情况下骨架一模一样:physical_channels.channel 里只有一个索引为 0 的元素,三个数值都填了。对一条通道的模块来说这个答案是对的,对 CWDM4 来说就是错的。所以这个解析器并不是没找到输出里按通道的那部分,它匹配到一个块、填好之后就停在那里了。这跟我读代码时看到的情况一致,我只是想找人确认一下自己没有理解错。

0 KazakhstanrackhubKZ Show original (English) AI translation

这是驱动本身的缺口,不是你这边的问题。针对 nxos_ssh 有一个开放的 pull request,重写了光学信息的解析:每条通道都会作为 physical_channels.channel 下自己的一个元素返回,而不是遍历停在索引 0,每个元素都带着自己的 Rx 电平、Tx 电平和激光偏置电流。它随附的测试用例就是照着一个四通道的 QSFP-100G-CWDM4 写的,所以它正是针对你这个具体模块写的。我只在实验室设备上跑过,所以这只是个值得一试的东西,还谈不上推荐用于生产环境的采集器。

在它进入你能安装的正式版本之前,务实的做法是对 100G 端口跳过这个采集函数,自己解析 show interface transceiver details,然后把每条通道都作为独立的时间序列推进监控。要自己维护的代码是多了一些,但至少不会白白丢掉四分之三的信号。

不管走哪条路,都要按通道告警。一条 CWDM4 上退化的通道会拖垮整条链路,但如果你只盯着通道 1,它永远不会显现出来。

0 CanadalantechCA Show original (English) AI translation

在 Nexus 上按通道的可见性比大家想的更重要。

我们在一台 Nexus 9000 上遇到过一个 Cloud Scale 的缺陷,一个 QSFP-100G-SR4-S 拆成了 4x25G。四个 25G 端口里只想要一个,另外三个一直是关闭的,而我们真正在意的那个却始终连不上。最后解决问题的办法是先把整组都拉起来——对四个子接口都执行 no shutdown——让通道 1 稳定下来,然后再把那三个多余的关掉。趁着在这上面操作,也要保证整组的 FEC 设置一致;单条通道上一个不一致的设置,不会乖乖只留在那条通道上。

重点是,仪表盘里只有通道 1 的话,你对一个 100G 端口实际发生的大部分事情都是瞎的。多花力气去解析是值得的。

1 Ukrainerxnode71UA Show original (English) AI translation
Log in to comment. Log in