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的限流速率 ,No data或者0表示没有限流。