进风口温度同时上报轻微和严重2条告警

// 此模板仅供参考,如果不适用可以修改

问题描述

模拟进风口温度为42度时,同时上报轻微和严重2条告警。之前看社区上提过没有互斥码,目前不支持互斥。但后面sp1版本测,之前社区上提那个硬盘温度不互斥看起来没有了,是否进风口温度也能修改实现。

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

  • 硬件配置:[如 CPU、内存等]

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

知道如何修改进风口温度只上报1条告警

实际结果

[实际发生了什么,包含错误信息]

尝试过的解决方案

[列出您已经尝试过的解决方案及结果]

分析结论

[详细总结您对此问题的分析结论]

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

总结

问题 是否可解 推荐方案
同一传感器上报多条告警 :white_check_mark: 可解决 展示层优先级过滤
告警阈值显示不一致 :white_check_mark: 可修复 CSR 统一配置
期望仅报一条告警 :white_check_mark: 可达成 需定制开发实现告警合并逻辑

:pushpin: 最终建议
当前 可通过 UI 层过滤实现“只显示一条高优先级告警” 的效果,无需改动底层告警生成逻辑,兼顾可维护性用户体验。建议在下一版本中纳入标准功能迭代。

点击此处查看详细分析解答

进风口温度同时上报轻微和严重告警问题分析与解决方案

问题描述

当进风口温度达到42℃时,系统同时上报“轻微”和“严重”两级告警,具体表现为:

  • 事件码 0x12000001轻微告警(The air inlet temperature exceeds the overtemperature threshold at 40℃)
  • 事件码 0x12000003严重告警(The inlet temperature exceeds the overtemperature threshold at 42℃)

尽管此前社区已明确说明 V3版本当前不支持不同级别告警之间的互斥处理(即仅显示最高级别告警),但用户发现后续SP1版本中部分场景(如硬盘温度)的告警互斥问题已得到改善,因此希望确认进风口温度是否也能实现类似优化。


根源分析

1. 告警机制设计现状

根据知识图谱及社区反馈信息:

  • 告警管理系统负责处理温度相关告警,但目前不支持告警互斥机制

    {"topic": "V3是否支持不同级别告警之间的互斥处理?", "answer": "当前不支持互斥告警。"}
    
  • 当前实现方式为:多个阈值独立判断,只要满足条件即触发对应级别告警,导致高优先级告警出现时,低级别告警仍保留在列表中。

  • 实际案例中,Inlet Temp 传感器在温度超过 40℃ 触发轻微告警,再超过 42℃ 触发严重告警,两者均被记录。

2. 传感器阈值配置不一致问题

同一传感器在不同界面显示阈值不一致,加剧了用户的认知混乱:

界面 轻微阈值 严重阈值
门限传感器界面 41℃ 43℃
温度海洋界面 36℃ 38℃

:warning: 根本原因

  • “温度海洋”界面的告警阈值为独立配置数组UpperThreshold),无法直接引用传感器动态值。
  • 需通过 CSR 定制修改,否则会与真实阈值脱节。

参考文档指出:

“温度海洋中的门限值,由于是数组无法直接引用传感器的值,需要单独配置。若需修改,则需进行定制操作。”

3. 多级告警重复上报的技术逻辑

  • Inlet Temp 传感器支持完整的四级IPMI告警体系:

    • 轻微(Minor/Non-Critical)
    • 严重(Major/Critical)
    • 致命(Fatal/Non-Recoverable)
    • 恢复
  • 当温度从正常上升至42℃,依次跨越:

    • Upper Non-Critical Threshold(40℃)→ 触发轻微告警
    • Upper Critical Threshold(42℃)→ 触发严重告警
  • 系统未设计告警屏蔽或升级机制,导致两则事件独立生成并持久化。


支持证据

