【开发经验】调试OpenBMC Redfish EventService功能

EventService功能是Redfish规范中定义的一种事件日志的发送方式。用户可以设置订阅者信息(通常是一个web服务器),当产生事件日志时,OpenBMC可以根据用户设置的订阅者信息与对日志的筛选设置,将事件日志发送到订阅者。

相比于传统的SNMPTrap日志发送机制,EventService发送机制具有如下的优点:

Redfish EventService:

  • 基于 RESTful API:使用 HTTP/HTTPS 协议,天然支持现代 Web 技术栈(如 JSON、OData)
  • 结构化数据:事件内容以 JSON 格式传输,字段清晰、可扩展性强(如包含资源链接、时间戳、上下文信息)
  • 自描述性:事件中直接关联资源的 URI(如 OriginOfCondition),便于快速定位问题来源

SNMP Trap:

  • 基于 UDP:无连接协议,存在丢包风险,且安全性较低(传统 SNMPv1/v2c 依赖社区字符串明文传输)
  • 二进制编码(BER):数据格式复杂,需依赖 MIB 文件解析,跨系统兼容性差。
  • 信息有限:通常仅传递 OID 和简单数值,缺乏上下文关联(如无法直接定位故障设备的具体资源路径)。

而通过EventService发送事件,可以选择syslog或SMTP协议发送,这样通过EventService接口可以实现统一的日志发送管理。由此可见通过EventService进行日志发送相比传统方式具有很大优势。

最近从OpenBMC代码中导入这部分功能,其主要思路在于bmcweb进程监控dbus上xyz.openbmc_project.Logging进程的InterfacesAdded信号,该信号表示产生了新日志,此时bmcweb进程读取日志内容,并通过EventService进行发送。

const std::string propertiesMatchString =
    sdbusplus::bus::match::rules::type::signal() +
    sdbusplus::bus::match::rules::sender("xyz.openbmc_project.Logging") +
    sdbusplus::bus::match::rules::interface(
        "org.freedesktop.DBus.ObjectManager") +
    sdbusplus::bus::match::rules::path("/xyz/openbmc_project/logging") +
    sdbusplus::bus::match::rules::member(<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值