PromQL选择器
PromQL(Prometheus Query Language)是Prometheus的核心查询语言,用于从时间序列数据库中提取和分析数据。选择器是PromQL中最基础且重要的概念之一,它允许你从海量时间序列中筛选出符合特定条件的序列。本文将详细介绍PromQL选择器的语法、用法以及实际应用场景。
什么是PromQL选择器?
PromQL选择器用于从Prometheus的时间序列数据库中筛选出符合特定标签和时间范围的时间序列。每个时间序列都由一个指标名称(metric name)和一组标签(labels)唯一标识。选择器通过匹配这些标签来过滤出所需的数据。
选择器的基本语法如下:
<metric_name>{<label_name>=<label_value>, ...}
<metric_name>
:指标名称,例如http_requests_total
。{<label_name>=<label_value>, ...}
:标签过滤条件,用于筛选特定标签值的时间序列。
选择器的类型
PromQL选择器主要分为两种类型:
- 即时向量选择器(Instant Vector Selector):用于查询当前时间点的数据。
- 范围向量选择器(Range Vector Selector):用于查询一段时间范围内的数据。
1. 即时向量选择器
即时向量选择器用于查询当前时间点的数据。它返回一个包含所有匹配时间序列的即时向量。
示例
假设我们有一个指标 http_requests_total
,它记录了HTTP请求的总数,并且有以下标签:
method
:请求方法(如GET
、POST
)。status
:响应状态码(如200
、404
)。
以下查询将返回所有 http_requests_total
指标的当前值:
http_requests_total
如果我们只想查询 method="GET"
且 status="200"
的请求,可以使用以下选择器:
http_requests_total{method="GET", status="200"}
输出示例
假设当前时间点的数据如下:
http_requests_total{method="GET", status="200", instance="localhost:8080"} 150
http_requests_total{method="POST", status="200", instance="localhost:8080"} 50
查询结果将返回:
http_requests_total{method="GET", status="200", instance="localhost:8080"} 150
2. 范围向量选择器
范围向量选择器用于查询一段时间范围内的数据。它返回一个包含所有匹配时间序列的范围向量。
示例
以下查询将返回过去5分钟内 http_requests_total
指标的所有值:
http_requests_total[5m]
如果我们只想查询 method="GET"
且 status="200"
的请求,可以使用以下选择器:
http_requests_total{method="GET", status="200"}[5m]
输出示例
假设过去5分钟内的数据如下:
http_requests_total{method="GET", status="200", instance="localhost:8080"} @1622547600 150
http_requests_total{method="GET", status="200", instance="localhost:8080"} @1622547900 160
http_requests_total{method="GET", status="200", instance="localhost:8080"} @1622548200 170
查询结果将返回:
http_requests_total{method="GET", status="200", instance="localhost:8080"} @1622547600 150
http_requests_total{method="GET", status="200", instance="localhost:8080"} @1622547900 160
http_requests_total{method="GET", status="200", instance="localhost:8080"} @1622548200 170
标签匹配操作符
PromQL选择器支持多种标签匹配操作符,用于更灵活地筛选数据:
=
:精确匹配。!=
:不等于。=~
:正则表达式匹配。!~
:正则表达式不匹配。
示例
以下查询将返回所有 method
以 G
开头的请求:
http_requests_total{method=~"G.*"}
以下查询将返回所有 status
不为 200
的请求:
http_requests_total{status!="200"}
实际应用场景
场景1:监控HTTP请求的成功率
假设我们想要监控 http_requests_total
指标中 status="200"
的请求占总请求的比例。可以使用以下查询:
sum(rate(http_requests_total{status="200"}[5m])) / sum(rate(http_requests_total[5m]))
场景2:筛选特定实例的CPU使用率
假设我们有一个指标 node_cpu_seconds_total
,记录了每个CPU核心的使用时间。以下查询将返回 instance="localhost:9100"
的CPU使用率:
rate(node_cpu_seconds_total{instance="localhost:9100"}[5m])
总结
PromQL选择器是Prometheus查询语言的核心功能之一,它允许你通过指标名称和标签筛选出所需的时间序列数据。本文介绍了即时向量选择器和范围向量选择器的基本用法,并通过实际案例展示了如何在实际场景中应用这些选择器。
- 使用正则表达式匹配(
=~
和!~
)可以更灵活地筛选数据。 - 范围向量选择器通常与聚合函数(如
rate()
)结合使用,以计算一段时间内的变化率。
附加资源
练习
- 编写一个PromQL查询,返回过去10分钟内
http_requests_total
指标中method="POST"
的请求总数。 - 使用正则表达式匹配,筛选出所有
status
以4
开头的请求。
通过练习,你将更深入地理解PromQL选择器的用法!