机房机柜PDU功耗统计,服务器用电计量
机房机柜PDU功耗统计,简单说就是通过带计量功能的PDU(电源分配单元)读取每个机柜、每路插座的电流、电压、功率,再把数据汇总成可查询的用电记录。
它适合需要核算机柜电费、评估扩容空间或做容量规划的运维人员。
读完这篇,你能独立完成从PDU接线、SNMP开启到采集脚本和结果验证的完整流程。
先确认硬件和网络条件
开始之前,先确认PDU类型。
只有智能PDU或计量PDU才带电流、功率数据,普通PDU只能供电,无法统计。
常见的计量方式有两种:整柜总计量和单插座计量,后者能精确到每台服务器用了多少电。
准备清单:
- 支持SNMP或Modbus TCP的智能PDU一台,记录管理IP、SNMP团体字(community)或账号密码。
- 采集服务器一台,建议与PDU管理口在同一网段,或路由可达。
- 网线、串口线按PDU说明书准备。
- 采集工具:
snmpwalk、snmpget,或Python + pysnmp。
先把PDU管理口接入交换机,用浏览器登录管理页面,确认能看到电流、电压、功率读数。
如果页面读数为0或显示异常,先别急着采集,优先检查PDU进线和负载是否接好。
开启SNMP并读取OID
大多数智能PDU默认关闭SNMP,需要在管理页面手动开启。
以常见品牌为例,路径通常是:系统设置 → 网络管理 → SNMP,勾选启用,设置只读团体字,例如public,保存后生效。
开启后在采集服务器上测试连通性:
snmpwalk -v 2c -c public 192.168.1.50 1.3.6.1.4.1
如果能返回一串OID和数值,说明SNMP通了。
接着定位功耗相关OID。
不同品牌OID不同,需要查PDU说明书或MIB文件。
常见字段包括:
- 电流:
rmsCurrent,单位安培 - 电压:
rmsVoltage,单位伏特 - 有功功率:
activePower,单位瓦特
用snmpget读取单个值验证:
snmpget -v 2c -c public 192.168.1.50 1.3.6.1.4.1.xxxx.1.1.1.0
把返回的功率值和管理页面显示的数字对比,一致说明OID找对了。这一步是后面所有统计的基础,OID错了数据全错。
用脚本定时采集并入库
单次读取只能看瞬时值,要统计用电量需要定时采集并累加。
下面是一个最小可用的Python示例,每60秒读取一次功率,按小时累加估算用电量:
from pysnmp.hlapi import *
import time
PDU_IP = '192.168.1.50'
COMMUNITY = 'public'
POWER_OID = '1.3.6.1.4.1.xxxx.1.1.1.0'
def get_power():
iterator = getCmd(
SnmpEngine(),
CommunityData(COMMUNITY, mpModel=1),
UdpTransportTarget((PDU_IP, 161), timeout=2, retries=1),
ContextData(),
ObjectType(ObjectIdentity(POWER_OID))
)
errorIndication, errorStatus, errorIndex, varBinds = next(iterator)
if errorIndication or errorStatus:
return None
for name, val in varBinds:
return float(val)
kwh = 0.0
while True:
watts = get_power()
if watts is not None:
kwh += watts * 60 / 3600 / 1000
print(f'当前功率 {watts}W,累计 {kwh:.3f} kWh')
time.sleep(60)
把脚本放到/opt/pdu_monitor/pdu.py,用crontab -e或systemd守护运行。
注意:这里的累计值是估算,PDU内部通常也有电量寄存器,优先读取寄存器值更准确。
避坑要点
- 团体字权限过大:只读采集不要用读写团体字,避免误操作。
- SNMP超时:PDU管理口性能有限,轮询间隔不要低于30秒,否则容易丢包。
- 单位混用:电流是安培、功率是瓦特,累加前统一换算,别把毫安当安培。
- 单相与三相:三相PDU要分别读每相电流,直接相加功率会算错。
- 管理口和业务口混用:采集流量走管理网,别占用业务带宽。
验证数据是否可信
采集跑起来后,用两个方法交叉验证。
一是把脚本读到的功率和PDU管理页面、机柜电流表对比,偏差在5%以内通常可接受。
二是用钳形电流表在PDU进线处实测,和采集值做一次比对。
如果要做服务器级用电计量,需要单插座计量PDU,把每台服务器的电源线插到对应插座,按插座编号对应服务器资产表。
这样每台服务器的用电量就能独立统计,后续核算电费或评估PUE都有据可查。
常见疑问
普通PDU能改造吗?
不能直接改造,普通PDU没有计量芯片。只能整柜加装电流互感器或更换智能PDU。
采集频率多少合适?
做容量监控30到60秒一次即可;要精确计费,建议读取PDU内部电量寄存器,而不是靠脚本累加。
多个机柜怎么汇总?
给每台PDU分配固定IP和机柜编号,采集时把机柜号一起写入数据库,查询时按机柜分组求和即可。
没有SNMP怎么办?
部分PDU支持Modbus TCP或HTTP API,可以用对应协议采集;实在不支持,只能靠外接电流表人工记录。
整体思路就是:确认PDU可计量,开SNMP找到功率OID,脚本定时采集并按机柜汇总,最后用实测值验证。
按这个顺序做,机房机柜PDU功耗统计和服务器用电计量就能稳定落地。