3. IPMI传感器与事件日志实战
在 Supermicro 服务器上,BMC 通过 IPMI 持续采集主板、CPU、内存、电源、风扇等部件的传感器读数,并把越限、恢复、插拔、掉电等事件写入 SEL(System Event Log)。对运维人员来说,真正有价值的不是“能读到数”,而是能从传感器阈值和 SEL 记录中判断出:当前是否已经越限、是哪个部件、属于哪一类事件、是瞬时抖动还是持续劣化,以及下一步该查什么。本节围绕温度、电压、风扇、电源四类传感器和 SEL 解析展开,给出可直接在带内或带外执行的命令与判读方法。
一、先建立传感器与阈值的判读框架
IPMI 传感器读数不是简单的“当前值”,而是“当前值 + 状态 + 阈值”。以温度传感器为例,通常有 Lower Non-Recoverable(LNR)、Lower Critical(LC)、Lower Non-Critical(LNC)、Upper Non-Critical(UNC)、Upper Critical(UC)、Upper Non-Recoverable(UNR)六档阈值。当前读数落在哪一档之间,决定了传感器状态是 ok、nc、cr 还是 nr。电压传感器同理,但方向相反:电压偏低通常比偏高更常见,因此 LC/UC 两侧都要看。风扇和电源则更多以“状态 + 转速/功率”组合判断。
需要特别说明的是:不同 Supermicro 平台、不同 BMC 固件版本,传感器名称和阈值可能不同,例如 CPU1 Temp、P1-DIMMB1 Temp、VCCP、12V、FAN1 等。因此下面所有命令输出和数值均为教学示例,实际执行时应以本机 ipmitool sensor list 输出为准。
二、读取四类传感器状态
带外可通过 BMC 管理口执行,带内若已加载 ipmi 驱动也可直接执行。最常用的命令是:
ipmitool -I lanplus -H 10.0.0.120 -U ADMIN -P '示例密码' sensor list
ipmitool -I lanplus -H 10.0.0.120 -U ADMIN -P '示例密码' sdr type temperature
ipmitool -I lanplus -H 10.0.0.120 -U ADMIN -P '示例密码' sdr type voltage
ipmitool -I lanplus -H 10.0.0.120 -U ADMIN -P '示例密码' sdr type fan
ipmitool -I lanplus -H 10.0.0.120 -U ADMIN -P '示例密码' sdr type power
示例输出片段如下(教学示例,非实测):
CPU1 Temp | 62.000 | degrees C | ok | na | na | na | 85.000 | 90.000 | 95.000
P1-DIMMB1 Temp | 48.000 | degrees C | ok | na | na | na | 80.000 | 85.000 | 90.000
VCCP | 1.820 | Volts | ok | 1.620 | 1.680 | 1.740 | 1.980 | 2.040 | 2.100
12V | 12.180 | Volts | ok | 10.200 | 10.800 | 11.400 | 12.600 | 13.200 | 13.800
FAN1 | 8400.000 | RPM | ok | na | na | 1200 | na | na | na
PS1 Status | 0x01 | discrete | 0x01 | na | na | na | na | na | na
判读要点:温度看 UNC/UC 是否接近,电压看是否偏离标称值超过 5%,风扇看转速是否低于 LNC 阈值,电源看 discrete 状态是否为 0x01(存在/正常)。若某传感器状态为 nc 或 cr,应优先记录其名称、当前值和阈值,再结合 SEL 判断发生时间。
三、解析 SEL:从事件记录定位早期异常
SEL 是定位早期硬件异常的核心依据。常用命令:
ipmitool -I lanplus -H 10.0.0.120 -U ADMIN -P '示例密码' sel info
ipmitool -I lanplus -H 10.0.0.120 -U ADMIN -P '示例密码' sel list
ipmitool -I lanplus -H 10.0.0.120 -U ADMIN -P '示例密码' sel elist
ipmitool -I lanplus -H 10.0.0.120 -U ADMIN -P '示例密码' sel get 0x12
示例 SEL 记录(教学示例):
1 | 03/12/2025 | 09:14:22 | Temperature #0x01 | Upper Non-critical going high | Asserted
2 | 03/12/2025 | 09:14:25 | Temperature #0x01 | Upper Critical going high | Asserted
3 | 03/12/2025 | 09:15:02 | Temperature #0x01 | Upper Critical going high | Deasserted
4 | 03/12/2025 | 10:02:11 | Voltage #0x2A | Lower Non-critical going low | Asserted
5 | 03/12/2025 | 10:02:40 | Voltage #0x2A | Lower Non-critical going low | Deasserted
6 | 03/12/2025 | 11:20:07 | Fan #0x41 | Lower Critical going low | Asserted
7 | 03/12/2025 | 11:20:09 | Fan #0x41 | Lower Critical going low | Deasserted
8 | 03/12/2025 | 12:41:33 | Power Supply #0x01| Presence detected | Asserted
解析时先看时间线:第 1、2 条是同一温度传感器在 3 秒内从 UNC 升到 UC,随后第 3 条恢复,说明这是一次短时热事件,可能是风扇调速或瞬时负载导致;第 4、5 条电压在 29 秒内恢复,属于抖动;第 6、7 条风扇 2 秒内恢复,可能是转速采样抖动;第 8 条电源“Presence detected”通常表示电源被重新识别,需结合是否有人插拔或电源自身重启判断。
更关键的是“重复出现”模式。如果同一传感器在数小时内多次 Asserted/Deasserted,即使每次都能恢复,也应视为早期劣化信号。例如风扇反复 Lower Critical,可能是轴承磨损或供电不稳;电压反复 Lower Non-critical,可能是电源老化或背板接触不良。
四、把传感器与 SEL 关联成定位路径
单看传感器只能知道“现在”,单看 SEL 只能知道“过去”。把两者关联,才能形成定位路径:先由 SEL 找到异常传感器编号,再用 sdr get 或 sensor get 查该传感器当前状态和阈值,最后结合机箱物理位置确认部件。例如 SEL 中 Fan #0x41 反复 Lower Critical,可执行:
ipmitool ... sdr get "FAN5"
ipmitool ... sensor get "FAN5"
若当前转速已恢复到 8000 RPM 以上,但 SEL 中一周内出现 6 次 Lower Critical,则应安排更换该风扇或检查其供电接口。若当前仍低于 LNC,则属于持续故障,需立即处理。
五、实战判读示例与处置建议
假设某台 Supermicro 2U 服务器在 24 小时内 SEL 出现以下模式:CPU1 Temp 在 09:14 出现 UNC→UC→恢复;VCCP 在 10:02 出现 LNC→恢复;FAN5 在 11:20 出现 LC→恢复;PS2 在 12:41 出现 Presence detected。此时不应只处理“当前状态”,而应做三件事:
- 用
sensor list确认当前 CPU1 Temp、VCCP、FAN5、PS2 是否已恢复 ok; - 用
sel elist统计各传感器近 7 天 Asserted 次数,若 FAN5 超过 3 次,列入更换计划; - 用
sel get查看 PS2 事件详情,确认是“Presence detected”还是“Power Supply AC lost”,前者可能是插拔,后者需查市电或 PDU。
如果当前所有传感器均为 ok,但 SEL 中同一风扇一周内出现 6 次 Lower Critical,这属于典型的早期硬件异常:风扇尚未完全失效,但已进入不稳定状态。此时应安排计划内更换,而不是等到它彻底停转触发更高级别告警。同理,电压反复 LNC 且当前恢复,也应优先检查电源模块和背板供电,而不是简单清空 SEL。
sel list 导出并保存,否则会丢失定位早期异常的关键时间线。建议每次巡检时导出一次 SEL 并归档。sdr info 或 sensor list 映射到实际部件名称后再判断,不能直接按编号猜测。总结来说,IPMI 传感器负责回答“现在是否越限”,SEL 负责回答“过去发生了什么、是否反复”。把两者结合,才能从“看到告警”走到“定位早期硬件异常”。温度看趋势与恢复时间,电压看反复抖动,风扇看重复次数,电源看 Presence 与冗余状态,这是 Supermicro 监控告警与容量运营中最基础也最实用的一条判读链路。