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

如何编写PromQL查询,检测gauge近1分钟首次上报Completed状态?

可行的PromQL实现方案

要实现“指定时间戳下,某namespace近1分钟内开始上报phase="Completed"的task_info指标则返回1,且保留namespace标签”的需求,可以通过判断当前窗口内存在上报、且1分钟前的窗口内无上报的逻辑来实现,具体有两种写法:

写法一:基于present_over_time与absent_over_time

present_over_time(task_info{phase="Completed"}[1m])
and
absent_over_time(task_info{phase="Completed"}[1m] offset 1m)

逻辑说明:

  • present_over_time(task_info{phase="Completed"}[1m]):检查过去1分钟内(从指定时间戳往前推1分钟),该时间序列有上报样本则返回1,无则返回0。
  • absent_over_time(task_info{phase="Completed"}[1m] offset 1m):通过offset 1m将检查窗口往前偏移1分钟,即检查[指定时间戳-2m, 指定时间戳-1m]窗口内无上报样本则返回1,有则返回0。
  • 两者通过and逻辑组合,仅保留同时满足“近1分钟有上报”且“1分钟前的窗口无上报”的namespace,最终返回值为1,且保留原有的namespace标签。

写法二:基于count_over_time(直观计数判断)

count_over_time(task_info{phase="Completed"}[1m]) > 0
and
count_over_time(task_info{phase="Completed"}[1m] offset 1m) == 0

逻辑说明:

  • count_over_time(...) > 0:统计过去1分钟内的上报次数,大于0说明近1分钟有上报。
  • count_over_time(...) offset 1m == 0:统计1分钟前的1分钟窗口内的上报次数,等于0说明该窗口无上报。
  • 通过and组合条件,筛选出符合要求的namespace,返回值为1,保留namespace标签。

多namespace聚合适配

如果需要按namespace维度聚合(比如同一个namespace下有多个任务,只要有一个任务在近1分钟内完成就返回该namespace的结果),可以加入by (namespace)聚合:

sum by (namespace) (present_over_time(task_info{phase="Completed"}[1m]))
*
sum by (namespace) (absent_over_time(task_info{phase="Completed"}[1m] offset 1m))

逻辑说明:

  • sum by (namespace)将同namespace下的所有任务结果聚合:只要有一个任务满足“近1分钟有上报”,第一个sum结果就大于0;只要namespace在1分钟前的窗口内无任何任务上报,第二个sum结果就为1。
  • 乘法运算会将两个条件同时满足的namespace结果保留为1,不符合的则为0。

内容的提问来源于stack exchange,提问作者Kevin Qian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:01:25