BMC时间跳变和NTP同步时间失败

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

问题描述

存在BMC时间跳变精细化告警,EventKeyId为BMC.BMCTimeHopping,模拟设置会触发精细化告警,查看不到配置关联。希望配置BMC时间跳变sel事件,询问下BMC.BMCTimeHopping触发的Reading是什么

image

(同上)NTP同步时间失败,EventKeyId为BMC.BMCNTPSynchronizeFailed,希望配置NTP同步时间失败离散事件。

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:OpenUBMC2512

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

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

[您希望实现什么]

实际结果

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

尝试过的解决方案

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

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

BMC时间跳变与NTP同步失败事件配置指南

问题描述

用户希望配置以下两个精细化告警事件:

  1. BMC时间跳变事件:EventKeyId为BMC.BMCTimeHopping,已确认模拟设置可触发告警但无法查看配置关联,需明确触发该事件的Reading值。
  2. NTP同步时间失败事件:EventKeyId为BMC.BMCNTPSynchronizeFailed,希望配置为离散事件。

环境信息

  • 操作系统:未指定(OpenUBMC环境)
  • 软件版本:OpenUBMC2512
  • 硬件配置:未指定

BMC时间跳变事件(BMC.BMCTimeHopping)

事件机制说明

根据知识库内容,bmc_time组件本身不产生时间,仅负责搬运NTP或RTC时间。因此,时间跳变通常由外部时间源(如NTP服务器)或RTC芯片异常引起。

触发条件分析

时间跳变分为多种情况:

  • 1970年跳变:设备重启后初始时间为Unix时间戳起点(1970-01-01T00:00:00),属于正常现象。
  • 复位后的双跳变:系统会使用持久化的时间戳作为临时时间,待获取准确时间后再次跳变。
  • NTP同步导致的跳变:当NTP开启且同步成功时,若RTC与NTP时间差异较大,会导致明显的时间跳变。

:warning: 注意:时间跳变问题99%不是bmc_time组件本身的问题,而是时间源配置或硬件问题。

Reading值说明

对于BMC.BMCTimeHopping事件,其触发的Reading值并非传统传感器读数,而是系统时间的变化量(delta)

判断依据:

  1. 在文档《CSR配置字典之Time类》中提到,SyncTimeStatusExtra是时间组件内部更新的状态字段,用于反映时间同步状态。
  2. 《时间管理问题手册》指出:NTP同步成功后若产生跳变,说明RTC和NTP时间不一致。
  3. Redfish接口错误定位案例中提到,时间跳变会导致nginx连接超时(502错误),解决方案是配置NTP服务器。

因此,Reading应理解为:

Reading = |当前系统时间 - 上一次记录时间|

即两个时间点之间的差值,超过阈值(如3分钟)则触发告警。

查看方法:

# 查看NTP状态
ipmcget -d ntp

# 输出示例:
# Status       : enabled
# Synchronize  : success
# Preferred    : 192.168.1.10
# Alternative  : 192.168.1.11

NTP同步时间失败事件(BMC.BMCNTPSynchronizeFailed)

故障定位依据

  • KG实体关系BMCNTP Server Sync Failed 表示BMC记录了NTP同步失败的错误。
  • 日志提示:文档中明确指出 Sync to NTP server failed 是一个关键错误,需检查网络连通性或配置。

配置建议

1. 启用NTP服务

通过定制化配置参数确保NTP启用:

BMCSet_NTPEnableStatus = 1     # 开启NTP
BMCSet_NTPMode = 1             # 手动配置模式
BMCSet_NTPPreferredServerAddr = pool.ntp.org  # 主NTP地址
BMCSet_NTPAlternativeServerAddr = 0.cn.pool.ntp.org  # 备用地址

2. 支持的NTP服务器数量

  • NTP Server最多支持 3或6个 配置(由BMCSet_NTPCount决定)。
  • 可通过CSR配置扩展服务器地址(Extra字段)。

3. 时间同步策略

Custom_TimeSynchronizationPolicy:
- 0:NTP为准策略(仅从NTP同步)
- 1:NTP优先模式(失败后回退RTC)

推荐设置为 1,避免网络中断导致时间异常。


期望结果 vs 实际结果

项目 期望结果 实际结果
BMC.BMCTimeHopping事件配置 成功配置SEL事件,明确Reading来源 能触发告警但无法查看配置关联
BMC.BMCNTPSynchronizeFailed事件 配置为离散事件并生成SEL日志 未完成配置

尝试过的解决方案(建议补充)

请确认是否已尝试以下操作:

  1. 检查NTP服务状态

    ipmcget -d ntp
    
  2. 验证网络连通性

    • 确保UDP 123端口开放
    • Ping测试NTP服务器可达性
  3. 查看app日志中的时间持久化记录

    set bmc_time time_stamp=%s by persistent data
    
  4. 使用busctl命令检查event对象注册情况

    busctl --user tree bmc.kepler.event
    busctl --user introspect bmc.kepler.event /bmc/kepler/Systems/1/Events
    
  5. 检查CSR加载情况

    # 查看注册日志
    cat /tmp/log/registered.txt
    cat /tmp/log/not_registerd.txt
    

