二元算术运算符
+
加法-
减法*
乘法/
除法%
模^
幂等
https://prometheus.io/docs/prometheus/latest/querying/functions/
查询过去 5 分钟的****平均请求持续时间****:(平均的时间/平均的数量)
1 | rate(demo_api_request_duration_seconds_sum{job="demo"}[5m]) |
一对一
1 | # TYPE foo gauge |
*对于向量左边的每一个元素,操作符都会尝试在右边里面找到一个匹配的元素*,*匹配是通过比较所有的标签来完成的,没有匹配的元素会被丢弃*
foo{} + bar{}
{color=”red”, size=”small”} 9 #4+5
bar{color=”blue”, size=”large”} 23 # 16+7
****使用 on
或者 ignoring
修饰符来指定用于匹配的标签进行计算****,基于该标签(on (color)
)或者忽略其他的标签(ignoring (size)
)进行计算
foo{} + on(color) bar{}
{color=”red”} 9
{color=”green”} 10
{color=”blue”} 23
一对多
*必须使用 group 修饰符*:group_left
或者 group_right
来确定哪一个向量具有更高的基数(充当多
的角色)(也就是说那个元素是多的那一边,左侧元素比较多需要添加group left,右侧元素多就是group right,让其明确指定一下,*注意是基于标签维度的多少*)除了 on()
之外,还可以使用相反的 ignoring()
修饰符,可以用来将一些标签维度从二元运算操作匹配中忽略掉,如果在操作符的右侧有额外的维度,则应该使用 group_right
(表示右边的向量具有更高的基数)修饰符。
1 | rate(demo_cpu_usage_seconds_total{job="demo"}[5m]) |