南向接口网卡NicPort属性模拟

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

问题描述

南向接口Component_drivers中配置的精细化告警,关联的NicPort.BandwidthPercent属性,但是查看Nicport对象没有该属性,如图2。

请问南向接口这里如何进行模拟触发呢,这样配置是正确的嘛

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

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

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

[您希望实现什么]

实际结果

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

尝试过的解决方案

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

分析结论

[详细总结您对此问题的分析结论]

网卡SR里我看没有配置Networkadapter对象,但是我lsobj查看存在相同position的Networkadapter对象,这哥Networkadapter对象其他地方使用,查找调用(如redfish)与非南向接口中正常配置Networkadapter对象一样嘛

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

:white_check_mark: 结论与建议

:check_mark: 最终结论

  • NicPort 不存在 BandwidthPercent 属性,这是错误属性名。
  • 正确属性为:bmc.kepler.Systems.NetworkPort.Metrics.BandwidthUsagePercent
  • 告警触发需满足三个条件:
    1. 正确属性路径
    2. emitsChangedSignal = true
    3. 当前值 > 阈值,并触发 change 信号

:pushpin: 建议操作

  1. 修正 CSR 配置中的 Reading 路径,指向 /Metrics/BandwidthUsagePercent
  2. 确保 emitsChangedSignal=true,否则不会广播变更
  3. 使用 busctl set-property 手动修改值 模拟高带宽场景
  4. 验证告警是否上报至 event-manager
点击此处查看详细分析解答

南向接口网卡 NicPort 属性与告警模拟问题分析

根据您提供的信息,您正在尝试通过南向接口配置精细化告警,用于监控网络端口带宽使用率(如 Event_Port2BwUsageMntr),并希望通过修改 NicPort.BandwidthPercent 属性来手动触发告警。然而,在实际查询中发现 NicPort 对象没有 BandwidthPercent 属性,导致配置可能无法生效。以下是对该问题的全面分析和解决方案说明。


:magnifying_glass_tilted_left: 问题描述

  • 目标:配置并手动触发基于 NicPort.BandwidthPercent 的高带宽使用率告警(例如 Event_Port2BwUsageMntr)。
  • 现状
    • 在 CSR 或 Component_drivers 中配置的告警引用了 </NicPort_2.BandwidthPercent> 作为读数源。
    • 实际通过 lsprop 查询 NicPort 对象时,并未发现 BandwidthPercent 属性
  • 疑问
    1. 此种配置是否正确?
    2. 如何模拟/触发该告警?

:white_check_mark: 相关知识整合与分析

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 最大支持速率

:magnifying_glass_tilted_left: 结论NicPort 本身不包含 BandwidthPercent 属性,此属性并不属于标准 bmc.dev.NetworkPort 或其子接口。


2. 带宽监控相关的真实属性接口:bmc.kepler.Systems.NetworkPort.Metrics

在文档和上下文中,并未将 BandwidthPercent 直接暴露在 dev 层(设备侧)的 NicPort 上,而是存在于 系统层的指标接口 中。

:white_check_mark: 真实路径应为:

/bmc/kepler/Systems/{SystemId}/NetworkPort/{PortId}/Metrics

对应 D-Bus 接口:bmc.kepler.Systems.NetworkPort.Metrics

关键属性(来自 Document ChunksKG):

  • BandwidthUsagePercent:当前带宽占用百分比(单位 %)
  • History:历史占用数据
  • emitsChangedSignal:是否广播变更信号(:warning: 如为 false 不触发告警)

:light_bulb: 案例参考:在 ID 为 3 的文档中提到,当 emitsChangedSignal=false 时,即使修改 BandwidthUsagePercent 超出阈值,也无法触发告警


3. 告警触发机制原理

精细化告警(如 Event_Port2BwUsageMntr)依赖于:

  1. Condition(条件):阈值,如 BandwidthThresholdPercent = 80
  2. Reading(读数):实时值,如 BandwidthUsagePercent
  3. 事件引擎订阅属性变更通知(emitsChangedSignal = true)

只有当 Reading 属性值发生变化且超过 Condition,并且该属性支持信号广播,才会触发事件上报。


:warning: 问题定位总结

项目 分析结果
NicPort.BandwidthPercent 是否存在? :cross_mark: 不存在。正确属性应为 Metrics.BandwidthUsagePercent
告警引用的路径是否正确? :cross_mark: 错误。应为 </NicPort_x/Metrics/BandwidthUsagePercent> 而非 </NicPort_x.BandwidthPercent>
为何修改值不触发告警? 可能原因:
1. 属性名错误
2. emitsChangedSignal=false(见案例)
3. 阈值未正确设置

