点击此处查看详细分析解答
Redfish 接口中 TelemetryService 实现:获取周期性功率与温度数据
根据您提供的上下文信息,以下是对 Redfish 接口中 /redfish/v1/TelemetryService/MetricReports 如何实现获取**周期性采集的功率(PeriodPowerMetrics)、温度(PeriodTempMetrics)和统计类指标(StatPowerMetrics, StatTempMetrics)**的详细分析与回答。
1. 数据获取方式
数据接口与资源模型
Redfish 中的 TelemetryService 特性通过以下层级结构来支持周期性和统计类度量报告的生成和获取:
| 资源 |
说明 |
ServiceRoot → /redfish/v1/ |
根资源,包含对 TelemetryService 的引用 |
TelemetryService → /redfish/v1/TelemetryService |
遥测服务入口 |
MetricReportDefinitions |
定义如何生成报告(周期、触发条件、采集项等) |
MetricReports → /redfish/v1/TelemetryService/MetricReports |
存储实际生成的指标报告,可通过 REST API 按名访问 |
获取方式
(1)直接查询 MetricReports 集合
使用 HTTP GET 请求获取所有或指定名称的 MetricReport:
GET /redfish/v1/TelemetryService/MetricReports
(2)按名称获取特定报告(如 PeriodPowerMetrics)
GET /redfish/v1/TelemetryService/MetricReports/PeriodPowerMetrics
返回结果将包括:
Timestamp: 报告创建时间
MetricValues[]: 包含多个时间点的采样数据,每个条目含:
MetricValue: 采集值(字符串格式)
Timestamp: 实际采样时间
MetricProperty: 原始资源路径(如 /redfish/v1/Chassis/1/Power#/PowerConsumedWatts)
(3)统计类数据实现方式(StatPowerMetrics / StatTempMetrics)
统计报表通过 MetricReportDefinition 中的 Metrics 数组 和 统计函数 实现:
"Metrics": [
{
"MetricId": "MaxConsumedWatts",
"CollectionFunction": "Maximum",
"CollectionDuration": "P1D",
"CollectionTimeScope": "Interval",
"MetricProperties": [ "/redfish/v1/Chassis/1/Power#/PowerConsumedWatts" ]
},
{
"MetricId": "MinConsumedWatts",
"CollectionFunction": "Minimum",
"CollectionDuration": "P1D"
}
]
上述定义表示 每天(P1D)计算一次最大/最小功耗,结果存储在对应的 MetricReport 中。
2. 当前是否支持?是否有示例文档?
当前支持情况(Yes,已支持)
根据提供的知识图谱和文档内容,openUBMC 平台已经完整实现了 Redfish TelemetryService 的功能,并支持周期性采集与统计报表生成。
支持的功能点
| 功能 |
是否支持 |
依据 |
| 周期性功率数据(PeriodPowerMetrics) |
是 |
MetricReportDefinitionType=Periodic + PowerConsumedWatts 示例 |
| 周期性温度数据(PeriodTempMetrics) |
是 |
GetTemperaturesInfo 接口 + 温度传感器接入 Telemetry |
| 统计类功率数据(StatPowerMetrics) |
是 |
支持 Average, Maximum, Minimum, Summation 聚合函数 |
| 统计类温度数据(StatTempMetrics) |
是 |
配置方式与功率相同 |
| Redfish 标准兼容 |
是 |
明确说明符合 DMTF DSP0266 (Telemetry) 标准 |
相关示例文档及配置片段
示例 1:周期性功率统计报告定义(来自文档)
{
"@odata.id": "/redfish/v1/TelemetryService/MetricReportDefinitions/PlatformPowerUsage",
"Id": "PlatformPowerUsage",
"Name": "Transmit and Log Platform Power Usage",
"MetricReportDefinitionType": "Periodic",
"Schedule": {
"RecurrenceInterval": "PT1H"
},
"ReportActions": [ "LogToMetricReportsCollection" ],
"MetricProperties": [
"/redfish/v1/Chassis/Tray_1/Power#/PowerControl/0/PowerConsumedWatts",
"/redfish/v1/Chassis/Tray_2/Power#/PowerControl/0/PowerConsumedWatts"
]
}
每小时采集一次平台功耗并记录。
示例 2:带统计的度量计算定义
{
"Wildcards": [ ... ],
"Metrics": [
{
"MetricId": "AverageConsumedWatts",
"CollectionFunction": "Average",
"CollectionDuration": "PT1S",
"MetricProperties": [ "/redfish/v1/Chassis/{TWild}/Power#/PowerControl/{PWild}/PowerConsumedWatts" ]
}
]
}
表示对每1秒的功率数据做平均,可用于精确控制或趋势分析。
示例 3:统计数据的输出报告格式
{
"@odata.id": "/redfish/v1/TelemetryService/MetricReports/PlatformPowerUsage",
"Id": "PlatformPowerUsage",
"MetricValues": [
{
"Timestamp": "2016-11-08T12:25:00-05:00",
"MetricValue": "103",
"MetricProperty": "/redfish/v1/Chassis/Tray_1/Power#/PowerControl/0/PowerConsumedWatts"
},
{
"Timestamp": "2016-11-08T13:25:00-05:00",
"MetricValue": "106"
}
]
}
3. 实现机制详解
实现原理总结
| 功能 |
实现方式 |
| 数据源获取 |
通过底层驱动采集 Power、Temperature 等传感器数据,注册为 Redfish 资源(如 PowerControl, Thermal) |
| 度量定义(MetricDefinition) |
定义每个可度量项的类型(如 Numeric)、单位(W, °C)、精度、采集间隔等 |
| 报告定义(MetricReportDefinition) |
定义何时生成(周期/变化/请求时)、采集哪些属性、是否聚合(Maximum/Average) |
| 报告生成与存储 |
TelemetryService 根据定义自动从资源中提取数据,生成并写入 MetricReports 集合 |
| 对外暴露 |
所有报告可通过 Redfish REST API 访问,支持按名称查询 |
关键特性实现说明
(1)如何实现“最近周期采集功率数据” → PeriodPowerMetrics
- 定义一个 Periodic 类型的 MetricReportDefinition
- 指定
RecurrenceInterval: PT1M(每分钟)
- 引用
/redfish/v1/Chassis/1/Power#/PowerConsumedWatts
- 设置
ReportActions 为 LogToMetricReportsCollection
- 启用后,系统自动生成名为
PeriodPowerMetrics 的报告
(2)如何实现“每日统计最大/最小值” → StatPowerMetrics
- 定义
MetricReportDefinition 的 Metrics 字段
- 设置
CollectionFunction: Maximum, CollectionDuration: P1D
- 使用定时调度每天生成一次报告
(3)温度数据处理方式一致
- 所有温度数据(如 InletTemp、OutletTemp、CPU Temp)均暴露在
Thermal 资源中
- 可通过
GetTemperaturesInfo() 方法读取,再纳入 MetricDefinition
- 完全支持与功率相同的聚合与周期上报机制
接口支持情况总结
| 接口/功能 |
支持 |
/redfish/v1/TelemetryService |
支持,作为顶层服务存在 |
/redfish/v1/TelemetryService/MetricDefinitions |
支持 |
/redfish/v1/TelemetryService/MetricReportDefinitions |
支持读写配置 |
/redfish/v1/TelemetryService/MetricReports |
支持读取历史和实时报告 |
| 聚合函数(Average, Max, Min) |
支持 |
| 自定义时间范围(如 P1D, PT1H) |
支持 ISO8601 时间格式 |
| 实时事件通知(RedfishEvent) |
支持结合 Triggers 触发告警 |
总结与建议
| 项目 |
回答 |
| 1. 数据获取方式? |
使用 Redfish REST GET 请求访问 /redfish/v1/TelemetryService/MetricReports/{ReportName} 获取指定报告数据 |
| 2. 是否支持?有无文档? |
完全支持。相关文档见 openUBMC 社区发布的 [TelemetryService特性介绍] 内容,以及 [Redfish接口映射配置指南] |
| 3. 如何实现? |
通过配置 MetricReportDefinition 定义采集周期、属性列表和聚合函数,系统自动填充 MetricReports,无需手动编程 |
| 是否需要额外开发? |
不需要。现有架构已支持所述功能,只需正确配置 MetricReportDefinition 即可 |
建议操作流程
-
通过 Redfish Client 或 curl 查询 MetricReportDefinitions 列表:
GET /redfish/v1/TelemetryService/MetricReportDefinitions
-
查看是否存在 PeriodPowerMetrics, StatPowerMetrics 等预设定义,或创建新的 JSON 配置文件添加。
-
发送 POST 请求创建自定义 MetricReportDefinition。
-
查询 /redfish/v1/TelemetryService/MetricReports 获取最新数据。
-
可结合 GetPowerHistoryData 方法获取更长时间段的功率历史数据(若有持久化存储)。
如有进一步需求(如自定义报表模板、导出策略),可参考 bmc.kepler.Systems.DataAcquisitionService.ExportHistoryData 接口进行本地/远程归档。
相关链接:
- TelemetryService特性介绍
- openUBMC 182x大板管理特性设计说明书 | 文档中心 | openUBMC
- CSR配置字典之EnergyMetric类 | 文档中心 | openUBMC
- openUBMC
- 电源管理机制介绍 | 文档中心 | openUBMC