【開發經驗】調試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.pswp.cn/news/900591.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900591.shtml
英文地址,請注明出處:http://en.pswp.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 Ef?cient 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…