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

PromQL按id聚合计数器最新增长时间的查询报错求助

解决方案

获取每个id的计数器最新增长时间

你可以先对原始计数器按id做范围聚合,再使用changes()函数,这样就能满足按id分组的需求。正确的查询语句如下:

time() - max_over_time(
  timestamp(changes(sum by (id) (my_service_counter{status="success"})[5m]))[24h:1m]
)

语句拆解:

  • sum by (id) (my_service_counter{status="success"})[5m]:先对过去5分钟内的计数器数据,按id聚合求和,得到每个id对应的范围向量(包含该id在5分钟内所有时间点的累计值)
  • changes(...):检测每个id的累计值在5分钟内的变化次数,只要计数器增长就会返回非0值
  • timestamp(...):提取变化发生时的时间戳
  • max_over_time(...)[24h:1m]:在过去24小时内,以1分钟为步长,找到每个id最新的变化时间戳
  • time() - ...:用当前时间减去最新变化时间戳,得到距离上次增长的时间差

获取每个id的总计数值

直接对计数器按id求和即可,这会返回每个id的累计任务数:

sum by (id) (my_service_counter{status="success"})

原查询的问题分析

你之前的写法错误在于先执行add by (id)得到瞬时向量,再试图给它加上[5m]范围——PromQL不支持对瞬时向量直接添加范围。正确的逻辑是先对原始的范围向量做聚合,这样才能得到每个id对应的范围序列,供changes()处理。

内容的提问来源于stack exchange,提问作者Divyanshu Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:27:10