CSR中配置的CEStorm告警不生效

问题描述

在内存的CSR中已经配置了Event_MemoryRAS1CEStormFault


同时这个告警在环境/opt/bmc/conf/的event_def.json中也是存在的,在执行setprop set MemoryRAS_1_01010118 bmc.kepler.Systems.FDMDomain.MemoryRAS CorrectableECCOverfrequencyCount 5后,告警并没有生效,web中没有相关告警

环境信息

  • 软件版本:openUBMC2512

  • 硬件配置:1712、内存三星

重现步骤

  1. [第一步]
    在mdbctl中手动设置属性超过阈值
  2. [第二步]
    发现web中没有相关告警

期望结果

当Reading值超过阈值时能有告警
在OS下进行内存注错超过阈值时,能出现如下事件

实际结果

并没有相关告警产生

尝试过的解决方案

手动设置读值超过阈值

分析:
1、CSR中的eventkeyid与eventDefList.txt和event_def.json中是一样的,排除因为告警没有配置导致的不产生对应事件

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

CSR中配置的内存CE Storm告警未生效问题分析

问题描述

在CSR中已配置Event_MemoryRAS1CEStormFault告警事件,当通过mdbctl手动设置CorrectableECCOverfrequencyCount属性值超过阈值时,Web界面未产生预期的告警信息。

配置详情

"Event_MemoryRAS1CEStormFault": {
    "EventKeyId": "Memory.MemoryCEStorm",
    "Condition": 3,
    "LedFaultCode": "008",
    "Reading": "<=/MemoryRAS_1.CorrectableECCOverfrequencyCount",
    "OperatorId": 4,
    "Enabled": true,
    "DescArg1": "<=/Memory_1.DimmName;<=/Memory_1.Position;<=/Memory_1.SilktText |> string.format('%s :%s %s)",
    "Component": "#/Component_Memory1"
}

已确认事项

  • :white_check_mark: CSR中配置的EventKeyIdevent_def.json中定义一致
  • :white_check_mark: event_def.json文件中存在对应告警定义
  • :white_check_mark: 告警事件已启用(Enabled: true)
  • :white_check_mark: 通过mdbctl能成功修改CorrectableECCOverfrequencyCount的值

可能原因分析

1. OperatorId与Condition匹配问题

根据上下文信息中的知识图谱数据:

  • CorrectableECCOverfrequencyCount 是一个计数器,用于跟踪可纠正ECC错误频率超出允许阈值的次数
  • 配置中使用了OperatorId: 4,通常表示"等于"或"大于等于"操作符
  • Condition: 3 的具体含义需要确认是否与操作符匹配

建议核实OperatorIdCondition的组合是否正确表达了“超过阈值”的语义。

2. 属性路径准确性

当前Reading路径为 <=/MemoryRAS_1.CorrectableECCOverfrequencyCount

根据知识图谱:

  • 实体 bmc.kepler.Systems.FDMDomain.MemoryRAS 负责监控内存相关状态
  • 属性 CorrectableECCOverfrequencyCount 应属于该域

验证方法:检查实际的对象模型路径是否完全匹配,可能需要确认是否应为:

<=/bmc.kepler.Systems.FDMDomain.MemoryRAS.CorrectableECCOverfrequencyCount

3. 阈值触发机制问题

虽然手动设置了数值,但可能缺少以下机制:

  • 缺少对CorrectableECCOverfrequencyCount变化的监听器
  • 未正确注册到MemoryRAS域的事件检测系统中
  • 需要特定条件才能激活计数器(如周期性检查窗口)

4. 告警系统级配置限制

参考文档中提到的Trap告警发送级别配置:

  • 系统可能配置了告警过滤规则
  • 当前环境的告警严重性级别设置可能屏蔽了该告警
  • 虽然事件被记录,但未达到显示在Web界面的阈值级别

5. 内存对象同步问题

根据知识图谱中关于Memory Object的描述:

  • 内存对象是运行时数据表示,需与数据库同步
  • 若同步机制存在问题,可能导致属性变更未被事件系统感知

解决方案建议

1. 验证对象路径和属性存在性

# 查询实际的对象结构
mdbctl get /MemoryRAS_1

# 确认CorrectableECCOverfrequencyCount是否存在且路径正确

2. 检查完整的事件链路配置

确保以下组件均正确配置:

  • :white_check_mark: CSR中告警定义
  • :white_check_mark: event_def.json中有对应描述
  • :white_check_mark: BMC事件系统已加载该配置
  • :white_check_mark: 对应的Memory Object已正确创建并关联

3. 验证操作符和条件逻辑

尝试临时修改配置验证逻辑:

"OperatorId": 1,  // 尝试使用"大于"操作符
"Condition": 1    // 确保条件编码正确

4. 检查系统级告警过滤设置

确认系统未设置过高的告警屏蔽级别:

# 查看当前Trap告警级别设置(参考文档8)
cat /opt/bmc/conf/bmc_feature.cfg | grep BMCSet_TrapAlarmSeverity

5. 触发完整错误流程测试

除手动设值外,尝试通过真实场景触发:

  • 在OS下进行内存注错操作
  • 观察CorrectableECCStorm标志位是否被置起
  • 检查ErrorStormCount是否增加

进一步诊断步骤

  1. 检查BMC日志中是否有相关的错误或警告信息
  2. 验证MemoryRAS域是否正常工作
  3. 确认bmc.kepler.Systems.FDMDomain.MemoryRAS组件是否已正确初始化
  4. 使用BMC Studio工具检查CSR模型一致性

:由于当前环境缺少直接的日志反馈信息,建议结合/var/log/bmc.log等日志文件进一步排查事件系统的实际行为。

通过一键收集日志发现,手动修改的CorrectableECCOverfrequencyCount并没有同步到event,event日志中没有看到数据的同步记录

vart/log/alarm.log 确认注册没有


注册了的