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

如何在Prometheus录制规则中获取三个指标的最小值?

解决Prometheus录制规则取多指标最小值的问题

你之前用or的写法不对,因为PromQL里的or是逻辑或运算符,只要前面的指标有匹配的时间序列,就会直接返回,不会把三个指标的所有数据合并在一起,所以只能拿到第一个指标的结果。

要实现取三个指标的最小值,需要先把三个指标的时间序列合并成一个集合,再对每个label分组取最小。这里有两种可行的写法:

方法一:使用or on() group_left()合并序列

min by (label) (
  metric1{label!=""}
  or on(label) group_left() metric2{label!=""}
  or on(label) group_left() metric3{label!=""}
)

on(label)指定按label标签对齐序列,group_left()确保所有匹配的序列都被保留,不会因为标签完全匹配才合并。

方法二:使用union函数合并序列

min by (label) (
  union(
    metric1{label!=""},
    metric2{label!=""},
    metric3{label!=""}
  )
)

union()函数会直接合并三个指标的所有时间序列,相当于把它们放到同一个集合里,之后min by(label)就能对每个label对应的所有值取最小。

两种方法都能实现需求,因为你的三个指标返回值只有0、1、2,min运算符会正确提取每个label分组里的最小值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:22:40