Prometheus 的查詢語(yǔ)言 PromQL 詳解
01、介紹
我們使用 Prometheus Go client library 在 Go 代碼中埋點(diǎn),將指標(biāo)數(shù)據(jù)上報(bào)到 Prometheus server,接下來(lái)我們使用 PromQL 查詢指標(biāo)數(shù)據(jù)。
PromQL 可以在 Prometheus 提供的 http://localhost:9090/graph 中執(zhí)行,本文我們介紹怎么使用 PromQL 查詢指標(biāo)數(shù)據(jù)。
02、PromQL
PromQL 除了直接使用指標(biāo)名稱查詢時(shí)序數(shù)據(jù)之外,還可以聯(lián)合使用 Label 和函數(shù)等。
比如我們使用最多的 Counter 指標(biāo)類型,它會(huì)統(tǒng)計(jì)自啟動(dòng) Prometheus 以來(lái)的計(jì)數(shù)總和,但是我們并不關(guān)心總數(shù)。我們只想知道 Counter 隨著時(shí)間的推移,計(jì)數(shù)增加的速度。
比如我們可以直接使用自定義指標(biāo)名稱 http_request_count_total 查詢所有指標(biāo)名稱為 http_request_count_total 的指標(biāo)數(shù)據(jù)(HTTP 請(qǐng)求數(shù))。
實(shí)際上,我們并不是要查詢 HTTP 請(qǐng)求數(shù)的總和,而是想查詢單位時(shí)間內(nèi),請(qǐng)求數(shù)的增長(zhǎng)速度。此時(shí),我們可以使用函數(shù) rate 完成。
使用 rate(http_request_count_total[5m]) 可以查詢 HTTP 每秒請(qǐng)求數(shù),其中 [5m] 是指過(guò)去 5 分鐘每秒請(qǐng)求數(shù)的平均值。
比如我們的 HTTP 請(qǐng)求數(shù)指標(biāo)中包含 PATH 標(biāo)簽,如果我們想要統(tǒng)計(jì)所有 HTTP 請(qǐng)求數(shù)指標(biāo)的每秒請(qǐng)求數(shù)的總和,可以使用 sum 聚合運(yùn)算符 和 without 子句,sum without(path)(rate(http_request_count_total[5m]))。
比如我們想要查詢指定 PATH 的 HTTP 每秒請(qǐng)求數(shù),我們可以使用 rate(http_request_count_total{path="/ping"}[5m]) 查詢,我們通過(guò) {path="/ping"} 過(guò)濾指標(biāo)數(shù)據(jù)。
實(shí)際上 http_request_count_total{path="/ping"} 中 {} 稱為選擇器,其中 path="/ping" 中的 = 稱為匹配器,我們可以在 {} 中使用多個(gè)匹配器,使用 , 分隔。
匹配器有 4 種,path="/ping" 中的 = 是等式匹配器,此外,還有 != 不等、=~ 正則等、!~ 正則不等。
03、總結(jié)
本文我們主要介紹 PromQL 的一般使用方式,主要包括以下幾個(gè)維度:
- 指標(biāo)名稱
- 標(biāo)簽
- 聚合運(yùn)算符
- 子句
- 函數(shù)
- 選擇器
- 匹配器
除了指標(biāo)名稱和標(biāo)簽,我們?cè)谥暗奈恼陆榻B過(guò)之外,其它都屬于新知識(shí),聚合運(yùn)算符共計(jì) 11 個(gè),我們只使用了 sum,子句除了 without 之外,還有 by,函數(shù)也只是使用 rate 舉例,建議讀者朋友們閱讀官方文檔,了解所有聚合運(yùn)算符和函數(shù)的使用方式。
需要注意的是,本文我們介紹的是 PromQL 的查詢范疇,關(guān)于 PromQL 計(jì)算范疇的內(nèi)容,我們都沒(méi)有介紹,比如,算術(shù)運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符,也是非常重要的內(nèi)容,尤其在我們配置告警時(shí)會(huì)用到這些運(yùn)算符。