1. 程式人生 > 其它 >[轉]Prometheus核心概念:一圖瞭解瞬時向量Instant vector和區間向量Range vector的區別

[轉]Prometheus核心概念:一圖瞭解瞬時向量Instant vector和區間向量Range vector的區別

原文:https://blog.csdn.net/hugo_lei/article/details/113400270

--------------------------

1 背景
我們在查詢Prometheus的時候,通常有兩種方式,一種是查瞬時的Metric取樣資料,一種是查一段時間範圍內的Metric取樣資料。

如果對這兩種查詢方式理解不到位,結果往往是對PromQL的一些內建函式的使用是錯誤的,或者查詢的結果並不是自己預期的那樣。

那都是查Metric取樣資料,查詢瞬時和查詢一段時間範圍內這兩種方式有什麼區別呢?

2 圖解Metric和取樣

Prometheus和Exporter的關係
在上一篇文章Prometheus原始碼分析:基於Go Client自定義的Exporter,是如何在Local儲存Metrics的?中,我們介紹了Exporter是如何在Local儲存Metric的。

本質是將Metric放在本地的Map中,然後等待Prometheus服務端來週期性地Pull。

3 從Prometheus服務端的視角來看Metric取樣

Prometheus對target的Metric進行取樣
Prometheus會週期性的對Exporter的target進行PULL。

例如:在時間T1,Prometheus訪問target,取樣到的Metric資訊是:Metric01=Vt1

例如:在時間T2,Prometheus訪問target,取樣到的Metric資訊是:Metric01=Vt2 Metric02=Vt2

上述示例說明,Metric01在T1時刻的值是Vt1,在T2時刻的值是Vt2。

4 何為瞬時向量Instant Vector?
例如在上圖中,我們查詢最新的Metric資訊,則會返回T3時刻的取樣資料(假設T3時刻是距離伺服器當前時間最近的取樣時刻),包括Metric01=Vt3 Metric02=Vt3

這裡的瞬時向量就是:Metric01=Vt3 Metric02=Vt3

官方示例:

http_requests_total{job="prometheus"}
表示返回距離伺服器當前時間最近的取樣點的Metric資訊。

5 何為區間向量Range Vector?
例如上圖中,我們查詢[startTime,endTime]之間的Metric資訊,假設這個時間段包含三個取樣時刻(T1,T2,T3)。

則查詢返回的結果包括:

Metric01=Vt1
Metric01=Vt2 Metric02=Vt2
Metric01=Vt3 Metric02=Vt3
這裡的區間向量就是:包括上述5個metric資訊。

官方示例:

http_requests_total{job="prometheus"}[5m]
表示返回最近5分鐘內的Metric資訊。

5 PromQL處理瞬時向量和區間向量上的區別
5.1 PromQL聚合操作
例如:sum,min,max,count等聚合函式,只能作用於瞬時向量上。

// 這是錯誤的,因為count只能作用於瞬時向量,而這個查詢本身返回的是區間向量
count(http_requests_total{job="prometheus"}[5m])
5.2 PromQL內建函式
5.2.1 ceil()向上取整,瞬時向量
ceil(v instant-vector) 將 v 中所有元素的樣本值向上四捨五入到最接近的整數。

node_load5{instance="192.168.1.75:9100"} # 結果為 2.79
ceil(node_load5{instance="192.168.1.75:9100"}) # 結果為 3
5.2.2 changes()資料值變化的次數,區間向量
changes(v range-vector) 輸入一個區間向量, 返回這個區間向量內每個樣本資料值變化的次數(瞬時向量)。

# 如果樣本資料值沒有發生變化,則返回結果為 1
changes(node_load5{instance="192.168.1.75:9100"}[1m]) # 結果為 1
6 結語
深刻的理解瞬時向量和區間向量的含義,是使用好PromQL的關鍵,否則我們查詢的結果很可能就不符合預期。
————————————————
版權宣告:本文為CSDN博主「Hugo Lei」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/hugo_lei/article/details/113400270