[toc]
Prometheus的PromeQL查询语句
通过CPU简单认识PQL(PromeQL)
1 2 3 4
| node_cpu_seconds_total{job="dong tai fa xian",instance="10.0.0.11:9100"}
node_cpu_seconds_total{job="dong tai fa xian",cpu="0",mode="idle"}
|

1 2
| node_cpu_seconds_total{instance!="10.0.0.11:9100"}
|

1 2
| node_cpu_seconds_total{mode=~"i.*"}
|

1 2
| node_cpu_seconds_total{mode!~"i.*"}
|

运算符
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
=: 精确匹配 =~: 模糊匹配 !=: 不等于,取反 !~: 模糊匹配取反 >: 大于 <: 小于 >=: 大于等于 <=: 小于等于
sum(node_cpu_seconds_total{cpu="0",mode="idle"})
|

PQL数据类型
PromQL的表达式中支持以下四种数据类型
即时向量(Instant Vector)
- 特定或全部的时间序列集合上,具有相同时间戳的一组样本称为即时向量。
范围向量(Range Vector)
- 特定或全部的时间序列集合上,在指定的同一范围内的所有样本值。
标量(Scalar)
字符串(String)
- 支持使用单引号,双引号或反引号进行引用,但反引号中不会转移字符进行转义

Prometheus常用函数
increase 增量函数
1 2 3 4 5 6
| 在prometheus中是用来针对Counter这种持续增长的数值,截取其中的一段时间的增量。
increase(node_cpu_seconds_total[1m]) minute increase(node_cpu_seconds_total[1d]) day
|
sum 求和函数
1 2 3 4 5
| 顾名思义,主要是起到加和的作用
sum(increase(node_cpu_seconds_total{instance="10.0.0.11:9100",mode="idle"}[1m]))
|
by 分组函数
1 2 3 4 5
| 将数据进行分组,类似于MySQL的"group by"
sum(increase(node_cpu_seconds_total{mode="iowait"}[1m])) by(instance)
|
rate函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| rate函数: 它的功能是按照设置的一个时间段,取counter在这个时间段中的平均每秒的增量。因此是专门搭配counter类型数据使用的函数
举个例子: rate(node_cpu_seconds_total[1m]): 获取CPU总使用时间在1分钟内的增加的总量并除以60秒,计算的是每秒的增量。 rate(node_network_receive_bytes_total[1m]): 获取一分钟内网络接收的总量。 查看的时间越短,某一瞬间的突起或降低在成图的时候会体现的更细致,更铭感。 rate(node_network_receive_bytes_total[20m]) 获取二十分钟内网络接收的总量。 查看的时间越长,那么当发生瞬间的突起或降低时候,会显得平缓一些,因为取得时间段越长会把波峰波谷都给平均消下去了 温馨提示: 在实际工作中,我们取监控频率为1分钟还是5分钟这取决与我们对于监控数据的敏感程度来挑选。
rate(node_cpu_seconds_total[1m])
|
topk函数
1 2 3 4 5 6 7 8 9 10 11 12 13
| 取前几位的最高值。实际使用的时候一般会用该函数进行瞬时报警,而不是为了观察曲线图。
举个例子: topk(3,rate(node_cpu_seconds_total[1m])): 获取CPU总使用时间在1分钟内的增加的总量并除以60秒,计算的是每秒的数量。并只查看top3。
温馨提示: 如下图所示,我们通常使用topk只会关注"Console"中的瞬时结果,不太会关心Graph的出图效果,因为关注他并没有太大意义,存在太多的断点啦! 下图之所以会出现中断的情况,是因为在20分钟内这一刻的数据其并没有排进top3,自然就会出现断点的状况。
topk(3,increase(node_cpu_seconds_total[1m]))
|
count函数
1 2 3 4 5 6 7 8 9 10 11 12
| count函数: 把数值符合条件的,输出数目进行累计加和。一般用它进行一些模糊的监控判断。 比如说企业中有100台服务器,那么只有10台服务器CPU使用率高于80%的时候,这个时候不需要报警,当符合80%CPU的服务器数量超过70台的时候那么就触发报警。
举个例子: count(zls_tcp_wait_conn > 500): 我们假设zls_tcp_wait_conn是咱们自定义的KEY,上述案例是找出当前(或者历史的)当前TCP等待数大于500的机器数量。
count(node_cpu_seconds_total{cpu="1"})
count(node_cpu_seconds_total{cpu="0",mode="idle"} > 90)
|
运算示例
计算各节点的CPU的总使用率,参考公式: “100% - (CPU空 闲时间/总时间)”
1
| (1 - sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total[1m])) by(instance)) * 100
|