解决方案建议

步骤一:确认Event对象是否正确注册

# 检查event服务是否存在
busctl --user tree bmc.kepler.event

# 检查Events路径是否注册
busctl --user introspect bmc.kepler.event /bmc/kepler/Systems/1/Events

# 查询具体事件配置
busctl --user call bmc.kepler.hwdiscovery /bmc/kepler/ObjectGroup/{position} \
       bmc.kepler.ObjectGroup GetObjects a{ss}s 0 'event'

步骤二:检查CSR配置文件

  1. 定位加载的CSR文件路径(查看AppDump/hwdiscovery目录)
  2. 确认BMC.BMCTimeHoppingBMC.BMCNTPSynchronizeFailed是否在事件定义中
  3. 确保Reading引用的是合法的时间变化量属性

步骤三:配置离散事件(Discrete Event)

对于BMC.BMCNTPSynchronizeFailed

  • 类型应为 DiscreteSensor
  • Reading应绑定到NTP状态字段(如Synchronize字段)

示例配置结构(CSR):

{
  "Event": {
    "EventKeyId": "BMC.BMCNTPSynchronizeFailed",
    "EventType": "Discrete",
    "SensorObject": "#/NTP_Status_Sensor",
    "AssertExpression": "Reading == 'failed'",
    "DeassertExpression": "Reading == 'success'"
  }
}

步骤四:启用告警并测试

# 手动触发模拟事件(如支持)
busctl call bmc.kepler.event /bmc/kepler/Systems/1/Events \
         AddEvent as 1 "ComponentName" "bmc_time" \
                    "State" "Asserted" \
                    "EventKeyId" "BMC.BMCNTPSynchronizeFailed"

总结

关键点 说明
bmc_time作用 仅搬运时间(来自NTP或RTC),不生成时间
时间跳变原因 多为NTP与RTC时间不一致所致,非组件故障
Reading含义 表示时间变化量(delta),非传统传感器读数
NTP配置关键参数 BMCSet_NTPEnableStatus=1, BMCSet_NTPPreferredServerAddr
推荐同步策略 使用Custom_TimeSynchronizationPolicy=1(NTP优先,失败回退RTC)

:white_check_mark: 最终建议:优先排查NTP服务配置与网络可达性,确认CSR中事件定义完整且正确注册。可通过日志关键字 Sync to NTP server failedset bmc_time time_stamp 辅助定位问题。

相关链接:

  1. 仿真环境启动后,登进去,缺少ipmcget命令
  2. 关于升级BMC正式包的问题
  3. 版本级自动化冒烟测试设计分享
  4. bmc配置NTP服务器后,NTP Server Sync Failed
  5. 时间管理问题手册 | 文档中心 | openUBMC

此告警属于软件告警

调用资源协作接口添加

由组件内部监控

跳变超过2min时产生

你说的配置离散事件指的是额外配置一个传感器事件吗

是的 我这边期望BMC.BMCTimeHopping和BMC.BMCNTPSynchronizeFailed都配置下传感器事件

跳变应该是行不通的

当前资源协作接口仅承载了当前时间

要做配置的话 缺少 上一次的跳变的时间

需要新增跳变相关的属性才行

NTP失败的话监控Time的SyncResult属性就可以了

好的 谢谢

你好,Time的私有属性SyncTimeStatus是表示时间同步状态嘛,其和属性SyncStatus有什么区别嘛

私有属性是做内部持久化的,不用关注,含义基本相同

你好,能否对时间跳变做一个接口或属性出来,使得可以获取到呢。客户要求提供时间跳变传感器事件

请问这个诉求期望什么时间解决

涉及到需求排期

期望在二月底前可以解决

这个可以去bmc_core sig例会上评审下

好的

1、SyncResult的emitsChangeSignal为false,这样运行中BMC和NTP同步结果发生变化监控不到变动啊

2、BMC和RTC同步的结果有属性承载嘛,或者接口获取。

rtc没有对外接口获取同步结果,因为这些全部是bmc_time内部的业务,所以没有对外

好的,RTC我提一下诉求。

这个NTP属性SyncResult是个非同步信号,运行中出错获取不到变化,这个可以进行修改嘛

虽然没有信号,看看你们那边能不能代码里面取轮询

问一下现在是不是已经需求做好了,这个接口是哪一个

1. 变更资源树接口bmc.kepler.Managers.Ntp下的属性SyncResult变更为发送信号

2. 新增表示“时间跳变状态”的资源树属性 bmc.kepler.Managers.Time的TimeJumpstatus

3.bmc.kepler.Managers.Rtc的RTCSyncResult