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

Prometheus PromQL多序列与时间维度聚合问题

解决Prometheus时间聚合函数无法使用by分组的问题

问题分析

你尝试用sum_over_time by (label1, label2) (series_name[1m])实现按标签分组的时间范围求和,但Prometheus的时间聚合函数(如sum_over_time、avg_over_time等)本身不支持by/without分组语法,这才导致了语法错误。

正确写法

要实现按指定标签分组+时间范围聚合的需求,需要将标签聚合(sum by)和时间聚合(sum_over_time)分开使用,顺序是先做时间聚合,再做标签分组:

sum by (label1, label2) (sum_over_time(series_name[1m]))

细节说明

  • 内层的sum_over_time(series_name[1m]):对每个时间序列,计算过去1分钟内所有样本的总和,返回一个即时向量(每个序列对应一个值)。
  • 外层的sum by (label1, label2):将内层结果按label1和label2分组,对同组的序列值求和,得到最终的分组聚合结果。

分辨率设置

如果需要5秒的查询分辨率(即每隔5秒计算一次过去1分钟的聚合值),只需在查询时将步长(step)参数设置为5s即可(不同Prometheus客户端/UI的设置位置不同,比如Grafana中可以在面板的查询选项里调整step)。

等价写法

由于加法的交换律,你也可以先按标签分组,再做时间聚合,结果完全一致:

sum_over_time(sum by (label1, label2) (series_name)[1m])

内容的提问来源于stack exchange,提问作者Yi Chen Chong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:52:06