Grafana 可通过 Time Series 面板将历史数据与预测数据组合展示:支持使用 predict_linear() 进行线性预测、接入外部预测服务,以及启用内置 Forecast 模式;同时需要区分历史与预测的展示样式、明确单位说明,并合理设置阈值和图例。

要在 Grafana 中配置图表展示历史趋势和预测结果,核心思路是将时间序列查询、合适的可视化面板,以及可选的预测逻辑结合起来使用。通常预测能力由后端数据源或 PromQL 派生实现。需要注意,Grafana 本身并不原生提供完整的机器学习预测能力,但可以借助 Prometheus 的 predict_linear() 函数、外部预测服务返回的数据,或者 Grafana 9.1+ 的内置 “Forecast” 功能(需配合受支持的时间序列数据源)实现趋势预测图表展示。
选择支持趋势分析与预测展示的图表类型
建议优先使用 Time Series 面板(替代旧版 Graph),因为它针对时序数据展示做了专门优化,原生支持:
- 多序列叠加展示:可同时绘制原始指标(历史数据)、平滑曲线和预测曲线
- 时间轴自动缩放与序列对齐,便于对比历史趋势和未来预测
- 内置 Forecast 模式(可在面板右上角 Settings → Display → Forecast 中启用)
- 支持在 Tooltip 中显示预测值及置信区间(前提是数据源能够返回相关字段)
用 PromQL 实现基础线性预测(适用于 Prometheus 数据源)
在查询编辑器中,可以通过 predict_linear() 函数基于最近时间窗口估算未来数值。例如:
predict_linear(node_load1[1h], 3600)
其含义是:用过去 1 小时的 node_load1 数据做线性拟合,并预测未来 3600 秒(即 1 小时)的负载变化值。
实际配置时,建议将原始数据与预测结果同时展示:
- 第一行查询原始数据:
node_load1 - 第二行添加预测查询:
predict_linear(node_load1[1h], 3600) - 在 Series Overrides 中为预测线设置虚线样式(
lineStyle.dash = [10,5])并使用不同颜色,增强图表区分度
配置视觉区分:历史数据 vs 预测数据
为了避免用户混淆历史值与预测值,必须清晰划定时间边界并强化视觉差异:
- 在面板 Standard options → Unit 中为预测线补充单位说明,例如
load (forecast) - 使用 Thresholds 设置动态参考线,例如预测值超过阈值时自动显示为红色
- 开启 Fill below to(仅适用于 Time Series)为历史数据填充浅色背景,预测区间保持透明
- 在 Legend 中自定义系列名称,如
Actual/Predicted (1h),提升可读性
接入外部预测结果(如 Python/ML 模型输出)
如果已经有现成的预测服务,例如通过 Loki 日志分析趋势,或调用机器学习 API 返回时间序列结果,也可以将其作为独立数据源接入 Grafana:
- 配置 Prometheus 兼容接口(如 VictoriaMetrics、Thanos Query)对外暴露预测指标
- 或者使用 JSON Datasource 插件直接连接 HTTP 接口,并返回标准 Prometheus 格式的 JSON 数据
- 查询时直接引用该数据源中的预测指标名,与原始指标并列绘制在同一张图表中
此时还可以在 Tooltip 或面板注释中补充模型类型、训练周期、误差范围等说明信息,帮助用户更准确理解预测结果。
