Prometheus常用的函数

increase

increase函数:
用来针对counter数据类型,截取其中一段时间总的增量。

举个例子:

统计1分钟内,使用标签过滤器查看"10.0.0.211:9100"节点的第0颗CPU,空闲状态使用的总时间增量。

1
increase(node_cpu_seconds_total{instance="10.0.0.211:9100",mode="idle"}[1m])

image-20241122125610115

一分钟内空闲59s,CPU太闲了,压测一波

1
2
3
4
5
#1.安装压力测试工具
[root@elk02 ~]# yum install -y stress

#2.压力测试CPU
[root@elk03:1 ~]# stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10m

image-20241122130528444

sum

sum函数:
加和的作用。 (将下方图1所有结果累加,不分组)

举个例子:

统计1分钟内,使用标签过滤器查看所有节点的第0颗CPU,空闲状态使用的总时间增量,并将返回结果累加。

1
sum(increase(node_cpu_seconds_total{mode="idle",cpu='0'}[1m]))

image-20241122131145124

image-20241122131116002

by

by函数:
将数据进行分组,类似于MySQL的"GROUP BY"。

举个例子:

统计1分钟内,使用标签过滤器查看CPU空闲状态,并将结果进行累加,基于instance进行分组。

1
sum(increase(node_cpu_seconds_total{mode="idle",cpu='0'}[1m])) by (instance)

image-20241122131653295

rate

rate函数:
它的功能是按照设置的时间段,取counter在这个时间段中平均每秒的增量。
举个例子:

统计1分钟内,使用标签过滤器查看"10.0.0.212:9100"节点的第0颗CPU,空闲状态使用的每秒的增量。

1
rate(node_cpu_seconds_total{instance="10.0.0.212:9100",mode="idle",cpu='0'}[1m])

image-20241122132326591

increase和rate如何选择:
(1)对于采集数据频率较低的场景建议使用increase函数,因为使用rate函数可能会出现断点,比如针对硬盘容量监控。
(2)对于采集数据频率较高的场景建议使用rate函数,比如针对CPU,内存,网络流量等都是可以基于rate函数来采集等。

topk

topk函数:
取前几位的最高值,实际使用的时候一般会用该函数进行瞬时报警,而不是为了观察曲线图。

举个例子:
统计1分钟内,使用标签过滤器查看CPU,所有状态使用的每秒的增量,只查看前3个节点。

1
topk(3,rate(node_cpu_seconds_total{mode="idle"}[1m]))

image-20241122132911868

image-20241122133011958

count

count函数:
把数值符合条件的,输出数目进行累加加和。
比如说企业中有100台服务器,如果只有10台服务器CPU使用率高于80%时候是不需要报警的,但是数量超过70台时就需要报警了。

举个例子:
count(tcp_wait_conn > 500):
假设tcp_wait_conn是咱们自定义的KEY。
若TCP等待数量大于500的机器数量就判断条件为真。

1
2
3
#对统计的结果进行计数。

count(rate(node_cpu_seconds_total{cpu="0",mode="idle"}[1m]))

image-20241122133509836

7 其他函数

推荐阅读:
https://prometheus.io/docs/prometheus/latest/querying/functions/