You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grafana中添加下采样变量,按指定时间聚合Prometheus计数器数据?

固定时间粒度聚合请求量的解决方案

问题根源

直接替换$__interval为自定义的1h/6h参数后结果不符合预期,是因为$__interval是Grafana根据面板时间范围和图表宽度自动计算的显示适配间隔,而你需要的是业务逻辑上的固定时间窗口聚合,两者逻辑完全不同:前者是为了让图表显示合适的点数,后者是要严格按指定粒度统计每个窗口的总请求量。

可行方案

方案1:通用PromQL实现(兼容Prometheus/VictoriaMetrics)

用sum_over_time统计固定窗口内的总请求,再通过round对齐时间戳,确保每个窗口只显示一个数据点:

sum by (model_id, rounded_time) (
  sum_over_time(requests[$downsample])
)
|> round($downsample)
  • sum_over_time(requests[$downsample]):对每个时间序列,计算指定窗口内的请求增量总和(和increase等价,但更适合固定窗口场景)
  • round($downsample):把数据点的时间戳对齐到你选择的粒度边界(比如1h的话,所有数据点都会落在整点)
  • 外层sum by (model_id, rounded_time):按模型ID和对齐后的时间汇总,保证每个粒度窗口只有一个数据点

方案2:VictoriaMetrics专属高效实现

VictoriaMetrics提供了原生的rollup函数,比通用PromQL更高效,适合大规模数据:

sum by (model_id) (
  rollup_sum(requests[$downsample])
)
  • rollup_sum(requests[$downsample]):直接按指定时间粒度对计数器做降采样求和,自动对齐时间窗口,性能优于通用函数
  • 外层sum by (model_id):按模型ID汇总每个窗口的总请求量

变量配置步骤

  1. 在Grafana中创建名为downsample的变量,类型选自定义
  2. 选项列表添加需要的时间粒度:
    • 1h
    • 6h
    • 1d(按需扩展)
  3. 确保变量值是PromQL支持的时间格式(比如1h、6h,可读性更好)

关键配置检查

  • 进入面板编辑页的「查询选项」,把**最小间隔(Min interval)**设置为$downsample,防止Grafana在你指定的粒度之外再进行二次采样,导致结果混乱
  • 确认requests是计数器类型(通常指标名带_total后缀),如果是 gauge 类型,需要调整函数为avg_over_time等对应逻辑

内容的提问来源于stack exchange,提问作者Nikola Borisov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:29:54