点击此处查看详细分析解答
南向接口网卡 NicPort 属性与告警模拟问题分析
根据您提供的信息,您正在尝试通过南向接口配置精细化告警,用于监控网络端口带宽使用率(如 Event_Port2BwUsageMntr),并希望通过修改 NicPort.BandwidthPercent 属性来手动触发告警。然而,在实际查询中发现 NicPort 对象没有 BandwidthPercent 属性,导致配置可能无法生效。以下是对该问题的全面分析和解决方案说明。
问题描述
- 目标:配置并手动触发基于
NicPort.BandwidthPercent 的高带宽使用率告警(例如 Event_Port2BwUsageMntr)。
- 现状:
- 在 CSR 或 Component_drivers 中配置的告警引用了
</NicPort_2.BandwidthPercent> 作为读数源。
- 实际通过
lsprop 查询 NicPort 对象时,并未发现 BandwidthPercent 属性。
- 疑问:
- 此种配置是否正确?
- 如何模拟/触发该告警?
相关知识整合与分析
1. NicPort 的真实属性(来自 bmc.dev.NetworkPort)
从您提供的 lsprop 输出可见,NicPort 实际是实现了 bmc.dev.NetworkPort 接口的对象,其关键子接口包括:
bmc.dev.NetworkPort.LinkInfo
bmc.dev.NetworkPort.FibreChannel
bmc.kepler.Object.Properties
当前支持的主要属性:
| 属性 |
含义 |
LinkStatus |
链路状态(1=Up, 0=Down) |
SpeedMbps |
当前连接速率(Mbps) |
FullDuplex |
是否全双工 |
AutoSpeedNegotiationEnabled |
自动协商是否启用 |
MaxSpeedSupported |
最大支持速率 |
结论:NicPort 本身不包含 BandwidthPercent 属性,此属性并不属于标准 bmc.dev.NetworkPort 或其子接口。
2. 带宽监控相关的真实属性接口:bmc.kepler.Systems.NetworkPort.Metrics
在文档和上下文中,并未将 BandwidthPercent 直接暴露在 dev 层(设备侧)的 NicPort 上,而是存在于 系统层的指标接口 中。
真实路径应为:
/bmc/kepler/Systems/{SystemId}/NetworkPort/{PortId}/Metrics
对应 D-Bus 接口:bmc.kepler.Systems.NetworkPort.Metrics
关键属性(来自 Document Chunks 和 KG):
BandwidthUsagePercent:当前带宽占用百分比(单位 %)
History:历史占用数据
emitsChangedSignal:是否广播变更信号(
如为 false 不触发告警)
案例参考:在 ID 为 3 的文档中提到,当 emitsChangedSignal=false 时,即使修改 BandwidthUsagePercent 超出阈值,也无法触发告警。
3. 告警触发机制原理
精细化告警(如 Event_Port2BwUsageMntr)依赖于:
- Condition(条件):阈值,如
BandwidthThresholdPercent = 80
- Reading(读数):实时值,如
BandwidthUsagePercent
- 事件引擎订阅属性变更通知(emitsChangedSignal = true)
只有当 Reading 属性值发生变化且超过 Condition,并且该属性支持信号广播,才会触发事件上报。
问题定位总结
| 项目 |
分析结果 |
NicPort.BandwidthPercent 是否存在? |
不存在。正确属性应为 Metrics.BandwidthUsagePercent |
| 告警引用的路径是否正确? |
错误。应为 </NicPort_x/Metrics/BandwidthUsagePercent> 而非 </NicPort_x.BandwidthPercent> |
| 为何修改值不触发告警? |
可能原因: 1. 属性名错误 2. emitsChangedSignal=false(见案例) 3. 阈值未正确设置 |
正确配置与模拟触发方法
步骤 1:确认正确的属性路径
使用正确的 D-Bus 路径访问带宽数据:
# 查看 Metrics 接口是否存在
lsprop /bmc/kepler/Systems/1/NetworkPort/NicPort_2/Metrics
预期输出中应包含:
BandwidthUsagePercent: 75
emitsChangedSignal: true
如果 Metrics 接口不存在,请检查驱动是否完整加载 NetworkPort.Metrics 模块。
步骤 2:设置带宽阈值
调用 SetBandwidthThreshold 方法设置告警门槛:
busctl call \
xyz.openbmc_project.NetworkAdapters \
/bmc/kepler/Systems/1/NetworkAdapters \
xyz.openbmc_project.NetworkAdapters \
SetBandwidthThreshold \
u 80
这会设置全局或端口级的 BandwidthThresholdPercent = 80。
步骤 3:手动修改 BandwidthUsagePercent 并触发告警
修改数值前检查信号设置
确保:
BandwidthUsagePercent emitsChangedSignal = true
使用 busctl set-property 修改值(模拟高负载)
busctl set-property \
xyz.openbmc_project.NetworkPort.Metrics \
/bmc/kepler/Systems/1/NetworkPort/NicPort_2/Metrics \
xyz.openbmc_project.NetworkPort.Metrics \
BandwidthUsagePercent \
u 85
若配置正确,且 emitsChangedSignal=true,系统将自动比较 85 > 80,触发 Event_Port2BwUsageMntr 告警。
步骤 4:验证告警是否触发
查询告警日志或事件队列:
# 查看最近事件
busctl tree xyz.openbmc_project.Events
# 或查看日志
journalctl -u event-manager --no-pager -n 50
预期输出包含:
Event triggered: NICCARD.SystemNetworkBandwidthUsageHigh
Reading: 85%, Threshold: 80%
正确的 CSR 告警配置建议
请更新您的精细化告警配置为:
"Event_Port2BwUsageMntr": {
"EventKeyID": "NICCARD.SystemNetworkBandwidthUsageHigh",
"Condition": "</PCIEManicCard_1.BandwidthThresholdPercent>",
"Reading": "</NicPort_2/Metrics/BandwidthUsagePercent>",
"OperatorId": 4,
"Enabled": true,
"Component": "#/Component_PCIECard"
}
使用 /Metrics/BandwidthUsagePercent 而非 /BandwidthPercent。
常见问题解决方案
| 问题 |
原因 |
解决方案 |
| 修改值后无告警 |
emitsChangedSignal=false |
修改 JSON 定义,设为 true(参考 issue #26) |
Metrics 接口不存在 |
驱动未加载 Metrics 模块 |
检查 mdb_interface 配置或驱动版本 |
| 属性路径错误 |
误用 dev 层属性 |
使用 kepler.Systems.NetworkPort.Metrics 路径 |
| 阈值未设置 |
BandwidthThresholdPercent 为空 |
调用 SetBandwidthThreshold 初始化 |
结论与建议
最终结论
NicPort 不存在 BandwidthPercent 属性,这是错误属性名。
- 正确属性为:
bmc.kepler.Systems.NetworkPort.Metrics.BandwidthUsagePercent
- 告警触发需满足三个条件:
- 正确属性路径
emitsChangedSignal = true
- 当前值 > 阈值,并触发 change 信号
建议操作
- 修正 CSR 配置中的 Reading 路径,指向
/Metrics/BandwidthUsagePercent
- 确保
emitsChangedSignal=true,否则不会广播变更
- 使用
busctl set-property 手动修改值 模拟高带宽场景
- 验证告警是否上报至 event-manager
参考资料
如需进一步协助查看 Metrics.json 配置文件,请提供具体路径内容以检查 emitsChangedSignal 设置。