Prometheus 入门教程(四):PromQL 快速入门

本文详细介绍了PromQL,Prometheus的数据查询语言,用于查询、聚合和运算时间序列数据。内容涵盖了PromQL的基础用法,如完全匹配、正则匹配、范围查询和时间位移操作,以及各种操作符,包括数学、布尔和集合运算符。此外,文章还讲解了聚合操作如sum、min、max、avg等,并介绍了内置函数如rate、predict_linear等,帮助读者深入理解Prometheus监控和数据分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击蓝色“陈树义”关注我哟

我们在 Prometheus 入门教程(三):Grafana 图表配置快速入门 中提到可以针对业务指标做自定义监控,其中有一个设置属性为 Metrics,即:

这个 Metrics 属性的值遵守了 PromQL 规则。我们只要学会了 PromQL 表达式,就知道了怎么设置这个属性了。

什么是 PromQL?

PromQL(Prometheus Query Language)是 Prometheus 内置的数据查询语言,它能实现对事件序列数据的查询、聚合、逻辑运算等。它并且被广泛应用在 Prometheus 的日常应用当中,包括对数据查询、可视化、告警处理当中。

简单地说,PromQL 广泛存在于以 Prometheus 为核心的监控体系中。所以需要用到数据筛选的地方,就会用到 PromQL。例如:监控指标的设置、报警指标的设置等等。

PromQL 基础用法

当 Prometheus 通过 Exporter 采集到相应的监控指标样本数据后,我们就可以通过 PromQL 对监控样本数据进行查询。

当我们直接使用监控指标名称查询时,可以查询该指标下的所有时间序列。我们这里启动 Prometheus 服务器,并打开 http://localhost:9090/graph 地址。在查询框中,我们输入:prometheus_http_requests_total 并点击执行。

可以看到我们查询出了所有指标名称为 prometheus_http_requests_total 的数据。

PromQL 支持户根据时间序列的标签匹配模式来对时间序列进行过滤,目前主要支持两种匹配模式:完全匹配和正则匹配。

完全匹配

PromQL 支持使用 = 和!= 两种完全匹配模式。

  • 等于。通过使用 label=value 可以选择那些标签满足表达式定义的时间序列。

  • 不等于。通过使用 label!=value 则可以根据标签匹配排除时间序列。

例如我们上面查询出了所有指标名称为 prometheus_http_requests_total 的数据。这时候我们希望只查看错误的请求,即过滤掉所有 code 标签不是 200 的数据。那么我们的 PromQL 表达式可以修改为:prometheus_http_requests_total{code!="200"}

从上图可以看到,查询出的结果已经过滤掉了所有 code 不为 200 的数据。

正则匹配

PromQL 还可以使用正则表达式作为匹配条件,并且可以使用多个匹配条件。

  • 正向匹配。使用 label=~regx 表示选择那些标签符合正则表达式定义的时间序列。

  • 反向匹配。使用 label!~regx 进行排除。

例如我想查询指标 prometheus_http_requests_total 中,所有 handler 标签以 /api/v1 开头的记录,那么我的表达式为:prometheus_http_requests_total{handler=~"/api/v1/.*"}

从上面的查询结果可以看出,查询的结果已经只保留了 handler 标签以 /api/v1 开头的数据。

范围查询

我们上面直接通过类似 prometheus_http_requests_total 表达式查询时间序列时,同一个指标同一标签只会返回一条数据。这样的表达式我们称之为瞬间向量表达式,而返回的结果称之为瞬间向量

而如果我们想查询一段时间范围内的样本数据,那么我们就需要用到区间向量表达式,其查询出来的结果称之为区间向量。时间范围通过时间范围选择器 [] 进行定义。例如,通过以下表达式可以选择最近 5 分钟内的所有样本数据:

prometheus_http_requests_total{}[5m]

通过查询结果可以看到,此时我们查询出了所有的样本数据,而不再是一个样本数据的统计值。

除了使用 m 表示分钟以外,PromQL 的时间范围选择器支持其它时间单位:

  • s - 秒

  • m - 分钟

  • h - 小时

  • d - 天

  • w - 周

  • y - 年

时间位移操作

在瞬时向量表达式或者区间向量表达式中,都是以当前时间为基准:

# 瞬时向量表达式,选择当前最新的数据
prometheus_http_requests_total{} 
# 区间向量表达式,选择以当前时间为基准,5分钟内的数据
prometheus_http_requests_total{}[5m] 

如果我们想查询 5 分钟前的瞬时样本数据,或昨天一天的区间内的样本数据呢?这个时候我们就可以使用位移操作,位移操作的关键字为 offset。

# 查询 5 分钟前的最新数据
http_request_total{} offset 5m
# 往前移动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值