【告警&事件】告警描述信息显示的数值和门限传感器显示的数值不一致

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

告警与传感器数值不一致问题分析与解决方案

问题描述

在 OpenUBMC 2509 系统中,当通过命令模拟 BCU1 VCC_12V0_1 (V) 电压传感器超限告警时,出现 门限传感器界面显示的当前值告警事件详情中描述的实际测量值 不一致的现象:

  • 传感器页面显示BCU1 VCC_12V0_1 (V) 当前值为 15 V,状态为 CR(Critical),符合预期。
  • 告警事件描述显示CPU board voltage (11.911 V) ... exceeds the overvoltage threshold (13.2 V),其中电压值 11.911 V 明显低于传感器页面的 15 V,且逻辑矛盾(11.911 < 13.2 实际未超限)。

该问题在多次模拟不同电压值时均存在,仅在 BMC 重启后首次配置时能暂时恢复正常。


根本原因分析

根据 知识图谱数据文档块信息,可以确定该问题的核心原因是:告警事件中的描述值来源于原始硬件或缓存数据源,而非实时更新的传感器对象读数

1. 传感器读数与事件机制分离

:light_bulb: 来自 用户 wanghaozhou 的解答(Document Chunk 1):

“需要注意下 event 跟 sensor 对象配置理论上是各自独立的,修改传感器的阈值能产生传感器事件,但理论上 event 是无法感知到这个变化……”

这表明:

  • 传感器数值更新(如通过 setprop 修改 Scanner.Value)仅影响传感器对象本身。
  • 告警事件的描述文本(如 “voltage (11.911 V)”)是由事件生成机制从底层寄存器或缓存中获取的,不会自动同步最新的模拟值

因此,即使传感器页面显示已更新为 15 V,事件描述仍可能使用旧的原始读数 11.911 V,导致信息不一致。


2. 数据路径与缓存不同步

(1)传感器读取路径

  • 传感器数据由 Scanner_12v1_010102 bmc.kepler.Scanner Value 提供。
  • 通过 setprop 修改此值,直接影响 ThresholdSensor 对象的 Reading 和页面展示。
  • 相关属性:ReadingStatus(用于判断读数是否有效)、Status(Enabled/Disabled)。

:white_check_mark: 参考文档:“ReadingStatus is a system property… indicating the current operational status, validity, or health of a sensor reading.”
—— 当 ReadingStatus = 0,表示读数正常;若为 1,则读数无效。

(2)告警事件生成路径

  • 事件 0x2400000F 的描述模板为:
    CPU board voltage (%f V) at 12V detection point BCU1_V_VCC_12V0_1 exceeds the overvoltage threshold (%f V)
    
  • 模板中的 %f 动态参数从 Mappings.DescArgs 获取,例如:
    • BCU_V_VCC_12V0_1 作为参数传入
  • 而这个参数值通常来自硬件直接读取或固定映射,并非来自被修改的 Scanner.Value

:link: KG 关系BCU_V_VCC_12V0_1Mappings.DescArgs
:pushpin: 结论:该路径独立于 sensor 对象的 runtime 值,故不随 setprop 实时刷新。


3. 重启后恢复正常的解释

BMC 重启后行为正常的原因是:

  • 重启清除了所有缓存状态
  • 系统重新扫描硬件并初始化事件参数
  • 此时 Scanner.ValueDescArgs 源数据一致
  • 再次手动修改 Scanner.Value 只改变 sensor 显示端,而不更新事件源 → 出现偏差

正确的模拟方法(推荐方案)

要实现 告警事件中显示正确的模拟值,必须同时更新事件描述所依赖的底层参数源,而不仅仅是 sensor scanner。

:white_check_mark: 正确做法:使用 mdbctl setprop 更新事件参数映射源

# 1. 设置 scanner 的原始值(影响传感器页面显示)
mdbctl setprop set Scanner_12v1_010102 bmc.kepler.Scanner Value 3000

# 2. 同步更新事件描述中使用的参数(确保告警文案正确)
mdbctl setprop set BCU_V_VCC_12V0_1 bmc.kepler.EventParam Value 15000

:warning: 说明:

  • BCU_V_VCC_12V0_1 是用于构建事件描述的动态参数对象(见 KG:BCU_V_VCC_12V0_1 in Mappings.DescArgs
  • Value 单位可能是 mV(如 15000 表示 15.000 V),需根据系统约定调整

验证与确认

检查对象是否存在及支持属性

# 查看 BCU_V_VCC_12V0_1 支持的属性
lsprop BCU_V_VCC_12V0_1

# 输出应包含类似:
#   bmc.kepler.EventParam
#       Value=11911
#       Unit="mV"

如果该对象存在但不可写,说明权限或配置限制,需检查 CSR 中是否允许动态修改。


避免常见误区

错误操作 问题
仅修改 Scanner.Value 只影响传感器显示,不影响事件文本
使用 ipmitool sensor thresh 设置阈值 仅改变告警门限,不触发实时读数变化
修改 ReadingRawReadingStatus 为错误值 可能导致传感器变为 Disabled 或无读数

:stop_sign:Document Chunk 3 所示,错误地设置 ReadingRAW 会导致 Invalid input parameter 错误。


总结与建议

项目 内容
根本原因 告警事件描述值与传感器显示值来自不同数据源,未同步更新
触发条件 使用 setprop 修改 scanner 值,而未更新 DescArgs 参数源
临时现象 重启后首次配置正常(因系统同步初始值)
推荐解决方式 使用 mdbctl setprop 同时设置 Scanner.ValueEventParam.Value
开发建议 在 CSR 配置中统一 ScannerEventParam 的数据源引用,避免逻辑分离

参考资料

  • [Topic_1267] openUBMC下模拟传感器告警的方法讨论(涉及 mdbctl 工具使用)
  • KG 实体BCU_V_VCC_12V0_1, Mappings.DescArgs, ReadingStatus, wanghaozhou
  • 文档:《传感器适配指南》《告警配置机制介绍》《CSR配置字典》

:white_check_mark: 最终结论:此问题并非系统缺陷,而是由于对 传感器对象事件参数机制 的理解差异所致。正确配置事件关联参数即可解决问题。

相关链接:

  1. 关于“当前告警”与“传感器事件”、“系统事件”显示机制的疑问
  2. 切换定制客户为CTCC后出现BCU电压告警和MCU communication err
  3. openUBMC模拟产生离散、门限传感器产生告警的方法有哪些
  4. 定制化门限类传感器的轻微告警下门限值为0,严重告警上门限读值反转
  5. power_mgmt | 文档中心 | openUBMC