Prometheus 查询操作符(一) 二进制操作符
Prometheus 的查询语言支持基本的逻辑和算术运算符。
计算二元操作符
普罗米修斯中存在以下二进制运算符:
+ (加)
-(减)
*(乘法)
/(除法)
%(取余)
^(取幂)
二元算术运算符定义在标量/标量、向量/标量和向量/向量值对之间。
在两个标量之间,行为是明显的,它们计算到另一个标量,该标量是应用于两个标量操作数的操作符的结果。
在瞬时向量和标量之间,该运算符应用于向量中的每个数据样本的值。例如,如果一个时间序列瞬时向量乘以 2,则结果是另一个向量,其中原始向量的每个样本值都乘以 2。指标名称将被删除。
在两个瞬时向量之间,对左边向量中的每一项和右边向量中的匹配元素应用一个二元算术运算符。结果被传播到结果向量中,分组标签成为输出标签集。指标名称将被删除。在右边向量中找不到匹配条目的条目不属于结果的一部分。
比较二元操作符
Prometheus 中存在以下二进制比较运算符:
== (等于)
!= (不等于)
> (大于)
< (小于)
>= (大于等于)
<= (小于等于)
比较运算符定义在标量/标量、向量/标量和向量/向量值对之间。默认情况下,它们进行过滤。它们的行为可以通过在操作符后提供 bool 来修改,这将返回值 0 或 1,而不是过滤。
在两个标量之间,必须提供 bool 修饰符,这些操作符会产生另一个标量,根据比较结果,标量要么为 0 (false),要么为 1 (true)。
在瞬时向量和标量之间,这些操作符被应用到向量中的每个数据样本的值,而比较结果为假的向量元素将从结果向量中删除。如果提供了 bool 修饰符,则要删除的向量元素的值为 0,而要保留的向量元素的值为 1。如果提供了 bool 修饰符,则删除指标名称。
在两个瞬时向量之间,这些操作符默认情况下作为过滤器,应用于匹配的条目。表达式不为真或在表达式的另一端没有找到匹配的向量元素将从结果中删除,而其他元素将传播到结果向量中,分组标签将成为输出标签集。如果提供了 bool 修饰符,那么将被删除的向量元素的值为 0,而将被保留的向量元素的值为 1,分组标签再次成为输出标签集。如果提供了 bool 修饰符,则删除指标名称。
逻辑/二元操作符
这些逻辑/集合二元运算符只在瞬时向量之间定义:
and (与)
or (或)
unless (非)
Vector1 和 vector2 的结果是一个由 Vector1 中的元素组成的向量,而 vector2 中的元素具有完全匹配的标签集。其他元素被删除。指标名称和值是从左边的向量传递过来的。
Vector1 或 vector2 的结果是包含 Vector1 的所有原始元素(标签集+值)和 vector2 中没有匹配标签集的所有元素的 vector。
除非 vector2 的结果是由 Vector1 的元素组成的向量,而在 vector2 中没有完全匹配的标签集。删除两个向量中所有匹配的元素。
版权声明: 本文为 InfoQ 作者【耳东@Erdong】的原创文章。
原文链接:【http://xie.infoq.cn/article/ef514ad3e14532cf913c73016】。未经作者许可,禁止转载。
评论