[OpenBMC] 从代码谈 Redfish 的Log 机制 (LogService/EventLog)

本文详细介绍了Redfish中的LogService架构,特别是OpenBMC如何使用Systemd的Journal和Rsyslog对系统事件进行记录和分类。通过`journalctl`命令查看日志,并解释了RedfishTemplate如何用于存储和检索Redfish日志。文章还探讨了MessageRegistry在Redfish中定义和翻译消息的作用。最后,概述了LogService的获取路径`/redfish/v1/Systems/system/LogServices/EventLog/Entries`。

和往常一样,OpenBMC中官方对Redfish 的Log 机制已经有很详细的介绍,所以这篇是结合一些额外的资料来看整个LogService 的架构和原理 (*如果之后OpenBMC架构有变,这边不会再更新)

docs/redfish-logging-in-bmcweb.md at master · openbmc/docs · GitHubhttps://github.com/openbmc/docs/blob/master/architecture/redfish-logging-in-bmcweb.md在Redfish 还没问世之前,BMC的世界中会将有问题的事件纪录成System Event Log (SEL),SEL 在IPMI中是用16 Byte来表示,IPMItool 等工具会将其转换为可读性高的文字,而在Redfish 协议中,系统事件的纪录(开关机,温度异常等)是由LogServices来负责监控和配置这些事件,OpenBMC将这些系统事件称Event Log  (LogServices 不只有系统事件,还有包含audit log, crashdump 等,这篇文章只会介绍EventLog)

Journal - Systemd日志

Systemd has its own logging system called the journal; running a separate logging daemon is not required  systemd/Journal - ArchWiki (archlinux.org)

Journal是systemd本身自帶的日誌系統,它的log分類是根據Syslog協定,透過 "journalctl"指令可以讀取系統日誌,透過設定檔 /etc/systemd/journald.conf 可以更改Journal 設定

//透过 "journalctl"指令可以读取系统日志
> journalctl
Jun 25 08:41:09 intel-obmc bmcweb[370]: pam_succeed_if(webserver:auth): requirement "user ingroup redfish" was met by user "root"

Rsyslog是一个基于Syslog 的开源软件程序,可在设定档 /etc/rsyslog.conf 中,根据Journal不同的fields 来将不同的logs存放在相对应的档案和设定输出格式。

//加上-o json可以将所有filed用json格式印出来,可以看到"PRIORITY" 这样就算一个filed,我们也可以自己定义想要的filed,filed的数量并没有规定,名字可以自定义的

> journalctl  -o json 
{
    "_SOURCE_REALTIME_TIMESTAMP": "1624610486273832",
    
你提到的 `/redfish/v1/EventService` 接口**本身并不直接反映服务器整体健康状态**,但它**可以用于接收关键事件(Critical Events)**,比如硬件故障、状态异常等,这些事件可以作为触发 Zabbix 告警的依据。 --- ### 🔍 `/redfish/v1/EventService` 的作用: 该接口是 Redfish 中用于事件管理的核心服务,其主要功能包括: - **提交测试事件**(用于调试) - **支持事件订阅**(通过 `/Subscriptions` 创建 Webhook) - **推送事件通知**(如通过 HTTP POST 或 Server-Sent Events) --- ### ❓ 它是否可以反映“整体健康状态”? | 问题 | 答案 | |------|------| | 能否直接查看服务器健康状态? | ❌ 不行。它本身不提供当前硬件健康状态,只负责**事件通知** | | 能否在硬件故障(Critical)时触发告警? | ✅ 可以。当系统发生严重错误(如电源故障、内存错误)时,会通过 EventService 发送事件 | | 是否适合集成到 Zabbix 告警机制? | ✅ 是的。可以通过订阅 Redfish 事件,在 Zabbix 中接收 Critical 级别事件并告警 | --- ### ✅ 如何利用 EventService 实现 Zabbix 告警? 1. **创建事件订阅**: - 向 `/redfish/v1/EventService/Subscriptions` 发送 POST 请求,注册一个 Webhook 地址(Zabbix Server 或 Proxy 的 HTTP API 地址)。 - 示例请求体: ```json { "Destination": "http://zabbix.example.com:8080/eventreceiver", "Protocol": "Redfish", "EventTypes": ["Alert"] } ``` 2. **Zabbix 接收事件**: - 配置一个 Web 服务(如 Nginx + Python Flask)接收 Redfish 的 POST 事件。 - 解析事件内容,判断是否为 Critical 级别(如 `Severity: Critical`)。 3. **触发 Zabbix 告警**: - 使用 Zabbix 的 `zabbix_sender` 或主动检查方式将事件推送到 Zabbix Server。 - 在 Zabbix 前端配置触发器,当接收到 Critical 事件时生成告警。 --- ### 📌 示例事件内容(Redfish Event): ```json { "Name": "Critical Memory Error", "EventType": "Alert", "Severity": "Critical", "Message": "Memory DIMM 1 has failed.", "OriginOfCondition": { "@odata.id": "/redfish/v1/Systems/1/Memory/DIMM.Socket.1" } } ``` --- ### ✅ 总结: | 项目 | 是否适用 | |------|----------| | 查看当前硬件健康状态 | ❌ | | 接收硬件故障事件 | ✅ | | 实现 Zabbix 告警联动 | ✅ | | 替代 `/Systems/1/Status` 获取健康状态 | ❌ | ---
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值