PromQL (Prometheus Query Language) 是 Prometheus 自己開發的數據查詢 DSL 語言,語言表現力非常豐富,內置函數很多,在日常數據可視化以及rule 告警中都會使用到它。
在頁面
http://localhost:9090/graph 中,輸入下面的查詢語句,查看結果,例如:
prometheus_http_requests_total{code="200"}
查詢結果類型
PromQL 查詢結果主要有 3 種類型:
瞬時數據 (Instant vector): 包含一組時序,每個時序只有一個點,例如:prometheus_http_requests_total
區間數據 (Range vector): 包含一組時序,每個時序有多個點,例如:prometheus_http_requests_total[5m]
純量數據 (Scalar): 純量只有一個數字,沒有時序,例如:count(prometheus_http_requests_total)
查詢條件
Prometheus 存儲的是時序數據,而它的時序是由名字和一組標簽構成的,其實名字也可以寫出標簽的形式,例如 prometheus_http_requests_total 等價於 {name="http_requests_total"}。
一個簡單的查詢相當於是對各種標簽的篩選,例如:
http_requests_total{code="200"} // 表示查詢名字為 http_requests_total,code 為 "200" 的數據
查詢條件支持正則匹配,例如:
prometheus_http_requests_total{code!="200"} // 表示查詢 code 不為 "200" 的數據
prometheus_http_requests_total{code=~"2.."} // 表示查詢 code 為 "2xx" 的數據
prometheus_http_requests_total{code!~"2.."} // 表示查詢 code 不為 "2xx" 的數據
內置函數
Prometheus 內置不少函數,方便查詢以及數據格式化,例如將結果由浮點數轉為整數的 floor 和 ceil,
floor(avg(prometheus_http_requests_total{code="200"}))
ceil(avgprometheus_(http_requests_total{code="200"}))
查看 prometheus_http_requests_total 5分鍾內,平均每秒數據
rate(prometheus_http_requests_total[5m])
rate 與irate 區別:
irate和rate都會用於計算某個指標在一定時間間隔內的變化速率。但是它們的計算方法有所不同:irate取的是在指定時間范圍內的最近兩個數據點來算速率,而rate會取指定時間范圍內所有數據點,算出一組速率,然后取平均值作為結果。
所以官網文檔說:irate適合快速變化的計數器(counter),而rate適合緩慢變化的計數器(counter)。