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(<

175

被折叠的 条评论
为什么被折叠?



