prometheus promql查詢表示式

2022-09-07 20:30:20 字數 4852 閱讀 3659

basics

即時向量選擇器

=:匹配與標籤相等的內容

!=:不匹配與標籤相等的內容

=~: 根據正規表示式匹配與標籤符合的內容

!~:根據正規表示式不匹配與標籤符合的內容

示例:http_requests_total #這將匹配method不等於get,environment匹配到staging,testing或development的http_requests_total請求內容。

向量選擇器必須指定乙個名稱或至少乙個與空字串不匹配的標籤匹配器。以下表示式是非法的

# bad!

相反,這些表示式是有效的,因為它們都有乙個與空標籤值不匹配的選擇器。

# good!

# good!

範圍向量選擇器

持續時間僅限於數字,接下來是以下單位之一:

s - seconds

m - minutes

h - hours

d - days

w - weeks

y - years

在此示例中,我們選擇在過去5分鐘內為度量標準名稱為http_requests_total且標籤設定為job=prometheus的所有時間序列記錄的所有值:

偏移量修改器

偏移修改器允許更改查詢中各個即時和範圍向量的時間偏移。

例如,以下表示式相對於當前查詢5分鐘前的http_requests_total值:

注意,偏移修改器需要立即跟隨選擇器,即以下內容是正確的:

以下內容是不正確的:

同樣適用於範圍向量。這將返回http_requests_total一周前的5分鐘增長率:

二元運算子

算術二元運算子

prometheus中存在以下二進位制算術運算子:

比較二元運算子

== (equal)

!= (not-equal)

(greater-than)

< (less-than)

= (greater-or-equal)

<= (less-or-equal)

邏輯/集二進位制運算子

and (intersection)

or (union)

unless (complement)

一對一向量匹配

一對一從操作的每一側找到唯一的條目對。在預設情況下,這是格式為vector1 vector2之後的操作。如果兩個條目具有完全相同的標籤集和相應的值,則它們匹配。 ignore關鍵字允許在匹配時忽略某些標籤,而on關鍵字允許將所考慮的標籤集減少到提供的列表:

這將返回乙個結果向量,其中包含每個方法的狀態**為500的http請求部分,在過去5分鐘內測量。在不忽略(**)的情況下,由於度量標準不共享同一組標籤,因此不會匹配。方法put和del的條目沒有匹配,並且不會顯示在結果中:

0.04 // 24 / 600

0.05 // 6 / 120

多對一和一對多向量匹配

多對一和一對多匹配指的是"一"側的每個向量元素可以與"多"側的多個元素匹配的情況。必須使用group_left或group_right修飾符明確請求,其中left/right確定哪個向量具有更高的基數。

在這種情況下,左向量每個方法標籤值包含多個條目。因此,我們使用group_left表明這一點。右側的元素現在與多個元素匹配,左側具有相同的方法標籤:

0.04 // 24 / 600

0.05 // 30 / 600

0.05 // 6 / 120

0.175 // 21 / 120

多對一和一對多匹配是高階用例,應該仔細考慮。通常正確使用忽略()可提供所需的結果。

聚合運算子

functions

abs(v instant-vector) #返回其絕對值

absent() # 如果傳遞給它的向量具有該元素,則返回空向量;如果傳遞給它的向量沒有元素,則返回傳入的元素。

example query:

nginx_server_connections

nginx_server_connections 89061

nginx_server_connections 2

absent(nginx_server_connections) => {}

absent(nginx_server_connections) =>

ceil(v instant-vector) #返回向量中所有樣本值(向上取整數)

round(v instant-vector, to_nearest=1 scalar) #返回向量中所有樣本值的最接近的整數,to_nearest是可選的,預設為1,表示樣本返回的是最接近1的整數倍的值, 可以指定任意的值(也可以是小數),表示樣本返回的是最接近它的整數倍的值

floor(v instant-vector) #返回向量中所有樣本值(向下取整數)

changes(v range-vector) #對於每個輸入時間序列,返回其在時間範圍內(v range-vector)更改的次數

clamp_max(v instant-vector, max scalar) #限制v中所有元素的樣本值,使其上限為max

clamp_min(v instant-vector, min scalar) #限制v中所有元素的樣本值,使其下限為min

year(v=vector(time()) instant-vector) #返回utc中給定時間的年份

day_of_month(v=vector(time()) instant-vector) #返回utc中給定時間的月中的某一天,返回值為1到31

day_of_week(v=vector(time()) instant-vector) #返回utc中給定時間的當週中的某一天,返回值為0到6

days_in_month(v=vector(time()) instant-vector) #返回utc中給定時間的乙個月的天數,返回值28到31

hour(v=vector(time()) instant-vector) #返回utc中給定時間的當天中的某一小時,返回值為0到23

minute(v=vector(time()) instant-vector) #返回utc中給定時間的小時中的某分鐘,返回值為0到59

delta(v range-vector) #返回乙個即時向量,它計算每個time series中的第乙個值和最後乙個值的差別

deriv(v range-vector) #計算每個time series的每秒的導數(derivative)

exp(v instant-vector) #計算v中所有元素的指數函式

histogram_quantile(φ float, b instant-vector) #從buckets型別的向量中計算φ(0 ≤ φ ≤ 1)百分比的樣本的最大值

holt_winters(v range-vector, sf scalar, tf scalar) #根據範圍向量中的範圍產生乙個平滑的值

idelta(v range-vector) #計算最新的2個樣本值之間的差別

increase(v range-vector) #計算指定範圍內的增長值, 它會在單調性發生變化時(如由於目標重啟引起的計數器復位)自動中斷

irate(v range-vector) #計算每秒的平均增長值, 基於的是最新的2個資料點

rate(v range-vector) #計算每秒的平均增長值

resets(v range-vector) #對於每個 time series , 它都返回乙個 counter resets的次數

sort(v instant-vector) #對向量按元素的值進行公升序排序

sort_desc(v instant-vector) #對向量按元素的值進行降序排序

sqrt(v instant-vector) #返回v中所有向量的平方根

time() #返回從1970-1-1起至今的秒數,utc時間

查詢表示式

這個特性使得你可以在c 中使用sql類似風格的語句,也被稱作linq 語言整合查詢 舉例來說,你可以這樣描述你的資料 ublic class coordinate 在c 裡,你可以像下面一樣輕鬆的宣告乙個資料庫表的邏輯等同式 use object and collection initializer...

查詢表示式

版本 新增功能 5.0.9 比較運算增加閉包子查詢支援 5.0.4 支援對同乙個字段多次呼叫查詢方法 查詢表示式支援大部分的sql查詢語法,也是 thinkphp 查詢語言的精髓,查詢表示式的使用格式 where 欄位名 表示式 查詢條件 where or 欄位名 表示式 查詢條件 表示式不分大小寫...

查詢表示式解析

查詢表示式解析 1 ienumerablequery from s in names where s.length 5 orderby s select s.toupper 在語義上等同於如下 方法風格 基於方法 的查詢 ienumerablequery names where s s.length...