Prometheus是一個流行的開源監控系統,PromQL是它的查詢語言。PromQL 的強大功能使其成為一個容易使用而有力的工具。在本文中,我們將全面深入地了解PromQL,包括其語法、函數、數據查詢和模糊匹配等方面的詳細內容。
一、PromQL 語法
首先,讓我們看一下PromQL的基本語法。PromQL的語法類似於SQL,它使用一個表格來表示時序數據,而每個行代表一個時間戳和相應的數據值。
# 示例基本語法
metric_name [ "{" label_name "=" `label_value` [ "," label_name "=" `label_value` ] "}" ] element-specifier [ range-vector-selector | offset ]
其中:
metric_name
:是一個字符串,表示監控指標的名稱。label_name
和label_value
:用來標識監控指標,是一組鍵值對。element-specifier
:表示查詢的數據值。例如,一個整個時間序列可以用它的名稱表示,北京市在2021年的天氣可以用它的名稱,也可以用一些關鍵字來表示,如TOPK,AVG等。range-vector-selector
和offset
:可選參數。range-vector-selector 用來指定一個時間範圍,而 offset 用戶指定相對時間的時間位移。
二、PromQL判斷數據是否存在
在進行數據檢索之前,通常需要先判斷數據是否存在。PromQL 提供了一些函數來幫助我們進行這個工作。
1. absent()
函數
absent()
函數可用於檢查在請求的時間範圍內是否有指定的指標名稱或標籤/鍵值對的數據存在。
absent(metric_name [ "{" label_name "=" `label_value` [ "," label_name "=" `label_value` ] "}" ])
例如以下查詢會返回 1,因為名為 my_metric 的指標不存在:
# 查詢 my_metric 指標是否存在
absent(my_metric)
2. label_replace()
函數
label_replace()
函數可用於條件轉換:如果存在符合給定模式的標籤,則用新標籤覆蓋原始標籤。
# 示例將源標籤名稱與 value 進行正則表達式替換,新標籤的名稱為 dest_label,替換後的值為 $1
label_replace(source_metric_name{source_label="value"}, "dest_label", "$1", "source_label", "regex")
三、PromQL 函數
PromQL提供了許多有用的函數幫助我們對數據進行精確查詢和處理。下面我們就來介紹一下它提供的幾種函數。
1. rate()
函數
rate()
函數被用來對計數器類型指標進行轉換,得到每秒鐘的增量速率。例如:獲取過去5分鐘內的接口流量
# query data from counter metric
irate(api_requests_total[5m])
2. increase()
函數
increase()
函數被用來計算子查詢內計數器類型指標的增量值。例如,下面這段查詢用於比較過去5分鐘和過去10分鐘的接口請求增量:
increase(api_requests_total[5m]) / increase(api_requests_total[10m])
3. sum()
函數
sum()
函數用於匯總同一標籤下的數據,並將多個時序數據之和作為一個新時序數據返回。例如,下面這段查詢計算出了所有服務中廣告流量的總和:
sum(ad_traffic{service="*"})
4. count()
函數
count()
函數用於計算提取出的指標集合中的元素數量。下面這段查詢計算每個標籤的數據數量:
count by (label_name) (metric_name)
四、PromQL怎麼讀
PromQL的閱讀對初學者來說可能會比較困難。在這裡,我們推薦使用以下技巧來更好地掌握它:
- 深入理解查詢的目的,以便更好地理解需要查詢哪些數據和如何使用PromQL來搜索數據。
- 在複雜的查詢中使用括號來明確查詢的順序和意圖。
- 使用PromQL解釋器測試你的查詢語句,以便確定你所查詢的實際數據是否符合你的預期。
五、PromQL 模糊匹配
PromQL也支持模糊匹配。
1. =~
運算符
適用於正則表達式匹配。例如,匹配 CPU 使用率中以 http 開頭的數據:
# Using the \'http.*\' regex pattern to match CPU usage metrics that begin with \"http\"
node_cpu{instance=~\"http.*\"}
六、PromQL 語法解析
PromQL的語法解析使得它可以輕鬆地查詢時序數據。使用PromQL解析器,你可以將查詢轉換為可視化數據圖表以及其他處理結果,幫助你更好地理解與管理大規模時序數據。
七、PromQL 中文手冊
為了幫助更多的開發人員更好地理解PromQL,社區提供了PromQL中文手冊,詳細介紹了PromQL的基本語法、常見問題、函數等內容。如果你是一個PromQL新手,這個手冊一定對你大有幫助。
八、PromQL BY
BY
關鍵字用於分組聚合。下面這段代碼計算每個主機的 CPU 平均負載:
avg(cpu_load) by (host)
九、PromQL SUM
SUM
函數用於匯總數據。下面這段代碼計算服務 http_requests_total 的總請求次數:
sum(http_requests_total)
十、PromQL TOPK
使用 TOPK
函數,你可以獲取請求最高的前幾個元素。下面這段代碼查詢了最大的 5 個 CPU 負載值:
topk(5, cpu_load)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/249705.html