prometheus 4 函式計算公式

2022-04-29 03:42:11 字數 2736 閱讀 4160

作者再次宣告:作者只是乙個很摳腳的it工作者,希望可以跟那些提供原創的老師們學習

原文:大公尺運維

目錄increase()

sum( )

by()

topk()

count()

標籤匹配

%cpu(s): 2.2 us, 1.9 sy, 0.0 ni, 95.5 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
cpu的使用率 = (所有非空閒狀態的cpu使用時間總和 )/(所有狀態cpu時間的總和)

(1-((sum(increase(node_cpu_seconds_total[5m])) by (instance)) / (sum(increase(node_cpu_seconds_total[5m])) by (instance)))) * 100

(sum(increase(node_cpu_seconds_total[5m])) by (instance) / sum(increase(node_cpu_seconds_total[5m])) by (instance) )* 100

rate函式,rate用來計算兩個 間隔時間內發生的變化率(一段時間內平均每秒的增量)。

專門用來搭配counters型別的資料,rate(指標名[時間間隔])

比如 檢視1分鐘內非idle的cpu使用率

rate(node_cpu_seconds_total[1m])
irate和rate都會用於計算某個指標在一定時間間隔內的變化速率。但是它們的計算方法有所不同:irate取的是在指定時間範圍內的最近兩個資料點來算速率,而rate會取指定時間範圍內所有資料點,算出一組速率,然後取平均值作為結果。

所以官網文件說:irate適合快速變化的計數器(counter),而rate適合緩慢變化的計數器(counter)。

根據以上演算法我們也可以理解,對於快速變化的計數器,如果使用rate,因為使用了平均值,很容易把峰值削平。除非我們把時間間隔設定得足夠小,就能夠減弱這種效應。

相同函式,擷取不同時間的圖形分析

rate(node_network_receive_bytes_total[1m])
1分鐘內 增加了 1000bytes (假設)

5分鐘內 增加了 5000bytes (假設)

會把1000bytes除以 1m*60秒,=~16bytes/s 就是這樣計算出在這1分鐘內,平均每秒鐘增加 16bytes

把5分鐘內的增量 除以 5m*60s ,5分鐘的增量 假如是 5000 , 那麼除以300 以後 也還是約等於 =~ 16bytes/s

以上兩種時間段的取法,都是假設成⼀種平均的取法,這是一種假設的理想狀態,事實上生產環境 網路資料接收量 可不是這麼平均的。有可能在 第一分鐘 增加了 1000, 到 第二分鐘 就變成增加了2500….

所以 rate(1m) 這樣的取值方法比起 rate(5m) ,因為它取的時間段短,所以 任何某⼀瞬間的凸起或者降低在成圖的時候會體現的更細緻 更敏感而rate(5m)把整個5分鐘內的都⼀起平均了,那麼當發生瞬時凸起的時候,會顯得圖平緩了⼀些 (因為 取的時間段長 把波峰波谷都給平均消下去了)

increase 函式 在promethes中,是用來針對counter 這種持續增長的數值,擷取其中⼀段時間的 增量(一段時間內的總增量)

increase(node_cpu_seconds_total[1m])=》 這樣 就獲取了 cpu總使用時間在1分鐘內的增量

比如上面得到各個指標的cpu使用率,如果我想計算總的cpu使用率怎麼辦?

sum( ) 就如其字⾯意思⼀樣 起到value 加合的作用 sum( increase(node_cpu_seconds_total[1m]) ) 外⾯套⽤⼀個sum 即可把所有核數值加合

問題1:所有機器的cpu 也全都加到⼀起了,變成 伺服器集群 總cpu平均值了?

by (instance) 這個函式 可以把 sum加合到⼀起的數值 按照指定的⼀個方式進行一層的 拆分

instance 代表的是 機器名

意思就是說 把sum函式中 伺服器加合的這個糗事 再給它強行拆分出來

sum(increase(node_cpu_seconds_total[1m])) by (instance)
sum() by (cluster_name)可以幫我們實現集群加合併分三條曲線輸出了,順帶一提的是 (cluster_name) 這個標籤,預設node_exporter是沒有辦法提供的,node_exporter只能按照不同的機器名去劃分。如果希望支援cluster_name 我們需要自行定義標籤。

topk() 函式的定義是:取前面x位的最高值,最簡單理解就是數學的top,當我們有很多伺服器我們想要獲取某個key的資料排在前3位的伺服器。

gauge型別使用方式:

topk(3,key)
counter型別使用方式

topk(3,rate(key[1m]))
注意:此種函式獲得資料並不是很適用圖形化展示,實際使用的時候 ⼀般用topk()函式 進行瞬時報警而不是為了觀察曲線圖

定義: 把數值符合條件的 輸出數目進行加合

例如:找出當前(或者歷史的)當數值數大於2000的機器數量

更多函式:

模糊匹配 =~

模糊不匹配 !~

prometheus函式介紹

gauge型別的資料 屬於隨機變化數值,並不像counter那樣 是 持續增長 increase 函式 在promethes中,是 來 針對counter 這種持續增 長的數值,擷取其中 段時間的增量 increase node cpu 1m 這樣 就獲取了 cpu總使 時間 在1分鐘內的增量,得到...

Prometheus 查詢 常用函式

原文 1 rate函式是專門搭配 counter型別資料使用的函式。它的功能是按照設定乙個時間段,取 counter在該時間段中的平均每秒的增量 rate v range vector 計算範圍向量中時間序列的每秒平均增加速率。單調性中斷 例如由於目標重啟而導致的計數器重置 會自動調整。同樣,計算會...

4 Prometheus概念 指標型別

prometheus客戶端庫提供了4種核心指標型別。當前僅在客戶端庫 以啟用針對特定型別的使用量身定製的api 和有線協議中進行區分。prometheus server尚未使用型別資訊,而是將所有資料展平作為未鍵入的時間序列。將來可能會改變。counter是乙個累積指標,代表乙個單調遞增的計數器,其...