BMC传感器日志自动覆盖功能 sel容量满后没有覆盖 (满了之后不再记录除非先clear log)

答案内容由AI生成,仅供参考:

BMC日志自动覆盖功能问题分析与解答

问题概述

在执行长时间稳定性测试时,通过脚本持续构造传感器告警(产生与消除),发现当SEL(System Event Log)容量满后,并未按照预期进行新日志覆盖旧日志的循环记录行为,而是触发了自动清空SEL日志的操作。这表明系统的日志管理策略并非采用“循环覆盖”机制,而是采取了“满则清空”的处理方式。


核心现象分析

根据提供的执行日志和界面截图,关键现象如下:

1. SEL 日志容量满的事件被记录

在第999次循环中出现了以下关键事件:

7d0 | 01/22/2026 | 02:06:52 | Event Logging Disabled #0x05 | Log full | Asserted

该事件表示 SEL日志已满,触发了日志记录功能的禁用状态。

2. 后续日志显示SEL区域被重置

在Web界面查看系统事件时,出现:

  • SEL Status - Asserted - Log area reset/cleared(SEL区域被重置/清除)
  • SEL Status - Deasserted - Log almost full

这表明:当SEL写满后,并没有启用循环覆盖,而是清空了整个日志区域并重新开始记录。

3. ipmitool sel info 输出佐证

Entries        : 5
Percent Used   : 0%
Overflow       : false
Last Del Time  : 01/22/2026 02:07:32
  • Entries: 5:当前仅有5条记录。
  • Percent Used: 0%:使用率为0%,说明日志区域刚被清空。
  • Overflow: false:系统认为没有发生溢出,说明是主动清空而非持续写入导致溢出。
  • Last Del Time 存在:表明有删除操作发生。

这些数据证明:SEL 日志在满后被清空重置,而非启用循环覆盖模式。


根本原因分析

:white_check_mark: 关键配置参数:BMCSet_SEL_Mode

根据知识图谱信息:

BMCSet_SEL_Mode 是一个配置参数,用于决定IPMI SEL的存储模式:
可选值为:ClearAfterFull(默认)或 RotateAfterFull

  • ClearAfterFull:当日志满时,清除所有记录,重新开始写入。
  • RotateAfterFull:启用循环覆盖模式,新事件覆盖最老的事件。

:red_exclamation_mark: 当前行为(清空日志)正是 ClearAfterFull 模式的典型表现。

结合文档和实际行为可判断:
:backhand_index_pointing_right: 当前BMC系统中 BMCSet_SEL_Mode 的设置为默认值 ClearAfterFull,并未开启 RotateAfterFull(循环覆盖)模式。


相关实体支撑信息

实体 描述
SEL (System Event Log) IPMI标准组件,记录硬件事件,包括传感器告警、电源状态等。
BMCSet_SEL_Mode 控制SEL日志行为的配置项,默认为 ClearAfterFull
RotateAfterFull 一种日志存储模式,允许日志满时自动覆盖最老条目,实现循环写入。
Event Logging Disabled #0x05: Log full 标准IPMI事件,表示SEL已满,触发日志禁用。

同时,在Web界面中虽提供了“●线性记录 ○循环记录”选项,但实际底层配置未生效或未正确映射到 BMCSet_SEL_Mode


期望行为 vs 实际行为对比

项目 期望行为(循环覆盖) 实际行为(当前情况)
日志满后处理方式 新日志覆盖最老日志 清空所有日志,重新开始
日志连续性 保持最近N条历史记录 历史记录全部丢失
ipmitool sel info 显示 Entries稳定在最大值附近,Percent Used ≈100% Entries骤降至0,Percent Used为0%
Overflow标志 true(表示溢出并覆盖) false,且存在Last Del Time
是否删除日志 是(日志区域被重置)

解决方案建议

:white_check_mark: 方案一:启用 RotateAfterFull 模式

修改BMC配置,将SEL模式从 ClearAfterFull 改为 RotateAfterFull,以实现真正的循环覆盖功能。

操作步骤(需确认是否支持):

# 示例命令(具体取决于BMC实现)
ipmitool raw 0x0a 0x42 0x01

注:0x0a 0x42 是“Set SEL Time”或“Set SEL Entry”相关命令组,具体需查阅BMC厂商文档。

或者通过Redfish API或OEM接口设置:

{
  "Oem": {
    "Huawei": {
      "BMCSet_SEL_Mode": "RotateAfterFull"
    }
  }
}

:warning: 注意:并非所有BMC版本都支持此功能。例如OpenBMC开源项目中部分版本仅支持Clear模式。


:white_check_mark: 方案二:通过外部脚本定期导出并清理日志

若无法启用循环模式,可通过运维脚本实现“软性循环”:

# 定期导出SEL日志并保留最新N条
ipmitool sel list > /backup/sel_$(date +%Y%m%d_%H%M%S).log
ipmitool sel clear  # 手动清空(可选)

建议结合 Log Rotation 机制,如使用 logrotate 工具管理。


:white_check_mark: 方案三:调整SEL分区大小(高级)

若SEL容量过小导致频繁写满,可在CSR阶段调整SEL分配单元数量:

# 配置示例(CSR配置)
"SEL": {
  "NumAllocUnits": 4000,     # 增加分配单元数
  "AllocUnitSize": 16        # 每单元16字节
}

总容量 = 4000 × 16 = 64KB,可容纳更多事件。


建议与总结

类别 内容
:magnifying_glass_tilted_left: 根因总结 当前BMC使用的SEL模式为默认的 ClearAfterFull,日志满后会清空并重置,而非循环覆盖。
:white_check_mark: 推荐解决路径 检查并修改 BMCSet_SEL_Mode 参数,设置为 RotateAfterFull 以启用真正的循环覆盖机制。
:pushpin: 验证方法 使用 ipmitool sel info 观察:
• Entries 应接近最大值
• Percent Used ≈100%
• Overflow = true(若支持)
:warning: 注意事项 修改SEL模式可能影响日志审计合规性,需评估业务需求是否允许旧日志被覆盖。

补充参考:如何判断是否支持RotateAfterFull

可以查询BMC对IPMI SEL命令的支持情况:

ipmitool mc info

输出中应包含:

Additional Device Support:
    SEL Device

表示支持SEL功能,但是否支持滚动模式还需看固件实现。

查看是否支持 Reserve SELPartial Add 操作,是实现循环写入的基础。


:white_check_mark: 结论
当前BMC日志“自动覆盖”功能未生效,实际为“清空重置”,根本原因是使用了默认的 ClearAfterFull 模式。应通过配置 BMCSet_SEL_Mode = RotateAfterFull 来实现期望的循环覆盖行为。

相关链接:

  1. 如何清除如下当前告警日志
  2. BMC冷复位后未记录sel事件
  3. 【iTestSmart 1.0.35】IPMI添加自定义sel日志,查看操作日志,配置精确时间失败。
  4. 事件日志停在某一条记录后不再增加了,循环记录,只有74条
  5. 目录 | 文档中心 | openUBMC