5

我正在寻找类似于 SQL 的 LEAST() 函数的东西。
由于存在二元运算符(以及定义明确的匹配行为),因此人们会期望也会有 min/max,但找不到这样的函数。

我知道使用正则表达式(即,min(__name__=~"a|b"))可以实现这一点,但如果可能的话,我希望避免这种黑客攻击。

4

2 回答 2

5

我很确定这是最有效的方法。如果你想避免正则表达式,你可以把它写成:

a < b or b

但以这种方式计算可能会更昂贵。(当然,除非您使用记录规则而不是min(a)直接使用记录规则min(b)。也许即使那样。您只需要自己进行基准测试。)

于 2019-05-06T15:14:00.677 回答
0

这里需要问的问题是如何比较两个向量?

标量具有可比性——但向量通常不具有可比性。如果你想比较它们,你必须定义可以衡量它们的数学指标。

需要有一组可比较的元素才能确定其中的最小值。这就是为什么minPrometheus 中的函数只有一个论点。这个论点实际上是一个可比较元素的列表。

例如你可以试试这个:

  1. 首先执行以下操作:
(count(up{squad=~"XYZ"}) by(env))

对我来说,结果集看起来像这样(更重要的是这些是可比较的):

{env="dev"}         61
{env="preprod"}     39
{env="prod"}        39

然后当我执行这个:

max((count(up{squad=~"XYZ"}) by(env)))

我得到结果:

{}              61

这是预期的。

以上将返回具有最多可访问实例的环境 - 因为在最大值之前我们进行了聚合(计数函数),它返回的标量值与其他标量值相当 - 它表示其他环境中的实例数。

于 2021-05-19T19:53:14.830 回答