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

Prometheus:按label分组双指标并统计符合条件的集合数

统计满足所有实例值与预期值一致的集合数量(PromQL实现)

实现思路

要统计符合条件的set_id数量,需分三步完成:

  1. 关联指标并计算差值:将每个levels时间序列与对应set_id的levels_expected关联,计算两者差值的绝对值,统一捕捉大于/小于预期的情况。
  2. 按集合分组校验:对每个set_id,取该集合下所有实例差值绝对值的最大值——若最大值为0,说明该集合下所有实例的levels值都等于对应预期值。
  3. 统计符合条件的集合数:筛选出最大值为0的set_id,统计其总数量。

最终PromQL查询语句

count by() (
  max by(set_id) (
    abs(levels - on(set_id) group_left() levels_expected)
  ) == 0
)

语句拆解

  • levels - on(set_id) group_left() levels_expected:通过on(set_id)匹配两个指标,group_left()确保每个带instance_id的levels序列都能关联到对应set_id的levels_expected,计算两者差值。
  • abs(...):将差值转为绝对值,消除正负差异的影响。
  • max by(set_id):按set_id分组,取每组内所有实例差值绝对值的最大值——只要有一个实例不符合条件,最大值就会大于0。
  • ... == 0:筛选出所有差值最大值为0的set_id,即所有实例均符合条件的集合。
  • count by():统计这些符合条件的set_id的总数量。

示例验证

针对你提供的示例数据:

  • set_id=1:存在实例值不等于预期,差值最大值为1 → 不符合
  • set_id=2:所有实例值等于预期,差值最大值为0 → 符合
  • set_id=3:存在实例值不等于预期,差值最大值为1 → 不符合
  • set_id=4:所有实例值等于预期,差值最大值为0 → 符合

最终查询返回结果为2,与预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:15:05