WH11003
(恒扬-胡田野)
1
问题描述
两台相同的设备,CPLD、BMC固件版本一致,检查当前告警时,一台可以看到Inlet Temp的0x12000013告警,一台看不到。
Scanner_Inlet依赖SmcDfxInfo更新。
环境信息
期望结果
由于CPLD不支持进风口温度,两台的当前告警应该都可以看到进风口温度的0x12000013告警信息
问题
1 当前告警是否只展示BMC最近一次重启后产生的告警信息?
2 event/sync_property_trace.log日志看到Scanner_Inlet的Status是0,为什么还触发了告警?
3 sensor/sync_property_trace.log没看到Scanner_Inlet的Status更新记录,是否正常?
4 SmcDfxInfo会影响Scanner_Inlet的Status吗?
答案内容由AI生成,仅供参考:
结论:该问题更可能是由于 SmcDfxInfo 对硬件能力判断不一致导致的行为偏差,而非告警机制本身缺陷。建议统一底层数据处理逻辑,并加强状态同步与日志记录完整性。
点击此处查看详细分析解答
当前告警机制分析
问题背景
在两台配置相同的设备(CPLD、BMC固件版本一致)上,检查当前告警时出现不一致现象:
- 一台设备可以看到
Inlet Temp 的 0x12000013 告警
- 另一台设备看不到该告警
已知 Scanner_Inlet 依赖 SmcDfxInfo 更新,且 CPLD 不支持进风口温度。软件版本为 OpenUBMC2506。
针对具体问题的分析
1. 当前告警是否只展示BMC最近一次重启后产生的告警信息?
否,当前告警不仅限于BMC最近一次重启后的告警信息。
根据 openUBMC 的设计,告警状态是持久化的。系统通过以下机制维护告警信息:
- SEL (System Event Log):系统事件日志会持久化存储所有历史告警事件,包括 Assert(触发)和 Deassert(恢复)记录。
- 当前告警列表:显示所有仍处于激活状态(Assert)的告警,这些状态在 BMC 重启后会被恢复。
例外情况:如知识库中文档 #10《Event常见问题指南》提到,若执行了 AC Power Cycle(交流电源循环),某些非持久化告警可能丢失。此外,如果系统配置了"复位时清空"策略,则可能导致告警状态丢失。
因此,两台设备告警显示不一致的原因不太可能是仅展示"最近一次重启后"的告警。
2. event/sync_property_trace.log日志看到Scanner_Inlet的Status是0,为什么还触发了告警?
Status=0 表示正常状态,不应触发告警。若此时仍上报告警,则存在异常或配置问题。
可能原因包括:
- 状态同步延迟或错误:尽管
sync_property_trace.log 显示 Status=0,但告警子系统可能缓存了之前的状态(如 Status=1),导致误报。
- 告警防抖机制未生效:如果未配置合理的防抖策略(debounce),短暂的状态抖动可能导致虚假告警。
- 配置逻辑错误:可能存在条件表达式配置错误,导致即使 Status=0 也会满足告警条件。
- 日志时间戳不同步:
event/sync_property_trace.log 与其他模块日志存在时间偏差,实际告警发生时 Status 并非 0。
建议排查:结合 dump_info<AppDump>sensor_alarm>eo_sel 中的日志,查看该告警的具体触发时间与 Status 变更时间是否一致。
3. sensor/sync_property_trace.log没看到Scanner_Inlet的Status更新记录,是否正常?
不正常。sensor/sync_property_trace.log 应该记录 Scanner_Inlet 的状态更新。
该日志文件用于追踪传感器属性的同步过程。若未记录 Scanner_Inlet 的状态更新,说明:
- 状态从未被更新:
Scanner_Inlet 依赖 SmcDfxInfo 更新,若 SmcDfxInfo 本身未更新或未成功传递数据,则不会触发状态变更。
- 组件未注册或加载失败:
- 检查是否有
[register] [Event_xxx] [error_msg: no definition] 或 [error_msg: no component] 类似错误(参见文档 #10)。
- 可能
Scanner_Inlet 所属的 Component 未正确解析或关联。
- 日志级别过低:可能日志级别设置过高,未输出属性追踪信息。
验证方法:使用 busctl tree bmc.kepler 检查 Scanner_Inlet 对应的对象是否存在,并确认其 Status 属性是否有值。
4. SmcDfxInfo会影响Scanner_Inlet的Status吗?
是的,SmcDfxInfo 直接影响 Scanner_Inlet 的 Status。
从描述“Scanner_Inlet 依赖 SmcDfxInfo 更新”可知:
Scanner_Inlet 是一个虚拟传感器或逻辑事件,其状态由 SmcDfxInfo 提供的数据驱动。
- 当
SmcDfxInfo 无法获取有效温度数据(例如 CPLD 不支持 Inlet Temp),应设置 Scanner_Inlet.Status = 1(异常)并触发告警。
- 反之,若
SmcDfxInfo 成功读取到数据(即使为默认值),则 Scanner_Inlet.Status = 0(正常)。
因此,两台设备表现不一致的根本原因可能是:
- 一台设备的
SmcDfxInfo 成功接收到某种“假数据”或默认值,判定为“支持”,状态为 0;
- 另一台未能获取数据,进入异常路径,Status=1,触发
0x12000013 告警。
注意:这也与期望结果矛盾——既然 CPLD 不支持进风口温度,两台都应触发告警,说明存在兼容性或识别逻辑不一致的问题。
综合分析与建议
| 问题 |
原因分析 |
解决建议 |
| 告警显示不一致 |
SmcDfxInfo 数据处理逻辑存在差异或状态同步异常 |
检查 SmcDfxInfo 的数据源是否一致,确认是否有缓存或默认值处理差异 |
| Status=0 却报错 |
状态与告警不一致,可能为状态更新滞后或防抖缺失 |
检查告警策略中是否启用防抖机制,核对事件触发条件 |
| 无 Status 更新日志 |
组件未正确加载或状态未发生变化 |
检查组件注册日志,确认 Scanner_Inlet 是否成功注册 |
SmcDfxInfo 影响 |
是直接影响源 |
统一 SmcDfxInfo 的处理逻辑,确保相同硬件条件下行为一致 |
推荐排查步骤:
- 使用
busctl get-property 查询 Scanner_Inlet 的 Status 和 EventSeverity 实际值;
- 检查
event/sync_property_trace.log 和 sensor/sync_property_trace.log 的时间戳是否同步;
- 查看
/var/log/one_log/event_register.log 确认告警对象是否注册成功;
- 确认
SmcDfxInfo 是否真的未提供 Inlet 温度数据;
- 验证两台设备的 PSR(Platform Specific Requirements)配置是否完全一致。
结论:该问题更可能是由于 SmcDfxInfo 对硬件能力判断不一致导致的行为偏差,而非告警机制本身缺陷。建议统一底层数据处理逻辑,并加强状态同步与日志记录完整性。
WH11003
(恒扬-胡田野)
4
两台设备app.log中最后一次告警的reading值都是1,时间都在1月份。
2月-3月期间两台设备都经历过多次重启。
event/event.db是持久化的文件吗?两台设备的event/event.db都能看到0x12000013告警内容
看event/sel.txt嘛 event.db就是记录的这个txt
看下历史状态
有没有恢复过
var/log/alarm.log会记录所有注册的对象以及初始告警值
如果预期有告警 实际没有
- 看告警对象注册没有,没注册的话就是CSR分发问题
- 注册了确认告警的告警值和门限
WH11003
(恒扬-胡田野)
7
1月底做过sel清除操作,event/sel.txt和alarm.log看不到Inlet Temp的信息了。
event是Chassis.ChassisAccessInletTempFailure类型,reading值是Scanner_Inlet.Status。
event/sync_property_trace.log可以看到event对象,记录的reading值是0。
WH11003
(恒扬-胡田野)
9
event配置
"Event_InletTempFail": {
"EventKeyId": "Chassis.ChassisAccessInletTempFailure",
"Reading": "<=/Scanner_Lm75_Inlet.Status",
"@Default": {
"Reading": 0
},
"Condition": 1,
"OperatorId": 5,
"Enabled": true,
"Component": "#/Component_Chassis",
"LedFaultCode": "A00"
}
event和sensor日志在压缩包里
AppDump.zip (60.2 KB)