传感器读值不更新与告警阈值不显示

问题描述

我当前再csr中新增了阈值型传感器来表示SW芯片的温度,在web上可看到传感器,但是读值一直为0,且配置的门限值也不显示;

代码片段

sr中传感器的定义代码:


其中的表达式如下:
“Reading”: “<=/PCIeSwitchChip_1.ChipTemperatureCelsius;<=/PCIeSwitchChip_2.ChipTemperatureCelsius |> expr($1 >= $2) ? $1 : $2)”,

mdb_interface中对于ChipTemperatureCelsius属性的定义中也加入了emitsChangedSignal:true

实际环境的对象属性

PCIeSwitchChip_1_010108 和PCIeSwitchChip_2_010108 能看到温度属性是有值的;

通过lsprop ThresholdSensor_SwBoardChip_Temp_010108 可看到轻微上限和严重上限值

具体问题

  1. web侧门限值不显示的问题要怎样解决?
  2. 传感器值不随着PCIeSwitchChip_1_010108 和PCIeSwitchChip_2_010108对象的ChipTemperatureCelsius属性值变化要怎样解决?

答案内容由AI生成,仅供参考:
您好,根据您提供的问题描述和上下文信息,我为您分析这两个问题的可能原因及排查思路。

问题一:Web界面门限值不显示

根据提供的上下文信息,Web界面传感器的显示逻辑主要受以下几个属性控制:

  1. ReadingStatus 属性:该属性表示传感器读值的有效性。如果ReadingStatus值非0(例如为1、2等),则表示读值异常或不可用,Web界面将不会显示该传感器的读值和相关门限。
  2. Status 属性:该属性表示传感器是否被启用。如果StatusDisabled,则传感器数据不会在Web上显示。传感器的Status可能会因为其关联的Entity(实体)的Presence(在位状态)或PowerState(上电状态)为0而被自动禁用。

排查步骤建议:

  1. 检查 ReadingStatus 的值:通过命令 lsprop ThresholdSensor_SwBoardChip_Temp_010108 查看 ReadingStatus 字段是否等于0。
    • 如果 ReadingStatus 不为0,说明传感器读值存在异常。需要进一步分析CSR配置中ReadingStatus属性的表达式,找出导致其非零的原因。
  2. 检查传感器的 Status:在上述命令的输出中查看 bmc.kepler.Systems.ThresholdSensorDisplay 接口下的 Status 字段是否为 Enabled
    • 如果 StatusDisabled,需要检查CSR配置中Capabilities属性的bit 7配置。
      • 如果Capabilities的bit 7配置为1(对应Capabilities值为232),表示传感器会受实体失效影响。当其关联的EntityPresencePowerState为0时,传感器状态会被设置为Disabled
  3. 检查门限属性的配置:确认ThresholdSensorDisplay接口下的 UpperCriticalDisplay, UpperNoncriticalDisplay, LowerCriticalDisplay 等门限显示属性是否配置了正确的表达式。如果这些表达式未正确关联数据源或表达式本身有误,也可能导致门限值显示为空。

问题二:传感器读值不随数据源变化

根据上下文,ThresholdSensorReading属性需要通过一个“同步机制”来感知其数据源(PCIeSwitchChip_1.ChipTemperatureCelsius)的变化。这个机制就是D-Bus的PropertiesChanged信号。

问题核心:您的阈值传感器未能成功订阅或响应其数据源发送的PropertiesChanged信号。

排查步骤建议:

  1. 确认数据源信号发送

    • 您提到已在mdb_interface中为ChipTemperatureCelsius属性配置了emitsChangedSignal: true。请再次确认这个配置是正确的,并且BMC服务已重新加载。
    • 使用工具(如busctl monitor)监听该属性的信号,模拟数据源变化,确认信号是否在数据源对象上成功发出。
  2. 分析传感器同步日志

    • 查看传感器同步日志文件(路径类似 AppDump/sensor/sync_property_trace.log),该文件记录了传感器属性的同步过程。查找与您的传感器 ThresholdSensor_SwBoardChip_Temp_010108Reading 属性相关的日志条目。
    • 根据上下文[6]中的示例,正确的同步日志应包含类似以下内容,显示Reading属性的表达式和依赖的数据源值:
      ThresholdSensor ThresholdSensor_Adc0_1Sensor_0101 Reading: 223 ["expr($1 / 5)"]
          $1: bmc.kepler.complex_sensor ... bmc.demo.OpenUBMC.Reading Value [1115] ["1970-01-01 04:27:49"] ["fetch"]
      
    • 注意关键词
      • ["fetch"]:表示传感器需要主动去读取数据源,而不是被信号驱动更新。如果Reading属性总是显示为0或不更新,日志中可能只有["fetch"]而没有["signal"],这说明信号订阅机制可能失效,传感器只能通过轮询方式获取数据,而轮询可能存在时机问题。
      • 期望看到["signal"]关键词,这表示Reading属性是通过接收到的PropertiesChanged信号来更新的。
  3. 检查同步表达式

    • 您的表达式较为复杂,使用了三元运算符 expr($1 >= $2) ? $1 : $2)。请确保此语法在同步引擎中是被正确支持的,并且$1$2能正确解析为PCIeSwitchChip_1.ChipTemperatureCelsiusPCIeSwitchChip_2.ChipTemperatureCelsius的值。
    • 错误的表达式语法或不正确的数据源路径引用都会导致同步失败,表现为读值不更新。