prometheus查詢


表達式的結果可以顯示為圖形,可以顯示為表格,也可以通過HTTP API供外部系統調用。

 

1、數據類型

Instant vector:瞬時矢量,一組時間序列,包含每個時間序列的單個樣本,所有樣本共享相同的時間戳

 

Range vector:范圍矢量,一組時間序列,包含每個時間序列隨時間變化的一系列數據點

 

 

Scalar:標量,一個浮點值。

String:字符串,當前未使用。

 

當前只有瞬時矢量可以直接畫圖,也就是說一個表達式的結果必須是瞬時向量,才能夠直接繪制圖形。

 

2、字面量

字符串字面量:

浮點數字面量:

 

3、時間序列選擇器

瞬時矢量選擇器:

舉例:

http_requests_total

這個選擇器會挑選所有帶有度量名http_requests_total的時間序列。

 

http_requests_total{job="prometheus",group="canary"}

這個選擇器通過標簽做進一步過濾,時間序列需要同時滿足:度量名為http_requests_total,job標簽的值為prometheus,group標簽的值為canary

job="prometheus",其中的=表示要完全一樣,才算符合要求;

job!="prometheus",其中的!=表示不相等,才算符合要求;

job=~"prometheus",=~表示需要正則匹配。

job!~"prometheus",!~表示不能正則匹配。

 


http_requests_total{environment=~"staging|testing|development",method!="GET"}

本例中,staging,testing,development,都符合要求,同時排除了GET方法,其他方法都符合要求。

 

 

 非法,因為能匹配到空字符串。

 

 

合法,因為第一個是.+,至少會有1個字符;第二個雖然用了.*,但是第二個method作為保底標簽,即使job=""也不怕。

 

注意:表達式http_requests_total 等價於 表達式{__name__="http_requests_total"}

 

 

該表達式會選擇那些  度量名以job開頭。

或者說,一個度量名的開頭如果是job,則符合該表達式的要求。

 

度量名不能是以下關鍵字中的一個:

bool, on, ignoring, group_left and group_right

 

on{}  這是非法的

 

可以換一種方式:{__name__="on"}

 

范圍矢量選擇器

 

在過去的5分鍾內,如果某些時間序列的度量名是http_requests_total,job標簽的值是prometheus,那么這些時間序列就符合上述表達式。

此時,我們就選擇到了過去這5分鍾內的值。

 

持續時間

 

 

時間能組合

 

以下是合法的示例

 

 

偏移修改器

偏移修改器允許修改查詢中 某個獨立的瞬時矢量或范圍矢量 的時間偏移量。

注意,offset必須緊跟着選擇器。

以下這個是錯誤的,因為offset沒有緊跟着選擇器,而是跟在sum()的后面:

 

 

 

對於范圍矢量,同樣適用:

 

首選划定前5分鍾內的數據范圍,然后往前偏移1周。最后再計算相應5分鍾內的速率。

比如現在是2021-11-18 18:10:00[5m]的作用是將 2021-11-18 18:05:00 ~ 2021-11-18 18:10:00范圍內的數據圈起來。

offset 1w,表示向前推移1周,即2021-11-11 18:10:00,[5m]的作用是鎖定 2021-11-11 18:05:00 ~ 2021-11-11 18:10:00范圍內的數據,

並計算速率。

 

 

向前偏移。用-表示。比如現在是2021-11-18 18:10:00,推移后是2021-11-25 18:10:00

這個特性需要單獨開啟(在啟動prometheus的時候增加選項)

./prometheus --enable-feature=promql-negative-offset

 

@ 修改器

用於指定獲取某個具體時間點的值

 

返回http_requests_total2021-01-04T07:40:00+00:00時間點的值。

@符號后面跟時間戳。

 

同樣的,@符號也要緊跟着選擇器。

 

同樣的,范圍選擇器也是一樣:

 

在2021-01-04T07:40:00+00:00時間點,計算前5分鍾的速率。

 

 

offset和@組合使用。

 

不管先寫@還是先寫offset,偏移都是相對於@符號來說的

也就是說先定位到@符號指定的時間上,再做偏移動作

 

@默認是關閉的,如果要開啟,則添加選項:

./prometheus --enable-feature=promql-at-modifier

 

 

在@符號后,可以使用start()和end()。

對於一個即時查詢來說,start()和end()都解析為計算時間

 

子查詢的結果是范圍向量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM