当前位置: 首页 > news >正文

【开发经验】调试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("InterfacesAdded");

DbusEventLogMonitor::DbusEventLogMonitor() :
    dbusEventLogMonitor(*crow::connections::systemBus, propertiesMatchString,
                        onDbusEventLogCreated)

验证此项功能,需要搭建一个简单的web服务器,可以通过js代码来实现。

首先生成自签名证书(仅供测试使用)。

  1. 新建文件 san.cnf,内容如下:
[req]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
x509_extensions = v3_req

[dn]
C = CN              # 国家代码(如CN/US)
ST = Beijing         # 省份/州
L = Beijing          # 城市
O = MyCompany        # 组织名称
OU = DevOps          # 部门
CN = example.com     # 域名或IP(主名称)

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.com  # 支持的域名
DNS.2 = www.example.com
IP.1 = 192.168.1.100 # 用于搭建web服务器的PC的IP
  1. 生成证书,执行如下命令:
openssl req -x509 -newkey rsa:4096 -nodes \
  -keyout server.key -out server.crt \
  -days 365 -config san.cnf -extensions v3_req
  1. 查看证书内容:
openssl x509 -in server.crt -text -noout

主要检查有效期与是否包含预期的IP或域名。

接下来就可以使用生成的自签名证书启动web服务器,将如下代码保存为server.js,与生成的证书server.crt,server.key文件放在同一个目录下

const https = require('https');
const fs = require('fs');
const url = require('url');

// 读取 SSL 证书和私钥
const options = {
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.crt')
};

// 创建 HTTPS 服务器
const server = https.createServer(options, (req, res) => {
  const { method, url: reqUrl } = req;

  // 只处理 POST 请求
  if (method === 'POST' && reqUrl === '/bmc-data') {
    let body = '';

    // 接收请求体数据
    req.on('data', chunk => {
      body += chunk.toString();
    });

    // 请求结束时处理数据
    req.on('end', () => {
      console.log('Received data:', body);

      // 返回成功响应
      res.writeHead(200, { 'Content-Type': 'application/json' });
      res.end(JSON.stringify({ status: 'success', data: body }));
    });
  } else {
    // 返回 404 错误
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Not Found');
  }
});

// 绑定端口并启动服务器
const PORT = 8443; // 可以更改为其他端口
server.listen(PORT, () => {
  console.log(`HTTPS server running on port ${PORT}`);
});

根据需要可以修改端口号,这里选择了8443。使用node server.js命令即可启动web服务器:

在这里插入图片描述

通过ssh登录openBMC,使用curl命令向web服务器发送HTTPS请求进行验证,发现产生如下报错:

在这里插入图片描述
这是由于OpenBMC没有信任自签名证书导致的,需要将自签名证书添加到信任。首先将server.crt证书文件上传到OpenBMC的/usr/share/ca-certificates目录下,然后将证书名添加到/etc/ca-certifacates.conf文件中。最后运行update-ca-certificate程序即可将自签名证书添加到信任。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果产生如下报错,则表明BMC时间与证书的有效时间不匹配

在这里插入图片描述

可以设置BMC时间解决:

在这里插入图片描述

通过curl命令发送HTTPS请求正常后,触发EventService发送测试日志,也可以正常收到:

在这里插入图片描述

相关文章:

  • Open CASCADE学习|Convert BSpline Curve to Arc Spline
  • 优选算法系列(6.模拟)
  • 专业抑郁测试工具:让心理健康评估更简单
  • AI工厂崛起:解析吴泳铭提出的GPU中心化计算范式
  • 给k8s中绑定pv并在容器中运行中使用的pvc扩容
  • Elasticsearch单节点安装手册
  • LeetCode.3396.使数组元素互不相同所需的最少操作次数
  • ArkTS语言基础之函数
  • 从Excel到智能中枢:工单管理的MES系统进化论
  • 40、web前端开发之Vue3保姆教程(四)
  • tcp/ip攻击及防范
  • 7、nRF52xx蓝牙学习(nrf_gpiote.c库函数学习)
  • Spring 服务调用接口时,提示You should be redirected automatically to target URL:
  • 7.第二阶段x64游戏实战-分析人物属性
  • 软件需求分析习题汇编
  • PostGreSQL/openGauss表膨胀处理
  • Postman测试
  • [创业之路-364]:穿透表象:企业投资的深层逻辑与误区规避
  • 程序化广告行业(69/89):电商素材制作与展示策略解析
  • 程序化广告行业(71/89):ABTester与Tag Manager系统深度解析
  • 小地方网站建设公司/专业代写文案的公司
  • 海洋馆的网站怎么做/站长工具seo综合查询收费吗
  • 云南专业网站建设/朋友圈信息流广告投放价格
  • 铜陵建设行业培训学校网站/5118数据分析平台
  • 网站做代练/律师网络推广
  • 网站建设需要几十万/深圳全网营销平台排名