:white_check_mark: 正确配置与模拟触发方法

步骤 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

:white_check_mark: 若配置正确,且 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%

:white_check_mark: 正确的 CSR 告警配置建议

请更新您的精细化告警配置为:

"Event_Port2BwUsageMntr": {
  "EventKeyID": "NICCARD.SystemNetworkBandwidthUsageHigh",
  "Condition": "</PCIEManicCard_1.BandwidthThresholdPercent>",
  "Reading": "</NicPort_2/Metrics/BandwidthUsagePercent>",
  "OperatorId": 4,
  "Enabled": true,
  "Component": "#/Component_PCIECard"
}

:white_check_mark: 使用 /Metrics/BandwidthUsagePercent 而非 /BandwidthPercent


:hammer_and_wrench: 常见问题解决方案

问题 原因 解决方案
修改值后无告警 emitsChangedSignal=false 修改 JSON 定义,设为 true(参考 issue #26
Metrics 接口不存在 驱动未加载 Metrics 模块 检查 mdb_interface 配置或驱动版本
属性路径错误 误用 dev 层属性 使用 kepler.Systems.NetworkPort.Metrics 路径
阈值未设置 BandwidthThresholdPercent 为空 调用 SetBandwidthThreshold 初始化

:white_check_mark: 结论与建议

:check_mark: 最终结论

  • NicPort 不存在 BandwidthPercent 属性,这是错误属性名。
  • 正确属性为:bmc.kepler.Systems.NetworkPort.Metrics.BandwidthUsagePercent
  • 告警触发需满足三个条件:
    1. 正确属性路径
    2. emitsChangedSignal = true
    3. 当前值 > 阈值,并触发 change 信号

:pushpin: 建议操作

  1. 修正 CSR 配置中的 Reading 路径,指向 /Metrics/BandwidthUsagePercent
  2. 确保 emitsChangedSignal=true,否则不会广播变更
  3. 使用 busctl set-property 手动修改值 模拟高带宽场景
  4. 验证告警是否上报至 event-manager

:link: 参考资料

如需进一步协助查看 Metrics.json 配置文件,请提供具体路径内容以检查 emitsChangedSignal 设置。

目前对该卡PCieNicCard对象的TemperatureCelsius属性进行mdbctl模拟,模拟后直接查看PCieNicCard对象的TemperatureCelsius属性是模拟值,此时门限传感器对象ThresholdSensor_LPe31000_APTemp,或是coolingrequirement对象(都关联了PCieNicCard.TemperatureCelsius),这两个对象查看的关联值为真实值。如图。

还存在模拟之后,ThresholdSensor_LPe31000_APTemp和coolingrequirement会保持十几秒的模拟值,然后会自动变为真实值。

这种现象是为什么,component_drives组件不支持mdbctl嘛

1.请发一下当时环境上的一键日志收集辅助定位
2.存在同样position的NetworkAdapter对象是资源树的网卡对象,南向组件的PCIeNicCard对象获取到值后会同步到资源树上的NetworkAdapter对象。
3.这个问题建议咨询框架。

问题1 该告警reading关联属性如此正确嘛(component_drives其他网卡该告警如此配置)

问题3可以帮忙推动一下嘛 只是模拟的问题还是会影响正常的调速等

问题4:【概现20%】长时间OS重启时,lpe31000的ThresholdSensor_LPe31000_APTemp门限传感器的ReadingStatus导致上报mngmnt health传感器事件,ReadingStatus从2变为1时触发,变为0是接触。

image

查看代码直接访问芯片地址,获取芯片温度失败,TemperatureStatus先设置为了2,在1,在smbiosSatus=3后仍然获取失败。

问题1总结:对lpe31000-ap卡配置NICCard.SystemNetworkBandwidthUsageHigh精细化告警,参考其他网卡配置Reading关联到NicPort.BandwidthPercent。但是lsprop NicPort对象,无BandwidthPercent属性。如何模拟该告警的产生呢?

尝试:查看发现Networdadapter对象存在BandwidthPercent属性,执行setprop Networdadapter.BandwidthPercent属性无法触发该告警。

问题1关于NICCard.SystemNetworkBandwidthUsageHigh告警的目前在component_drivers组件仓修改其他网卡也遇到这个情况,帮忙解答一下。