把机柜 PDU 电量接进 Prometheus:从找对 OID 到画板的完整过程

2 阅读1分钟

上周帮一个客户的运维团队把两百多台机柜 PDU 的电量数据接进了他们已有的 Prometheus。过程不复杂,但中间有几个坑值得记下来,尤其是 OID 那一段——找错节点会让你白等两天。

先确认你的 PDU 到底支持哪种采集方式

这一步看着多余,实际很关键。市面上的智能 PDU 大致分三种数据出口:

采集方式

数据粒度

适合场景

SNMP Get

整机或支路级

已有网管平台,快速接入

SNMP Trap

事件级

告警联动

Modbus RTU/TCP

寄存器级

自控系统、电力监控

HTTP / MQTT

视厂商实现

云原生栈

这次客户要的是 Prometheus 拉取模式,所以走 SNMP Get。Prometheus 本身不认 SNMP,需要 snmp_exporter 做一层转换。

OID 别靠猜,先 walk 一遍

我见过最浪费时间的做法,是拿着厂商文档里的 OID 直接写配置,跑不通再改。正确顺序是先 snmpwalk 把整棵树拉下来看一眼:

snmpwalk -v2c -c public 10.20.30.41 1.3.6.1.4.1

返回里你会看到一堆私有节点。这时候要做的事是:带上负载,记录一次读数;断开负载,再记录一次。数值变化明显的那几个节点,就是电流和功率。

我们厂 2014 年做起机柜 PDU 这门生意,计量模块的出厂偏差控制在 ±1% 以内。但这里有个容易混淆的点:SNMP 返回的整数常常是放大过的,比如电流返回 2345 表示 23.45 A。这个倍率不写进配置,画出来的曲线就是平的。

常见字段

典型倍率

说明

电压

10 或 100

220.0 V 可能返回 2200

电流

100

23.45 A 返回 2345

有功功率

1 或 10

单位 W,看厂商定义

电能

10 或 100

单位 kWh,累加量

snmp_exporter 配置怎么写

generator 生成配置这一段略过,直接看关键部分。重点是 metrics 里的 scale 和 type:

modules:
  pdu:
    walk:
      - 1.3.6.1.4.1.xxxxx.1.2
    metrics:
      - name: pdu_branch_current
        oid: 1.3.6.1.4.1.xxxxx.1.2.3.1.4
        type: gauge
        scale: 0.01
        indexes:
          - labelname: branch_index
            type: gauge

scale: 0.01 对应前面说的 100 倍率。这个字段填错不会报错,只会让你得到一条错 100 倍的曲线,所以我习惯生成完先跑一次 curl 验证:

curl -s "http://localhost:9116/snmp?target=10.20.30.41&module=pdu" | grep pdu_branch_current

采集间隔别设太短

这是第二个坑。两百多台设备,每台二十多个支路,如果设 15 秒一轮,snmp_exporter 自己就先扛不住了。而且大部分 PDU 的计量芯片刷新率也就 1 秒左右,采太快拿到的还是重复值。

我的经验是 60 秒一轮,支路级数据降采样到 5 分钟存一份长期数据。Prometheus 侧配 recording rule 就行。

ATS 切换那一瞬间的数据怎么处理

带双路输入的机型,切换发生在 ≤7ms 内,负载侧基本无感,但采集侧会看到一个电压瞬时凹陷。如果你的告警规则里有"电压低于某值持续 N 秒",这种毫秒级凹陷不会触发,不用担心。

真正要注意的是切换完成后的 SNMP 会话。有些固件在切换后会重置网络模块,导致接下来一到两个采集周期取不到数。解决办法是在告警规则里加 for: 3m,避免这种抖动刷屏。

画板这一步反而不是重点

数据进来了,Grafana 面板按机柜维度组织就行。我一般做三层:单个机柜的支路电流堆叠图、按列的功率汇总、全机房 PUE 趋势。PUE 那部分需要把空调和 UPS 的电量也接进来,光有 PDU 数据算不出来。

顺带提一句,如果你们在做选型阶段就要考虑对接,建议在采购前先把 OID 文档要过来。我们这边做非标定制时,客户提出要接入特定平台,30 分钟内能出图,1 小时内报价,接口文档随图纸一起给。厂里的老师傅干了 25 年,他常提醒一句话:接口这东西后补比预留贵得多。

最后列几个我踩过的点

踩过的坑

现象

处理方式

交换机端口绑定 MAC

换模块后采集全断

端口解除绑定或更新绑定表

两台设备 community 写反

数据串了半天没发现

按机柜编号逐一核对

固件版本不一致

同型号 OID 不同

升级前统一版本并验证

容器未放出向 UDP

一直超时

开 161 出向规则

产品本身的合规资质(CCC、CE 里的 LVD 与 EMC 部分、GS)和这次的数据对接没有冲突,但如果你要改 PDU 的通讯模块硬件,ISO 9001 体系下这个变更得走评审,别私下换。

收个尾

整套流程跑通大概一天半,其中半天花在确认 OID 倍率上。剩下的时间主要在和客户的网管平台对字段命名。技术本身没难度,耐心比对才是关键。