promsql 基本使用


PromQL 基本使用

PromQL (Prometheus Query Language) 是 Prometheus 自己開發的數據查詢 DSL 語言,語言表現力非常豐富,內置函數很多,在日常數據可視化以及rule 告警中都會使用到它。

查詢結果類型

PromQL 查詢結果主要有 3 種類型:

  • 瞬時數據 (Instant vector): 包含一組時序,每個時序只有一個點,例如:http_requests_total
  • 區間數據 (Range vector): 包含一組時序,每個時序有多個點,例如:http_requests_total[5m]
  • 純量數據 (Scalar): 純量只有一個數字,沒有時序,例如:count(http_requests_total)

查詢條件

Prometheus 存儲的是時序數據,而它的時序是由名字和一組標簽構成的,其實名字也可以寫出標簽的形式,例如 http_requests_total 等價於 {name=”http_requests_total”}。

一個簡單的查詢相當於是對各種標簽的篩選,例如:

http_requests_total{code="200"}// 表示查詢名字為 http_requests_total,code 為 "200" 的數據

查詢條件支持正則匹配,例如:

http_requests_total{code!="200"}// 表示查詢 code 不為 "200" 的數據http_requests_total{code=~"2.."}// 表示查詢 code 為 "2xx" 的數據http_requests_total{code!~"2.."}// 表示查詢 code 不為 "2xx" 的數據

操作符

Prometheus 查詢語句中,支持常見的各種表達式操作符,例如

算術運算符:

支持的算術運算符有 +,-,*,/,%,^, 例如 http_requests_total * 2 表示將 http_requests_total 所有數據2倍。

比較運算符:

支持的比較運算符有 ==,!=,>,<,>=,<=, 例如 http_requests_total > 100 表示 http_requests_total 結果中大於 100 的數據。

邏輯運算符:

支持的邏輯運算符有 and,or,unless, 例如 http_requests_total == 5 or http_requests_total == 2 表示 http_requests_total 結果中等於 5 或者 2 的數據。

聚合運算符:

支持的聚合運算符有 sum,min,max,avg,stddev,stdvar,count,count_values,bottomk,topk,quantile,, 例如 max(http_requests_total) 表示 http_requests_total 結果中最大的數據。

注意Prometheus 的運算符也有優先級,它們遵從(^)> (*, /, %) > (+, -) > (==, !=, <=, <, >=, >) > (and, unless) > (or) 的原則。

  • without用於從計算結果中移除列舉的標簽,而保留其它標簽。by則正好相反,結果向量中只保留列出的標簽,其余標簽則移除。通過without和by可以按照樣本的問題對數據進行聚合

  • rate()

    • 此函數計算整個采樣周期內每秒的增長率。

      例如:rate(http_requests_total[5m]) 得出的是HTTP在5分鍾窗口內,平均每秒的請求率。作為最常見的函數,它以可預測的每秒輸出單位產生平滑的rate。

  • irate()

    • 即 "瞬時rate",此函數和rate()一樣,計算每秒的增長率,但只對規定采樣周期內的最后兩個樣本進行計算,而忽略前面所有樣本
  • increase()

    • increase(http_requests_total[5m]) 得出的是5分鍾的采樣周期內處理完成的HTTP請求的增長量
示例
increase(flink_jobmanager_job_numberOfFailedCheckpoints{env="prod-exclusive",projectCode="platform-v4",type="Flink"}[1h])  ##flink_jobmanager_job_numberOfFailedCheckpoints 1小時的增長量

位移操作 offset

http_requests_total offset 5m 當前時間點往前5分鍾時間數據
http_requests_total[5m] offset 5m 當前時間點前的5分鍾為結束點,再往前5分鍾為開始點時間段內的數據

參考文檔

https://prometheus.io/docs/prometheus/latest/querying/functions/


免責聲明!

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



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