Redfish / BMC 传感器数据采集工具 — 纯 Python 标准库实现,零依赖,指纹驱动
log-redfish-lts 是一个运行在 Linux 服务器上的命令行工具,用于持续采集服务器 BMC(基板管理控制器)暴露的传感器数据,并以 CSV 格式输出到终端。
tee 写入文件或管道传给其他工具Ctrl+C 停止| 特点 | 说明 |
|---|---|
| 零依赖 | 只用 Python 标准库(http.client, ssl, json, csv),不需要 pip install 任何包,服务器上开箱即用 |
| 指纹驱动 | 不同厂商 BMC 的接口路径和数据结构不同,全部通过 JSON 指纹文件配置,换机器不改代码 |
| 自动探测 | 程序启动时自动遍历指纹文件匹配当前 BMC,无需手动指定机器类型 |
| 断线重连 | 会话过期自动重新登录,网络抖动自动跳过当次采集,不中断主循环 |
| 无效值过滤 | 自动过滤 65535(传感器故障标记)、NA、空值,避免污染数据 |
| 诊断日志 | 每个 URI 的采集结果都有日志记录,配不通时看日志即可定位 |
数据流如下,从左到右:
| 模块文件 | 职责 |
|---|---|
log_redfish.py | 命令行入口:解析参数 → 加载配置 → 连接 BMC → 匹配指纹 → 循环采集 → CSV 输出 |
redfish_logger/client.py | HTTP 客户端:HTTPS 连接、会话登录/登出、GET 请求、SSL 处理 |
redfish_logger/fingerprinter.py | 指纹引擎:加载指纹文件 → 探测匹配 → 按字段映射提取数据 → 过滤无效值 |
redfish_logger/jsonpath.py | JSON 提取器:支持数组 [*]、字典 {*}、固定字段三种模式,支持嵌套路径 |
redfish_logger/config.py | 配置读取:解析 config.ini,UTF-8 编码 |
redfish_logger/sorter.py | 列排序:温度优先 → 功耗 → 其他 → 转速 → 占空比,同类型按自然排序 |
redfish_logger/logger_setup.py | 日志配置:按日期轮转,DEBUG 级别写入 logs/ 目录 |
# 需要 root 权限 sudo ./install.sh
安装脚本会:
/opt/log_redfish//opt/log_redfish/logs/config.ini 生成 config.ini.example 模板config.ini/usr/local/bin/log-redfish → 主程序
sudo make install
如果脚本所在目录下存在 config.ini,程序自动识别为开发模式,直接使用当前目录的文件,无需安装:
python3 log_redfish.py
vim /opt/log_redfish/config.ini
填入 BMC 的 IP 地址、用户名、密码:
[redfish] host = 10.17.17.19 username = admin password = admin123 interval = 5 verify_ssl = false
# 输出到终端同时写入文件 log-redfish | tee -a data.csv
按 Ctrl+C,程序会自动登出 BMC 会话并退出。
logs/ 下的日志排查原因。
所有配置文件的参数都可以通过命令行覆盖,方便临时切换机器而不改配置文件:
log-redfish [-H 地址] [-U 用户名] [-P 密码] [-i 间隔] [-t 超时] [-f 指纹ID] [--verify-ssl] [--no-verify-ssl]
| 参数 | 全称 | 类型 | 说明 | 覆盖配置项 |
|---|---|---|---|---|
-H |
--host |
字符串 | BMC 的 IP 地址或域名 | host |
-U |
--username |
字符串 | 登录用户名 | username |
-P |
--password |
字符串 | 登录密码 | password |
-i |
--interval |
浮点数 | 采集间隔(秒),如 0.5 表示 500ms |
interval |
-t |
--timeout |
浮点数 | HTTP 请求超时时间(秒) | timeout |
-f |
--fingerprint-id |
整数 | 强制使用指定 ID 的指纹(不自动探测) | fingerprint_id |
--verify-ssl |
— | 开关 | 验证 SSL 证书(默认不验证) | verify_ssl = true |
--no-verify-ssl |
— | 开关 | 不验证 SSL 证书(默认行为) | verify_ssl = false |
# 示例 1:完全用配置文件 log-redfish | tee -a data.csv # 示例 2:命令行指定 BMC 地址和账号 log-redfish -H 10.17.17.19 -U admin -P admin123 | tee -a data.csv # 示例 3:快速采集(0.5 秒间隔) log-redfish -i 0.5 | tee -a fast.csv # 示例 4:指定指纹 ID(跳过自动探测) log-redfish -f 2 | tee -a data.csv # 示例 5:开发模式直接运行 python3 log_redfish.py -H 10.17.17.19 -U admin -P admin123
配置文件为 INI 格式,位于 /opt/log_redfish/config.ini(开发模式下为脚本同目录)。所有参数集中在 [redfish] 节:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
host |
字符串 | 无(必填) | BMC 的 IP 地址或域名,不带 https:// 前缀 |
username |
字符串 | 无(必填) | BMC 登录用户名 |
password |
字符串 | 无(必填) | BMC 登录密码 |
interval |
浮点数 | 5.0 | 采集间隔(秒),最小可设 0.1 |
verify_ssl |
布尔值 | false | 是否验证 SSL 证书。BMC 通常用自签名证书,建议 false |
timeout |
浮点数 | 5.0 | HTTP 请求超时(秒),超时后当次采集跳过 |
fingerprint_file |
字符串 | uri_fingerprints.json | 指纹文件路径。相对路径相对于安装目录,也可写绝对路径 |
fingerprint_id |
整数 | 无(注释掉) | 指定指纹 ID 跳过自动探测。建议注释掉使用自动探测 |
fingerprint_id 注释掉(前面加 #),让程序自动遍历指纹文件匹配。
这样换机器时只需改 host/账号,不用管指纹 ID。
[redfish] host = 10.17.17.19 username = admin password = admin123 interval = 5 verify_ssl = false fingerprint_file = uri_fingerprints.json timeout = 5 # fingerprint_id = 3 # 注释掉以启用自动探测
| 文件 | 用途 | 需要改吗 |
|---|---|---|
config.ini |
运行配置:BMC 地址、账号、间隔 | 需要,每次换机器都要改 |
uri_fingerprints.json |
指纹文件:URI 路径 + 字段映射 | 换新型号时追加一条指纹(详见指纹编写指南) |
log_redfish.py |
主程序入口 | 不需要 |
redfish_logger/ |
核心模块包(客户端、指纹引擎、提取器等) | 不需要 |
logs/ |
运行日志,按日期命名(如 redfish_20260717.log) | 不需要,可定期清理 |
ReadMe.html(指纹文件编写指南)。遇到新机器只需在 JSON 里加一条,不用改任何代码。
程序输出 CSV 到 stdout,第一行是表头,后续每行是一次采集:
采集时间,CPU0_Temp,CPU1_Temp,Inlet_Temp,System_Power,Fan0_rpm,Fan0_duty,Fan1_rpm,Fan1_duty 2026-07-17 10:30:00,45,47,32,120,3000,35,3200,38 2026-07-17 10:30:05,45,48,32,118,3000,35,3200,38 2026-07-17 10:30:10,46,48,,119,3050,36,3200,38
| 场景 | 程序行为 |
|---|---|
| 网络连接失败 | 记录错误日志,程序退出(无法连上 BMC 无法工作) |
| 认证失败(用户名/密码错) | 记录错误日志,程序退出 |
| 会话过期(HTTP 401) | 自动重新登录,重登成功后继续采集;重登失败则记录错误,当次数据为空跳过 |
| 单个 URI 请求失败 | 跳过该 URI,其他 URI 的数据正常输出;日志记录哪个 URI 失败 |
| 所有 URI 都采集失败 | 当次输出空行(日志标记"本次采集无数据"),不中断主循环 |
| 传感器值=65535/NA/空 | 该字段被过滤,不出现在 CSV 行中 |
| Ctrl+C 中断 | 自动登出 BMC 会话,记录退出日志,程序正常结束 |
/redfish/v1/),
但有些需要在 BMC 管理界面手动启用。用 curl -k https://<ip>/redfish/v1/ 验证。
verify_ssl = false 是默认行为。
如果你的 BMC 用了正规 CA 签发的证书且想验证,设 verify_ssl = true 或命令行加 --verify-ssl。
logs/ 目录下,文件名按日期(如 redfish_20260717.log)。
日志级别 DEBUG,记录了每次采集的详细信息:每个 URI 提取了几个字段、哪个失败了、为什么。
配置不通时先看日志。
tee 可同时显示和保存:
log-redfish | tee -a data.csv。-a 是追加模式,多次运行不会覆盖之前的数据。
config.ini 里的 host/username/password;
② 如果是新型号 BMC,在 uri_fingerprints.json 里加一条指纹(见指纹编写指南)。
不需要重新安装、不需要改代码。
/opt/log_redfish/uninstall.sh
sudo make uninstall
卸载会删除 /opt/log_redfish/ 目录和 /usr/local/bin/log-redfish 软链接。
config.ini 和指纹文件。如果自定义过,建议先备份:
cp /opt/log_redfish/config.ini ~/config.ini.bak