Prometheus學習系列(二十一)PromQL函數

一些函數有默認的參數,例如:year(v=vector(time()) instant-vector)。他的意思是有一個參數v是一個瞬時向量,若是沒有提供,它將默認爲表達式vector(time())的值。git

1、abs()

abs(v instant-vector)返回輸入向量,全部樣本值都轉換爲其絕對值。github

2、absent()

absent(v instant-vector)若是傳遞給它的向量具備任何元素,則返回空向量;若是傳遞給它的向量沒有元素,則返回值爲1的1元素向量。正則表達式

這對於在給定度量標準名稱和標籤組合不存在時間序列時發出警報很是有用。api

absent(nonexistent{job="myjob"})  
# => {job="myjob"}
absent(nonexistent{job="myjob", instance=~".*"}) 
# => {job="myjob"}
absent(sum(nonexistent{job="myjob"})) 
# => {}
複製代碼

在第二個例子中,absent()試圖從輸入向量中導出1元素輸出向量的標籤。bash

3、ceil()

ceil(v instant-vector)v中全部元素的樣本值舍入到最接近的整數。ide

4、changes()

對於每一個輸入時間系列,changes(v range-vector) 將返回其值在所提供的時間範圍內更改的次數做爲即時向量。函數

5、clamp_max()

clamp_max(v instant-vector, max scalar)鉗制v中全部元素的樣本值,使其上限爲maxspa

6、clamp_min()

clamp_min(v instant-vector, min scalar)鉗制v中全部元素的樣本值,使其下限爲minscala

7、day_of_month()

day_of_month(v=vector(time()) instant-vector)返回UTC中每一個給定時間的月中的某天。 返回值爲1到31。rest

8、day_of_week()

day_of_week(v=vector(time()) instant-vector)返回UTC中每一個給定時間的星期幾。 返回值爲0到6,其中0表示星期日等。

9、days_in_month()

days_in_month(v=vector(time()) instant-vector)返回UTC中每一個給定時間的月中天數。 返回值爲28到31。

10、delta()

delta(v range-vector)計算範圍向量v中每一個時間系列元素的第一個和最後一個值之間的差值,返回具備給定增量和等效標籤的即時向量。 delta被外推以覆蓋範圍向量選擇器中指定的全時間範圍,所以即便樣本值都是整數,也能夠得到非整數結果。

如下示例表達式返回如今和2小時以前CPU溫度的差別:

delta(cpu_temp_celsius{host="zeus"}[2h])
複製代碼

delta應僅用於儀表。

11、deriv()

deriv(v range-vector)函數,計算一個範圍向量v中各個時間序列二階導數,使用簡單線性迴歸 deriv應僅用於儀表。

12、exp()

exp(v instant-vector)計算v中全部元素的指數函數。特殊狀況是:

  • Exp(+inf) = +Inf
  • Exp(NaN) = NaN
十3、floor()

floor(v instant-vector)v中全部元素的樣本值舍入爲最接近的整數。。

十4、histogram_quantile()

histogram_quatile(φ float, b instant-vector) 計算b向量的φ-直方圖 (0 ≤ φ ≤ 1) 。(有關φ-分位數的詳細解釋和直方圖度量類型的使用,請參見直方圖和摘要。)b中的樣本是每一個桶中的觀察計數。 每一個樣本必須具備標籤le,其中標籤值表示桶的包含上限。 (沒有這種標籤的樣本會被忽略。)直方圖度量標準類型自動提供帶有_bucket後綴和相應標籤的時間序列。

使用rate()函數指定分位數計算的時間窗口。

示例:直方圖度量標準稱爲http_request_duration_seconds。 要計算過去10m內請求持續時間的第90個百分位數,請使用如下表達式:

histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m]))
複製代碼

http_request_duration_seconds中爲每一個標籤組合計算分位數。 要聚合,請在rate()函數週圍使用sum()聚合器。 因爲histogram_quantile()須要le標籤,所以必須將其包含在by子句中。 如下表達式按做業聚合第90個百分點:

histogram_quantile(0.9, sum(rate(http_request_duration_seconds_bucket[10m])) by (job, le))
複製代碼

要聚合全部內容,請僅指定le標籤:

