Prometheus學習系列(二十二)之PromQL例子

1、簡單的時間序列選擇

使用度量標準http_requests_total返回全部時間序列:git

http_requests_totalgithub

使用度量標準http_requests_total以及給定的jobhandler標籤返回全部時間系列:web

http_requests_total{job="apiserver", handler="/api/comments"}正則表達式

返回相同向量的整個時間範圍(在本例中爲5分鐘),使其成爲範圍向量:api

http_requests_total{job="apiserver", handler="/api/comments"}[5m]瀏覽器

請注意,致使範圍向量的表達式不能直接繪製,而是在表達式瀏覽器的表格("Console")視圖中查看。app

使用正則表達式,您只能爲名稱與特定模式匹配的做業選擇時間序列,在本例中爲全部以server結尾的做業。 請注意,這會進行子字符串匹配,而不是完整的字符串匹配:函數

http_requests_total{job=~"server$"}google

Prometheus中的全部正則表達式都使用RE2語法code

要選擇除4xx以外的全部HTTP狀態代碼,您能夠運行:

http_requests_total{status!~"^4..$"}

2、子查詢

此查詢返回過去30分鐘的5分鐘http_requests_total指標率,分辨率爲1分鐘。

rate(http_requests_total[5m])[30m:1m]

這是嵌套子查詢的示例。 deri函數的子查詢使用默認分辨率。 請注意,沒必要要地使用子查詢是不明智的。

max_over_time(deriv(rate(distance_covered_total[5s])[30s:5s])[10m:])

3、使用函數,操做符等

使用http_requests_total指標名稱返回全部時間序列的每秒速率,在過去5分鐘內測量:

rate(http_requests_total[5m])

假設http_requests_total時間序列都有標籤job(按做業名稱扇出)和instance(按做業實例扇出),咱們可能想要總結全部實例的速率,所以咱們獲得的輸出時間序列更少,但仍然 保留job維度:

sum(rate(http_requests_total)[5m]) by (job)

若是咱們有兩個具備相同維度標籤的不一樣指標,咱們能夠對它們應用二元運算符,而且兩側具備相同標籤集的元素將匹配並傳播到輸出。 例如,此表達式爲每一個實例返回MiB中未使用的內存(在虛構的羣集調度程序上公開它運行的實例的這些度量標準):

(instance_memory_limit_byte - instant_memory_usage_bytes) / 1024 / 1024

相同的表達式,但由應用程序總結,能夠這樣寫:

sum( instance_memory_limit_bytes - instance_memory_usage_bytes) by (app, proc) / 1024 / 1024

若是相同的虛構集羣調度程序爲每一個實例公開了以下所示的CPU使用率指標:

instance_cpu_time_ns{app="lion", pro="web", rev="34d0f99", env="prod", job="cluster-manager"} instance_cpu_time_ns{app="elephant", proc="worker", rev="34d0f99", env="prod", job="cluster-manager"} instance_cpu_time_ns{app="turtle", proc="api", rev="4d3a513", env="prod", job="cluster-manager"} ...

...咱們能夠按應用程序(app)和進程類型(proc)分組排名前3位的CPU用戶:

topk(3, sum(rate(instance_cpu_time_ns[5m])) by(app, proc))

假設此度量標準包含每一個運行實例的一個時間系列,您能夠計算每一個應用程序運行實例的數量,以下所示:

count(instance_cpu_time_ns) by (app)

4、連接

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

相關文章
相關標籤/搜索