参考:https://blog.csdn.net/chuchen4441/article/details/100756213
rate函数(速率函数)
rate() 函数是专门搭配counter数据类型使用函数,功能是取counter在这个时间段中平均每秒的增量
1 获取网卡1m每秒流量平均(此时是有多少网卡将会显示多少网卡的流量)
表达式
rate(node_network_receive_bytes_total[1m])
2)只看eth0网卡1m每秒流量平均(即所有服务器eth0)
表达式
rate(node_network_receive_bytes_total{device="eth0"}[1m])
3) 只看莫一台服务器eth0网卡1m每秒流量平均 (可以通过,instance,job等修饰进行精确匹配)
表达式
rate(node_network_receive_bytes_total{device="eth0",instance="jira-old",job="jira-xxxx"}[1m])
4 查看一组相同服务器eth0 1m每秒流量平均
表达式
rate(node_network_receive_bytes_total{device="eth0",instance=~"jira.*"}[1m])
5) 查看一组服务器eth0 1m每秒流量平均和
表达式
sum(rate(node_network_receive_bytes_total{device="eth0",instance=~"jira.*"}[1m]))
increase函数
increase() 函数表示某段时间内数据的增量
rate() 函数则表示某段时间内数据的平均值
两个函数如何选取使用?
当我们获取数据比较精细的时候 类似于1m取样推荐使用rate()
当我们获取数据比较粗糙的时候 类似于5m,10m甚至更长时间取样推荐使用increase()
表达式示例
increase(node_network_receive_bytes_total{device="eth0"}[1m])
sum函数
sum()函数就是求和函数前面已经说过,注意点是当你使用sum后是将所有的监控的服务器的值进行取和,所以当我们只看某一台时需要进行拆分
拆分常用方法: 1 by increase()
2 by (cluster_name) 属于自定义标签不是标准标签,我们可以手动将不痛功能的服务器进行分组展示
表达式示例
sum(rate(node_network_receive_bytes_total{device="eth0"}[1m]))
topk函数
topk() 函数的定义是:取前面x位的最高值,最简单理解就是数学的top3 ,当我们有很多服务器我们想要获取某个key的数据排在前3位的服务器。
Gauge类型使用方式:
topk(3,key)
Counter类型使用方式
topk(3,rate(key[1m]))
注意:此种函数获得数据并不是很适用图形化展示
count函数
count() 是找出当前或者历史数据中某个key的数值大于或小于某个值的统计
表达式示例
count(node_netstat_Tcp_CurrEstab >180)
irate函数
irate(v range-vector)
计算范围向量中时间序列的每秒即时增长率。这基于最后两个数据点。单调性中断(例如由于目标重启而导致的计数器重置)会自动调整
表达示例 5m http请求的每秒速率
irate(http_requests_total{job="api-server"}[5m])
irate
只应在绘制易失性快速移动计数器时使用。使用rate
警报和缓慢移动的柜台,因为在房价短暂变化可以重设FOR
条款和图表完全由罕见尖峰难以阅读。
注意,当irate()
与 聚合运算符(例如sum()
)或随时间聚合的函数(以任何结尾的函数_over_time
)组合时,总是先取irate()
第一个,然后聚合。否则irate()
在目标重启时无法检测到计数器重置。
更多函数请参考官方文档:
https://prometheus.io/docs/prometheus/latest/querying/functions/