histogram_quantile(0.9, sum(rate(http_request_duration_seconds_bucket[10m])) by (le))
複製代碼

histogram_quantile()函數經過假設桶內的線性分佈來插值分位數值。 最高桶必須具備+Inf的上限。 (不然,返回NaN。)若是分位數位於最高桶中,則返回第二個最高桶的上限。 若是該桶的上限大於0,則假設最低桶的下限爲0.在這種狀況下,在該桶內應用一般的線性插值。 不然,對於位於最低桶中的分位數,返回最低桶的上限。

若是b包含少於兩個桶,則返回NaN。 對於φ<0,返回-Inf。 對於φ> 1,返回+Inf

十5、holt_winters()

holt_winters(v range-vector, sf scalar, tf scalar)根據v中的範圍產生時間序列的平滑值。平滑因子sf越低,對舊數據的重要性越高。 趨勢因子tf越高,則考慮的數據趨勢越多。 sftf都必須介於0和1之間。

holt_winters只能用於儀表。

十6、hour()

hour(v=vector(time()) instant-vector)返回UTC中每一個給定時間的一天中的小時。 返回值爲0到23。

十7、idelta()

idelta(v range-vector)計算範圍向量v中最後兩個樣本之間的差別,返回具備給定增量和等效標籤的即時向量。

idelta只能用於儀表。

十8、increase()

increase(v range-vector)計算範圍向量中時間序列的增長。 單調性中斷(例如因爲目標重啓而致使的計數器重置)會自動調整。 增長外推以覆蓋範圍向量選擇器中指定的全時間範圍,所以即便計數器僅以整數增量增長,也能夠得到非整數結果。

如下示例表達式返回範圍向量中每一個時間系列在過去5分鐘內測量的HTTP請求數:

increase(http_requests_total{job="api-server"}[5m])

increase只應與counters一塊兒使用。 它是rate(v)的語法糖乘以指定時間範圍窗口下的秒數,應該主要用於人類可讀性。 在記錄規則中使用rate,以便每秒一致地跟蹤增量。

十9、irate

irate(v range-vector)計算範圍向量中時間序列的每秒即時增加率。 這基於最後兩個數據點。 單調性中斷(例如因爲目標重啓而致使的計數器重置)會自動調整。

如下示例表達式返回範圍向量中每一個時間序列的兩個最新數據點的最多5分鐘的HTTP請求的每秒速率:

irate(http_requests_total{job="api-server"}[5m])

只應在繪製易失性快速移動計數器時使用irate。 警報和緩慢移動計數器的使用率,由於速率的簡短更改能夠重置FOR子句,而且難以閱讀徹底由稀有峯值組成的圖形。

注意,當將irate()與聚合運算符(例如sum())或隨時間聚合的函數(任何以_over_time結尾的函數)組合時,請始終首先採用irate(),而後進行聚合。 不然,當目標從新啓動時,irate()沒法檢測計數器重置。

二10、label_join()

對於v中的每一個時間序列,label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...)使用separator鏈接全部src_labels的全部值,並返回包含鏈接的標籤dst_label的時間序列 值。 此函數中能夠有任意數量的src_labels

此示例將返回一個向量,每一個時間序列都有一個foo標籤,其中添加了值a,b,c

label_join(up{job="api-server",src1="a",src2="b",src3="c"}, "foo", ",", "src1", "src2", "src3")

二11、label_replace()

對於v中的每一個時間序列,label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string) 將正則表達式正則表達式與標籤src_label相匹配。 若是匹配,則返回時間序列,標籤dst_label替換爲替換擴展。 $1替換爲第一個匹配的子組,$2替換爲第二個等。若是正則表達式不匹配,則返回時間序列不變。

此示例將返回一個向量,每一個時間序列都有一個foo標籤,其值爲a

label_replace(up{job="api-server",service="a:c"}, "foo", "$1", "service", "(.):.")

二12、ln()

ln(v instance-vector)計算v中全部元素的天然對數。特殊狀況是:

ln(+Inf) = +Inf ln(0) = -Inf ln(x<0) = NaN ln(NaN) = NaN

二十3、log2()

log2(v instant-vector)計算v中全部元素的二進制對數。特殊狀況等同於ln中的特殊狀況。

二十4、log10()

