Prometheus expression是一種用于查詢和操作Prometheus時間序列數據的查詢語言。它具有一套豐富的函數和運算符,可以用于提取、聚合和轉換時間序列數據。
正則表達式在Prometheus expresion中也被廣泛使用,可以用于匹配和過濾時間序列。
Prometheus expressiom中使用的正則表達式基于RE2庫,該庫提供了一種更安全和高性能的正則表達式實現。這些正則表達式用于匹配Prometheu:指標名稱和標簽的值
在Prometheus?expression中,可以使用正則表達式進行模糊匹配。
以下是一些常用的正則表達式語法示例和用法:
1、精確匹配:使用等號(=)
示例:metric_name(label_name="label_walue"}
2、前綴匹配:使用正則表達式? '^'
示例:metric_name(label_name=~ "^label_value.*}? ?這個示例將匹配以"label_value"開頭的所有標簽值。
3、后綴匹配:使用正則表達式? '$'
示例:”metric_name(label_name=~ ".*label_value$"? ?這個示例將匹配以“label_value”結尾的所有標簽值。
4、包含匹配:使用正則表達式? ?'.*'
示例:”metric_name(label_name=~ ".*label_value.*"}這個示例將匹配包含"label_value"的所有標簽值
可以在Prometheus epressiom中使用符號=、!=、=~和!~來執行正則表達式匹配操作
(1) =和!=用于執行精確匹配
(2) =~和!~用于執行正則表達式匹配
在Prometheus expression中,可以在標簽選擇器中使用正則表達式來篩選要匹配的標簽。例如,可以使用{label_mame=~"regular_expression"}來選擇具有匹配正則表達式的標簽值的時間序列。
除了在標簽選擇器中使用正則表達式,還可以在函數參數中使用正則表達式。例如,使用函數label replace'可以使用正則表達式替換標簽值。
總結起來,Prometheus expresion提供了一種強大的查詢語言,可以使用正則表達式進行模糊匹配、篩選和轉換時間序列數據。正則表達式在Prometheus expresiom中的常見用法包括精確匹配、前綴匹配、后綴匹配和包含匹配。
使用正則表達式,可以輕松地篩選和操作Prometheus監控數據,以便分析和監控系統的性能和健康狀態。
下面是k8s apiserver監控的幾個例子,可以簡單看看正則表達式和精確匹配在標簽選擇器當中的使用。
名稱 | PromQL | 說明 |
GET讀請求時延 | histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb="GET",resource!="",subresource!~"log|proxy"}[$interval])) by (pod, verb, resource, subresource, scope, le)) | 展示GET請求的響應時間,維度包括API Server?Pod、Verb(GET)、Resources、Scope。 |
LIST讀請求時延 | histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb="LIST"}[$interval])) by (pod_name, verb, resource, scope, le)) | 展示LIST請求的響應時間,維度包括API Server?Pod、Verb(LIST)、Resources、Scope。 |
寫請求時延 | histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb!~"GET|WATCH|LIST|CONNECT"}[$interval])) by (cluster, pod_name, verb, resource, scope, le)) | 展示Mutating請求的響應時間,維度包括API Server?Pod、Verb(GET、WATCH、LIST、CONNECT)、Resources、Scope。 |
在處理讀請求數量 | apiserver_current_inflight_requests{request_kind="readOnly"} | API Server正在處理的讀請求數量。 |
在處理寫請求數量 | apiserver_current_inflight_requests{request_kind="mutating"} | API Server正在處理的寫請求數量。 |
請求限流速率 | sum(irate(apiserver_dropped_requests_total{request_kind="readOnly"}[$interval])) by (name) sum(irate(apiserver_dropped_requests_total{request_kind="mutating"}[$interval])) by (name) | API Server的限流速率 , |