在promQL中,如何将一个即时向量的值与另一个即时向量的值最大化



是否有一种方法可以通过传递包含每个系列相应最大值的即时矢量来实现最大夹紧?

在promQL中,使用函数clamp_max,可以用标量值钳住即时向量的值,但是如果传递的是即时向量而不是标量,则会得到错误

在瞬时向量上使用函数scalar()仅在瞬时向量只包含一个值

时有效

给定具有相同标签的即时向量v和max_v,这使得技巧

(v <= bool max_v) * v + (v > bool max_v) * max_v

当使用bool后的比较运算符时,它们的表达式将相应地返回0 (false)或1 (true)。

考虑整个表达式,对于每个序列,只有一个项(v <= bool max_v)(v > bool max_v)可以是true,因此对于每个序列,它将返回v的值或max_v的最大值。

max_v序列夹紧v时间序列最简单的解决方案如下:

(v < max_v) or max_v

这个查询的工作方式如下:

  1. v < max_v只留下小于max_v的值。
  2. (...) or max_vmax_v的值填补步骤1的空白。

不那么俗套的方法:

考虑v为初始度量,max_v为最大箝位向量。
可以使用andor操作符的组合来实现瞬时矢量的箝位:

v and (v < max_v) or max_v

对于每个时隙,如果v的值小于max_v的值,则取max_v的值。