:white_check_mark: 知识图谱证据

  1. Inlet Temp 支持多级阈值告警

    Inlet Temp uses:
    - Upper Non-Critical Threshold → 触发轻微告警
    - Upper Critical Threshold → 触发严重告警
    
  2. 严重告警和轻微告警可同时触发

    关系: Inlet Temp → 轻微告警 & 严重告警
    描述: 当读值超过非关键阈值时触发轻微告警;超过关键阈值时触发严重告警
    
  3. 阈值来源分散

    Inlet Temp 的阈值在以下位置显示不一致:
    - System Information
    - Fan & Cooling Interface
    - Temperature Ocean Interface
    - Door Limit Sensor Interface(显示为:轻微41℃,严重43℃)
    
  4. Web界面显示真实告警
    用户截图显示:

    • Inlet_Temp (℃) 当前值为 42℃(红色标出)
    • 状态为 CR(Critical)
    • 告警列表中同时存在:
      • 轻微:0x12000001 @ 40℃
      • 严重:0x12000003 @ 42℃

分析结论

项目 结论
是否支持告警互斥? :cross_mark: 当前版本 不支持 多级别告警互斥
为何同时上报两则告警? 因温度连续越过两个独立配置的阈值(40℃ 和 42℃)
阈值为何不一致? “温度海洋”使用静态数组配置,未与传感器实时阈值同步
是否能修复? :white_check_mark: 技术上可行,但需定制开发

解决方案建议

:white_check_mark: 方案一:业务层实现告警去重/升级逻辑(推荐)

在“当前告警”展示层增加优先级合并机制,优先显示最高级别告警,隐藏相同传感器的低级别告警。

实现方式:

  • 后端服务(如 alarm_service)在输出告警列表前,按 sensor + subject type 分组
  • 若同一传感器存在多个级别告警,只保留最高等级一条
  • 示例规则:
    if 严重告警存在:
        忽略轻微告警
    elif 轻微告警存在:
        显示轻微告警
    

优势:

  • 不影响底层事件记录完整性(日志中仍可查)
  • UI 层简洁清晰,符合用户预期
  • 可推广至所有传感器类型

:white_check_mark: 方案二:统一“温度海洋”界面阈值配置

避免阈值展示不一致导致误判。

修改方法:

使用 CSR 配置同步温度点告警阈值:

{
  "TemperatureInfo_1_10": {
    "Name": "Inlet Temp",
    "UpperThreshold": [41, 43, 255],   // [轻微, 严重, 致命]
    "LowerThreshold": [0, 0, 0]
  }
}

:repeat_button: 需确保此值与 ThresholdSensor_InletTemp 中的 UpperNoncriticalUpperCritical 一致。


:white_check_mark: 方案三:通过事件规则合并(需平台支持)

修改 Event_InletOverTemp 的触发逻辑,使其具备状态迁移能力。

可行配置建议:

"Event_InletOverTemp": {
  "Condition": "Reading > UpperCritical",
  "DeassertCondition": "Reading < UpperNoncritical - Hysteresis",
  "UpgradePolicy": "auto_upgrade_to_severe"
}

:light_bulb: 提示:目前 openUBMC 的 event system 尚未内置“告警升级”机制,需在业务逻辑中实现。


建议反馈路径

  1. 提交增强需求至 GitCode

  2. 推动纳入 SR 或 SP 版本

    • 标记为 UX优化 + 告警治理 类需求
    • 建议由 thermalalarm_management SIG 组牵头实施

总结

问题 是否可解 推荐方案
同一传感器上报多条告警 :white_check_mark: 可解决 展示层优先级过滤
告警阈值显示不一致 :white_check_mark: 可修复 CSR 统一配置
期望仅报一条告警 :white_check_mark: 可达成 需定制开发实现告警合并逻辑

:pushpin: 最终建议
当前 可通过 UI 层过滤实现“只显示一条高优先级告警” 的效果,无需改动底层告警生成逻辑,兼顾可维护性用户体验。建议在下一版本中纳入标准功能迭代。