increase()
increase(v range-vector)
函數獲取區間向量中的第一個和最后一個樣本並返回其增長量,它會在單調性發生變化時(如由於采樣目標重啟引起的計數器復位)自動中斷。
由於這個值被外推到指定的整個時間范圍,所以即使樣本值都是整數,你仍然可能會得到一個非整數值,如果除以一定時間就可以獲取該時間內的平均增長率。
例如,以下表達式返回區間向量中每個時間序列過去 5 分鍾內 HTTP 請求數的增長數:
increase(http_requests_total{job="apiserver"}[5m])
該函數配合counter數據類型使用,它的返回值類型只能是計數器類型。
rate()
rate(v range-vector)
函數可以直接計算區間向量 v 在時間窗口內平均每秒增長速率,它會在單調性發生變化時(如由於采樣目標重啟引起的計數器復位)自動中斷。
該函數配合counter數據類型使用,它的返回值類型只能用計數器,在長期趨勢分析或者告警中推薦使用這個函數。該函數的返回結果不帶有度量指標,只有標簽列表。
例如,以下表達式返回區間向量中每個時間序列過去 5 分鍾內 HTTP 請求數的每秒增長率:
rate(http_requests_total[5m])
結果: {code="200",handler="label_values",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="query_range",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="prometheus",instance="120.77.65.193:9090",job="prometheus",method="get"} 0.2 ...
[info] 注意
當將 rate()
函數與聚合運算符(例如 sum()
)或隨時間聚合的函數(任何以 _over_time
結尾的函數)一起使用時,必須先執行 rate 函數,然后再進行聚合操作,
否則當采樣目標重新啟動時 rate() 無法檢測到計數器是否被重置。
irate()
irate(v range-vector)
函數用於計算區間向量的增長率,但是其反應出的是瞬時增長率。
irate 函數是通過區間向量中最后兩個兩本數據來計算區間向量的增長速率,它會在單調性發生變化時(如由於采樣目標重啟引起的計數器復位)自動中斷。
這種方式可以避免在時間窗口范圍內的“長尾問題”,並且體現出更好的靈敏度,通過irate函數繪制的圖標能夠更好的反應樣本數據的瞬時變化狀態。
例如,以下表達式返回區間向量中每個時間序列過去 5 分鍾內最后兩個樣本數據的 HTTP 請求數的增長率:
irate(http_requests_total{job="api-server"}[5m])
irate 只能用於繪制快速變化的計數器,在長期趨勢分析或者告警中更推薦使用 rate 函數。因為使用 irate 函數時,速率的簡短變化會重置 FOR
語句,形成的圖形有很多波峰,難以閱讀。
[info] 注意
當將 irate()
函數與聚合運算符(例如 sum()
)或隨時間聚合的函數(任何以 _over_time
結尾的函數)一起使用時,必須先執行 irate 函數,然后再進行聚合操作,
否則當采樣目標重新啟動時 irate() 無法檢測到計數器是否被重置。
delta()
delta(v range-vector)
的參數是一個區間向量,返回一個瞬時向量。它計算一個區間向量 v 的第一個元素和最后一個元素之間的差值。
由於這個值被外推到指定的整個時間范圍,所以即使樣本值都是整數,你仍然可能會得到一個非整數值。
例如,下面的例子返回過去兩小時的 CPU 溫度差:
delta(cpu_temp_celsius{host="zeus"}[2h])
該函數一般只用在 Gauge 類型的時間序列上。
計算Counter指標增長率
我們知道Counter類型的監控指標其特點是只增不減,在沒有發生重置(如服務器重啟,應用重啟)的情況下其樣本值應該是不斷增大的。為了能夠更直觀的表示樣本數據的變化劇烈情況,需要計算樣本的增長速率。
如下圖所示,樣本增長率反映出了樣本變化的劇烈程度:
可以通過以下表達式計算Counter類型指標的增長率:
#下面兩句話取出來的結果是一樣的,只不過rate()是直接算出區間向量的平均速率,而increase()你要自己去除於秒數。
increase(node_cpu_seconds_total[2m]) / 120
rate(node_cpu_seconds_total[2m])
increase函數:這里通過node_cpu_seconds_total[2m]獲取時間序列最近兩分鍾的所有樣本,increase計算出最近兩分鍾的增長量,
最后除以時間120秒得到node_cpu_seconds_total樣本在最近兩分鍾的平均每秒增長率。並且這個值也近似於主機節點最近兩分鍾內的平均CPU使用率。
rate()函數:該函數配合counter類型數據使用,取counter在這個時間段中的平均每秒增量。比方CPU在2分鍾增長了200,那么結果就是200/120。
引用: