參考: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/