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

答案内容由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