我正在寻找类似于SQL的LEAST()函数的内容。
由于存在二进制运算符(以及明确定义的匹配行为),因此人们期望也会有最小/最大,但找不到此类函数。
我知道使用正则表达式(即min(__name__=~"a|b")
)是可以实现的,但是如果可能的话,希望避免此类黑客入侵。
答案 0 :(得分:0)
我很确定这是最有效的方法。如果要避免使用正则表达式,可以将其编写为:
a < b or b
但是用这种方法计算可能会更昂贵。 (当然,除非您直接使用记录规则,而不是直接使用min(a)
和min(b)
。也许即使那样,您也必须自己对其进行基准测试。)
答案 1 :(得分:0)
这里需要问的问题是如何比较两个向量?
标量是可比的 - 但向量一般不是。 如果您想比较它们,您必须定义可以衡量它们的数学指标。
一个人需要有一组可比较的元素来确定它们中的最小值。
这就是为什么 Prometheus 中的 min
函数只有一个参数而不是更多。这个参数实际上是一个可比较元素的列表。
例如你可以试试这个:
(count(up{squad=~"XYZ"}) by(env))
对我来说,结果集是这样的(更重要的是它们是可比的):
{env="dev"} 61
{env="preprod"} 39
{env="prod"} 39
然后当我执行这个:
max((count(up{squad=~"XYZ"}) by(env)))
我得到了结果:
{} 61
这是预期的。
以上将返回具有最多可达实例的环境 - 因为在最大值之前我们做了聚合(计数函数),它返回与其他标量值相当的标量值 - 代表其他环境中的实例数。