log10(v instant-vector)計算v中全部元素的10進制對數。特殊狀況等同於ln中的特殊狀況。

二十5、minute()

minute(v=vector(time()) instant-vector)以UTC爲單位返回每一個給定時間的分鐘。 返回值爲0到59。

二十6、month()

month(v=vector(time()) instant-vector)返回UTC中每一個給定時間的一年中的月份。 返回值爲1到12,其中1表示1月等。

二十7、predict_linear()

predict_linear(v range-vector, t scalar)根據範圍向量v使用線性迴歸預測從如今起t秒的時間序列值。

predict_linear只應與儀表一塊兒使用。

二十8、rate()

rate(v range-vector)計算範圍向量中時間序列的每秒平均增加率。 單調性中斷(例如因爲目標重啓而致使的計數器重置)會自動調整。 此外,計算推斷到時間範圍的末端,容許錯過刮擦或刮擦循環與範圍的時間段的不完美對齊。

如下示例表達式返回範圍向量中每一個時間系列在過去5分鐘內測量的每秒HTTP請求率:

rate(http_requests_total{job="api-server"}[5m])

rate應僅用於計數器。 它最適用於警報和緩慢移動計數器的圖形。

注意,當將rate()與聚合運算符(例如sum())或隨時間聚合的函數(任何以_over_time結尾的函數)組合時,始終首先採用rate(),而後聚合。 不然,當目標從新啓動時,rate()沒法檢測計數器重置。

二十9、resets()

對於每一個時序數據,resets()在所提供的時間範圍內返回計數器重置次數做爲即時向量。 兩個連續樣本之間的值的任何減小都被解釋爲計數器重置。

resets()只應與計數器一塊兒使用。

三10、round()

round(v instant-vector, to_nearest 1= scalar)v中全部元素的樣本值舍入爲最接近的整數。 經過四捨五入解決關係。 可選的to_nearest參數容許指定樣本值應舍入的最近倍數。 這個倍數也多是一個分數。

三11、scalar()

給定單元素輸入向量,scalar(v instant-vector)將該單個元素的樣本值做爲標量返回。 若是輸入向量不具備剛好一個元素,則scalar將返回NaN

三12、sort()

sort(v instant-vector)返回按其樣本值排序的向量元素,按升序排列。

三十3、sort_desc()

sort(v instant-vectorsort相同,但按降序排序。

三十4、sqrt()

sqrt(v instant-vector)計算v中全部元素的平方根。

三十5、time()

time()返回自1970年1月1日UTC以來的秒數。 請注意,這實際上並不返回當前時間,而是返回計算表達式的時間。

三十6、timestamp()

timestamp(v instant-vector)返回給定向量的每一個樣本的時間戳,做爲自1970年1月1日UTC以來的秒數。

此功能已添加到Prometheus 2.0中

三十7、vector()

vector(s scalar)將標量s做爲沒有標籤的向量返回。

三十8、year()

year(v=vector(time()) instant-vector)以UTC格式返回每一個給定時間的年份。

三十9、_over_time()

如下函數容許聚合給定範圍向量的每一個系列隨時間的變化並返回具備每系列聚合結果的即時向量:

  • avg_over_time(range-vector): 範圍向量內每一個度量指標的平均值。
  • min_over_time(range-vector): 範圍向量內每一個度量指標的最小值。
  • max_over_time(range-vector): 範圍向量內每一個度量指標的最大值。
  • sum_over_time(range-vector): 範圍向量內每一個度量指標的求和值。
  • count_over_time(range-vector): 範圍向量內每一個度量指標的樣本數據個數。
  • quantile_over_time(scalar, range-vector): 範圍向量內每一個度量指標的樣本數據值分位數,φ-quantile (0 ≤ φ ≤ 1)
  • stddev_over_time(range-vector): 範圍向量內每一個度量指標的整體標準誤差。
  • `stdvar_over_time(range-vector): 範圍向量內每一個度量指標的整體標準方差。

請注意,即便值在整個時間間隔內的間隔不均勻,指定時間間隔內的全部值在聚合中都具備相同的權重。

四10、連接

Prometheus官網地址:prometheus.io/ 個人Github:github.com/Alrights/pr…

相關文章
相關標籤/搜索