OPERATORS
Binary operators
Prometheus的查询语言支持基本的逻辑和算术运算符,用于两个即时向量之间的操作,匹配行为可以修改.
Arithmetic binary operators
Prometheus中存在以下二元算术运算符:
+
(加法)-
(减法)*
(乘法)/
(除法)%
(modulo)^
(power/exponentiation)
二元运算符定义在标量/标量,矢量/标量和矢量/矢量值对之间。
在两个标量之间, 行为是显而易见的:它们评估另一个标量,这是运算符应用于两个标量操作数的结果。
在即时向量和标量之间,运算符应用于向量中每个数据样本的值。例如。如果时间序列即时向量乘以2,则结果是另一个向量,其中原始向量的每个样本值乘以2。
在两个即时向量之间,二进制算术运算符应用于左侧矢量中的每个条目及其右侧矢量中的匹配元素。结果将传播到结果向量中,并删除度量标准名称。可以找到右侧向量中没有匹配条目的条目不是结果的一部分。
Comparison binary operators
Prometheus中存在以下二元比较运算符:
==
(等于)!=
(不等于)>
(大于)<
(l小于)>=
(大于等于)<=
(小于等于)
比较运算符定义在标量/标量,矢量/标量和矢量/矢量值对之间。默认情况下他们过滤。它们的行为可以通过bool
在运算符之后提供来修改,该运算符将返回0
或返回1
值而不是过滤。
在两个标量之间,bool
必须提供修饰符,这些运算符会产生另一个标量,即0
(false
)或1
(true
),具体取决于比较结果。
在即时向量和标量之间,这些运算符应用于向量中的每个数据样本的值,以及false
从结果向量中删除比较结果的向量元素。如果bool
提供了修饰符,则将被删除的向量元素具有值, 0
并且将保留的向量元素具有该值1
。
在两个即时向量之间,这些运算符默认表现为过滤器,应用于匹配条目。表达式不为true或在表达式的另一侧找不到匹配项的向量元素将从结果中删除,而其他元素将传播到具有其原始(左侧)度量标准名称的结果向量中标签值。如果bool
提供了修改器,则将被删除的0
向量元素具有值,并且将保留的向量元素具有1
带有左侧标签值的值。
Logical/set binary operators
这些逻辑/集合二元运算符仅在即时向量之间定义:
and
(交集)or
(并集)unless
(非)
vector1 and vector2
导致一个向量组成的元素, vector1
其中有元素vector2
与精确匹配的标签集。其他元素被删除。度量标准名称和值从左侧向量转移。
vector1 or vector2
导致包含所有原始元素(标签集+值)的向量,vector1
并且vector2
其中所有元素都没有匹配的标签集vector1
。
vector1 unless vector2
导致一个向量组成的元素, vector1
其中没有元素vector2
与精确匹配的标签集。两个向量中的所有匹配元素都被删除。
聚合运算符
Prometheus支持以下内置聚合运算符,这些运算符可用于聚合单个即时向量的元素,从而生成具有聚合值的较少元素的新向量:
sum
(计算维度总和)min
(选择最小值)max
(选择最大值)avg
(计算平均值)stddev
(计算维度上的标准差)stdvar
(计算维度上的标准差异)count
(计算向量中的元素个数)count_values
(计算具有相同值的元素数)bottomk
(样本值最小的k个元素)topk
(按样本值计算的最大k个元素)quantile
(calculate φ-quantile (0 ≤ φ ≤ 1) over dimensions)
二元运算符优先级
以下列表显示了Prometheus中二进制运算符的优先级,从最高到最低。
^
*
,/
,%
+
,-
==
,!=
,<=
,<
,>=
,>
and
,unless
or
具有相同优先级的运算符是左关联的。例如, 2 * 3 % 2
相当于(2 * 3) % 2
。但是^
是正确的关联,所以2 ^ 3 ^ 2
相当于2 ^ (3 ^ 2)
。