Prometheus 語法初探

概述


Prometheus 是一套使用 Go 語言進行編寫的監控工具,專注於基礎監控,默認僅保留 15 天的監控數據,15 天的監控數據,已經足夠運維人員去排查和分析運維故障。Prometheus 有專門的 PQL 語言,可以對採集上來的指標進行多維度、函數分析,具有高度的指標定製化能力。本文將同大家一起學習 Prometheus 的 PQL 語法,驗證並記錄下過程。

PQL 重要概念


即時向量

一個時間點某指標的值,如:

node_cpu_seconds_total{mode="idle"}

區間向量

指的是在某段時間內 metric 的取值,每個時間點都包含一系列的值,如:

node_cpu_seconds_total{mode="idle"}[5m]

指標類型

標籤

一個指標,可以包括多個標籤(label),用來指示這個指標的具體表示信息,起到對一個指標的修飾作用,標籤可使用正則表達式進行匹配。

如 node_cpu_seconds_total 指標,直接查詢該指標,會打印出該指標的全部標籤數據。

拿關係型數據比較,可以這麼類似比喻,node_cpu_seconds_total 爲表,cpu,instance,job,mode,value 爲其字段,表數據總爲最新的數據,數據量總數等於各個字段的枚舉值相乘。

當我們給這個 Metric 指標做了標籤過濾時,相當於執行了 where 限制性語句,如 node_cpu_seconds_total{mode="idle"},只過濾出包含 mode 字段,並且其值爲 idle,類似於 SQL 語句。

select * from node_cpu_seconds_total where mode = 'idle'

標籤支持正則表達式,使用 =~(Rexp),如 node_cpu_seconds_total{mode=~"idle|iowait"},類似於 SQL 語句。

select * from node_cpu_seconds_total where mode = 'idle' or mode = 'iowait'

標籤過濾器可以有多個,用逗號進行隔開,相當於執行了 where … and … 語句,如 node_cpu_seconds_total{mode="idle",cpu='0'},類似於 SQL 語句。

select * from node_cpu_seconds_total where mode = 'idle' and cpu = '0'

配合標籤,我們可以精確的找到我們需要用於展示或者計算的指標值。

偏移量 offset

指標通過偏移量 offset 關鍵字,可以查詢相對於當前時間點之前的數據,默認獲取當前最新數據,如 node_cpu_seconds_total offset 5m,獲取 5 分鐘前該指標的數據。

註釋

PQL 使用 "#" 對語法進行註釋。

函數

sum

min

max

avg

count

topk

bottomk

計算

+ 加法運算

- 減法運算

*** 乘法運算**

/ 除法運算

邏輯比較

== 判斷是否相等

!= 判斷是否不等

>= 大於等於

<= 小於等於

> 大於

< 小於

數據集操作

and

or

unless

函數


用於即時向量的函數

abs

absent

ceil

floor

clamp_max

clamp_min

該函數需要兩個參數,一個是向量,另外一個是觸底值,如果一個向量的值超過該觸底值,該向量的值則爲觸底值。

用於區間向量的函數

區間向量的函數執行完成後,便成爲了即時向量。

absent_over_time

changes

delta

deriv

idelta

irate

_over_time

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/kqCvOEnmB3CoqJqi75WbyA