常用查詢:
https://songjiayang.gitbooks.io/prometheus/content/exporter/nodeexporter_query.html
group by 操作
sum/avg/...(子表達式) by (用於分組的字段1, 用於分組的字段2...)
或
sum/avg/... by (用於分組的字段1, 用於分組的字段2...) (子表達式)
例如
CPU 使用率
100 - (avg by (instance) (irate(node_cpu{instance="xxx", mode="idle"}[5m])) * 100)
CPU 各 mode 占比率
avg by (instance, mode) (irate(node_cpu{instance="xxx"}[5m])) * 100
rate和irate操作符:計算Counter指標增長率
我們知道Counter類型的監控指標其特點是只增不減,在沒有發生重置(如服務器重啟,應用重啟)的情況下其樣本值應該是不斷增大的。為了能夠更直觀的表示樣本數據的變化劇烈情況,需要計算樣本的增長速率。
如下圖所示,樣本增長率反映出了樣本變化的劇烈程度:
increase(v range-vector)函數是PromQL中提供的眾多內置函數之一。其中參數v是一個區間向量,increase函數獲取區間向量中的第一個后最后一個樣本並返回其增長量。因此,可以通過以下表達式Counter類型指標的增長率:
這里通過node_cpu[2m]獲取時間序列最近兩分鍾的所有樣本,increase計算出最近兩分鍾的增長量,最后除以時間120秒得到node_cpu樣本在最近兩分鍾的平均增長率。並且這個值也近似於主機節點最近兩分鍾內的平均CPU使用率。
除了使用increase函數以外,PromQL中還直接內置了rate(v range-vector)函數,rate函數可以直接計算區間向量v在時間窗口內平均增長速率。因此,通過以下表達式可以得到與increase函數相同的結果:
需要注意的是使用rate或者increase函數去計算樣本的平均增長速率,容易陷入“長尾問題”當中,其無法反應在時間窗口內樣本數據的突發變化。 例如,對於主機而言在2分鍾的時間窗口內,可能在某一個由於訪問量或者其它問題導致CPU占用100%的情況,但是通過計算在時間窗口內的平均增長率卻無法反應出該問題。
為了解決該問題,PromQL提供了另外一個靈敏度更高的函數irate(v range-vector)。irate同樣用於計算區間向量的計算率,但是其反應出的是瞬時增長率。irate函數是通過區間向量中最后兩個兩本數據來計算區間向量的增長速率。這種方式可以避免在時間窗口范圍內的“長尾問題”,並且體現出更好的靈敏度,通過irate函數繪制的圖標能夠更好的反應樣本數據的瞬時變化狀態。
irate函數相比於rate函數提供了更高的靈敏度,不過當需要分析長期趨勢或者在告警規則中,irate的這種靈敏度反而容易造成干擾。因此在長期趨勢分析或者告警中更推薦使用rate函數。
