promethus PromQL

二元算术运算符

  • + 加法
  • - 减法
  • * 乘法
  • / 除法
  • %
  • ^ 幂等

https://prometheus.io/docs/prometheus/latest/querying/functions/

查询过去 5 分钟的****平均请求持续时间****:(平均的时间/平均的数量)

1
2
3
rate(demo_api_request_duration_seconds_sum{job="demo"}[5m])
/
rate(demo_api_request_duration_seconds_count{job="demo"}[5m])

一对一

1
2
3
4
5
6
7
8
# TYPE foo gauge
foo{color="red", size="small"} 4
foo{color="green", size="medium"} 8
foo{color="blue", size="large"} 16
# TYPE bar gauge
bar{color="green", size="xlarge"} 2
bar{color="blue", size="large"} 7
bar{color="red", size="small"} 5

*对于向量左边的每一个元素,操作符都会尝试在右边里面找到一个匹配的元素**匹配是通过比较所有的标签来完成的,没有匹配的元素会被丢弃*

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
2
3
rate(demo_cpu_usage_seconds_total{job="demo"}[5m])
/ ignoring(mode) group_left
demo_num_cpus{job="demo"}
点击打赏
文章目录
  1. 1. 二元算术运算符
  2. 2. 一对一
  3. 3. 一对多
载入天数...载入时分秒... ,