需在grafana中用同一时序面板实现nginx历史流量峰值对比与预测:①用max_over_time()提取多周期(7d/14d/21d)每小时峰值并同图对比;②启用forecast模式或predict_linear()生成预测线;③通过series overrides、tooltip、fill、unit等配置提升可读性。

要在 Grafana 中展示 Nginx 历史流量峰值的对比与预测分析,关键不是堆图表,而是把「时间维度对比」和「趋势延伸逻辑」在同一个时序面板里清晰表达出来。核心靠三块:历史多周期对齐(如同比/环比)、流量峰值自动识别、预测线合理叠加。
用 PromQL 提取并标记历史峰值
原始流量指标(如 rate(nginx_http_requests_total[1m]))本身不带峰值信息,需主动提取:
- 用
max_over_time()按固定窗口抓取峰值,例如:max_over_time(rate(nginx_http_requests_total[1m])[7d:1h])—— 取过去 7 天每小时的最高 QPS,生成一条“每日峰值曲线” - 叠加多个周期做对比:再加一行查前 7 天(
[14d:1h]),一行查前 21 天([21d:1h]),三者同图绘制,就能直观看出峰值是否逐周抬升 - 在 Series Overrides 中为每条线标注来源,如 “Peak (Last 7d)”、“Peak (Prev 7d)”、“Peak (21d ago)”,避免混淆
在 Time Series 面板中启用 Forecast 模式
Grafana 9.1+ 的 Forecast 功能可基于历史序列自动拟合趋势(无需写 PromQL),适合快速验证增长惯性:
- 确保查询返回的是单条时间序列(如只查某 host 或某 upstream 的 QPS)
- 进入面板 Settings → Display → Forecast,开启并设置预测长度(如 6h 或 24h)
- 勾选 “Show confidence bands” 若数据源支持(如 Prometheus +
predict_linear()返回带 _lower/_upper 的指标) - Forecast 线默认是虚线+浅色,可手动在 Line Style 中调粗、改色,并在 Legend 中重命名为 “Forecast (24h)”
用 predict_linear() 补充业务可解释的预测
若需明确基于近期行为推演(比如“按最近 2 小时增速,未来 1 小时会到多少”),PromQL 更可控:
- 查原始 QPS:
rate(nginx_http_requests_total[1m]) - 加预测线:
predict_linear(rate(nginx_http_requests_total[1m])[2h], 3600)—— 用最近 2 小时数据拟合直线,外推 1 小时 - 为预测线单独设阈值:在 Thresholds 中添加 1 条红色线(如 5000 QPS),当预测值超该值时整条预测线变红,提示容量风险
- 搭配 Tooltip 显示具体数值:开启 “Show all series” 和 “Show value labels”,鼠标悬停即可看到“Actual: 4210, Predicted: 4890”
增强可读性的细节配置
峰值对比+预测容易信息过载,必须靠视觉管理降低认知负担:
- 在 X 轴时间范围设为 “Last 7 days”,确保所有历史峰值线完整可见;右上角时间选择器锁定相对范围,避免切时间后预测线消失
- 开启 “Fill below to” 仅对原始 QPS 曲线填充浅蓝背景,预测段保持透明,突出“已发生”与“待验证”的区分
- 在 Standard Options → Unit 中,为预测线单位加注释,如 “QPS (forecast)”,原始线留空或写 “QPS (actual)”
- 图例位置设为 “Bottom”,避免遮挡峰值交点;禁用 “Sort by value”,保持“Actual / Peak (7d) / Forecast”顺序固定











