答案内容由AI生成,仅供参考:
BMC时间跳变与NTP同步失败事件配置指南
问题描述
用户希望配置以下两个精细化告警事件:
- BMC时间跳变事件:EventKeyId为
BMC.BMCTimeHopping,已确认模拟设置可触发告警但无法查看配置关联,需明确触发该事件的Reading值。 - 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时间差异较大,会导致明显的时间跳变。
注意:时间跳变问题99%不是
bmc_time组件本身的问题,而是时间源配置或硬件问题。
Reading值说明
对于BMC.BMCTimeHopping事件,其触发的Reading值并非传统传感器读数,而是系统时间的变化量(delta)。
判断依据:
- 在文档《CSR配置字典之Time类》中提到,
SyncTimeStatus和Extra是时间组件内部更新的状态字段,用于反映时间同步状态。 - 《时间管理问题手册》指出:NTP同步成功后若产生跳变,说明RTC和NTP时间不一致。
- 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实体关系:
BMC→NTP 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日志 | 未完成配置 |
尝试过的解决方案(建议补充)
请确认是否已尝试以下操作:
-
检查NTP服务状态
ipmcget -d ntp -
验证网络连通性
- 确保UDP 123端口开放
- Ping测试NTP服务器可达性
-
查看app日志中的时间持久化记录
set bmc_time time_stamp=%s by persistent data -
使用busctl命令检查event对象注册情况
busctl --user tree bmc.kepler.event busctl --user introspect bmc.kepler.event /bmc/kepler/Systems/1/Events -
检查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配置文件
- 定位加载的CSR文件路径(查看
AppDump/hwdiscovery目录) - 确认
BMC.BMCTimeHopping和BMC.BMCNTPSynchronizeFailed是否在事件定义中 - 确保
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) |
最终建议:优先排查NTP服务配置与网络可达性,确认CSR中事件定义完整且正确注册。可通过日志关键字
Sync to NTP server failed和set bmc_time time_stamp辅助定位问题。
相关链接: