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的限流速率 , |