【开发经验】调试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发送测试日志,也可以正常收到:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中断嵌套、中断咬尾、中断晚到

中断咬尾(Tail-Chaining)是一种通过减少上下文切换开销来实现中断连续响应的高效机制,其核心在于避免重复的出栈和入栈操作,从而显著降低中断延迟。以下是具体原理及实现方式: 中断咬尾的运作机制 当多个中断请求连续…

Vue2下载二进制文件

后端: controller: GetMapping(value "/get-import-template")public void problemTemplate(HttpServletRequest request, HttpServletResponse response) throws Exception {iUserService.problemTemplate(request, response);} service: void probl…

Ubuntu小练习

文章目录 一、远程连接1、通过putty连接2、查看putty运行状态3、通过Puuty远程登录Ubuntu4、添加新用户查看是否添加成功 5、用新用户登录远程Ubuntu6、使用VNC远程登录树莓派 二、虚拟机上talk聊天三、Opencv1、简单安装版(适合新手安装)2、打开VScode特…

996引擎-疑难杂症:Ctrl + F9 编辑好的UI进入游戏查看却是歪的

Ctrl F9 编辑好UI后,进入游戏查看却是歪的。 检查Ctrl F10 是否有做过编辑。可以找到对应界面执行【清空】

WinForm真入门(5)——控件的基类Control

控件的基类–Control 用于 Windows 窗体应用程序的控件都派生自 Control类并继承了许多通用成员,这些成员都是平时使用控件的过程最常用到的。无论要学习哪个控件的使用,都离不开这些基本成员,尤其是一些公共属性。由于 Conlrol 类规范了控件的基本特征…

RAG(检索增强生成)系统,提示词(Prompt)表现测试(数据说话)

在RAG(检索增强生成)系统中,评价提示词(Prompt)设计是否优秀,必须通过量化测试数据来验证,而非主观判断。以下是系统化的评估方法、测试指标和具体实现方案: 一、提示词优秀的核心标准 优秀的提示词应显著提升以下指标: 维度量化指标测试方法事实一致性Faithfulness …

Appium的学习总结-Inspector参数设置和界面使用(5)

环境搭建好后,怎么使用呢? 环境这里使用的是: Appium的Server端GUI 22版本 Inspector需要单独下载安装,GUI里并没有集成。 (使用Appium v1.22.0,查看元素信息需要另外安装下载Appium Inspector) 操作&…

I/O进程3

day3 五、进程 7.函数接口 7.1创建子进程 pid_t fork(void);功能:创建子进程返回值:成功:在父进程中:返回子进程的进程号 >0 在子进程中:返回值为0; 失败:-1并设置errno 特点 1.子进程几乎…

k8s 1.24.17版本部署(使用Flannel插件)

1.k8s集群环境准备 推荐阅读: https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 1.1 环境准备 环境准备:硬件配置: 2core 4GB磁盘: 50GB操作系统: Ubuntu 22.04.04 LTSIP和主机名:10.0.0.231 master23110.0.0.232 worker23210.0…

网络编程—TCP/IP模型(UDP协议与自定义协议)

上篇文章: 网络编程—Socket套接字(TCP)https://blog.csdn.net/sniper_fandc/article/details/146923783?fromshareblogdetail&sharetypeblogdetail&sharerId146923783&sharereferPC&sharesourcesniper_fandc&sharefro…

GNSS有源天线和无源天线

区别 需要外部供电的就是有源天线,不需要外部供电的是无源天线。 无源天线 一般就是一个陶瓷片、金属片等,结构简单,成本低廉,占用空间及体积小,适合于强调紧凑型空间的导航类产品。 不需要供电,跟设备直…

网络编程—TCP/IP模型(IP协议)

上篇文章: 网络编程—TCP/IP模型(TCP协议)https://blog.csdn.net/sniper_fandc/article/details/147011479?fromshareblogdetail&sharetypeblogdetail&sharerId147011479&sharereferPC&sharesourcesniper_fandc&sharef…

基于金字塔视觉变换的类引导网络高分辨率遥感图像高效语义分割

Class-Guidance Network Based on the Pyramid Vision Transformer for Efficient Semantic Segmentation of High-Resolution Remote Sensing Images 摘要 多分类语义分割中类之间的小差异和类内的大变化是全卷积神经网络的“编码器-解码器”结构没有完全解决的问题&#…

基于人工智能的高中教育评价体系重构研究

基于人工智能的高中教育评价体系重构研究 一、引言 1.1 研究背景 在科技飞速发展的当下,人工智能技术已广泛渗透至各个领域,教育领域亦不例外。人工智能凭借其强大的数据处理能力、智能分析能力和个性化服务能力,为教育评价体系的创新与发…

DeepSeek在互联网技术中的革命性应用:从算法优化到系统架构

引言:AI技术重塑互联网格局 在当今快速发展的互联网时代,人工智能技术正以前所未有的速度改变着我们的数字生活。DeepSeek作为前沿的AI技术代表,正在多个互联网技术领域展现出强大的应用潜力。本文将深入探讨DeepSeek在搜索引擎优化、推荐系统、自然语言处理以及分布式系统…

数字游戏(继Day 10)

主体: #include<stdio.h> #include<time.h> #include<stdlib.h>#include"mygetch.h"#define MAX 51 //定义测试字母的最大长度void help() {printf("\n****************************************");printf("\n*输入过程中无法退出…

谈谈模板方法模式,模板方法模式的应用场景是什么?

一、模式核心理解 模板方法模式是一种​​行为设计模式​​&#xff0c;通过定义算法骨架并允许子类重写特定步骤来实现代码复用。 如同建筑图纸规定房屋结构&#xff0c;具体装修由业主决定&#xff0c;该模式适用于​​固定流程中需要灵活扩展​​的场景。 // 基础请求处理…

2024 Jiangsu Collegiate Programming Contest H

记录一下为数不多的网络流 #pragma GCC optimize(3,"Ofast","inline") #include<bits/stdc.h> #include <execution> using namespace std; using i64 long long; using i128 __int128;template <typename T>struct MCFgraph{struct …

Hadoop序列化与反序列化

一、Hadoop序列化概述 &#xff08;一&#xff09;什么是序列化和反序列化 序列化&#xff1a;序列化是将对象&#xff08;如Java中的类实例&#xff09;转换为字节序列的过程。在Hadoop中&#xff0c;数据在分布式系统中传输或者存储到磁盘时&#xff0c;需要将数据对象序列…

FreeRTOS临界区

在FreeRTOS中&#xff0c;临界区通过关闭可管理的中断来保护共享资源&#xff0c;具体关闭的中断层级由configMAX_SYSCALL_INTERRUPT_PRIORITY宏定义决定。以下是关键点解析&#xff1a; 中断优先级分类&#xff1a; 高优先级中断&#xff1a;数值低于configMAX_SYSCALL_INTERR…