详解Prometheus range query中的step参数

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 详细介绍了Prometheus查询参数step的作用

GH Page地址

Prometheus有两种query:instant queryrange query。本文要讲的就是range query中的step参数。

range query是非常常见的一种query,看看它有哪些参数:

  • query=<string>: PromQL表达式。
  • start=<rfc3339 | unix_timestamp>: 时间范围的开始。
  • end=<rfc3339 | unix_timestamp>: 时间范围的结束。
  • step=<duration | float>: 查询解析度(query resolution)。
  • timeout=<duration>: 执行超时。这个参数是可选的。

在Prometheus expression browser里看到的是这样的:

expression_browser_overview

注意到上图中的Res框里没有给值,没有给的话Prometheus会自动给一个值,这个值在图示右上角可以看到。

step对于查询结果的影响

Prometheues在对PromQL表达式求值的逻辑是这样的(详见这个issue里的回答):

  1. 对于[start, end]时间区间,从start开始,以step为长度,把时间区间分成若干段
  2. 对每个段进行求值

举例:start=10,end=20,step=2,那么就会有ts=10,ts=12,ts=14,ts=16,ts=18,ts=206段,然后为这6个段进行求值。求值方式视乎表达式中Time series selector的类型而定。

PromQL有两种Time series selector:instant vector selectorrange vector selector。下面将分别讲解:

Instant vector selector

形如下面的就是Instant vector selector,x是metric的名字。

x

Prometheus在对每段Instant vector selector求值的逻辑是这样的:

  • 从该段的timestamp(含)往前找,取第一个找到的data point的值。如果有一个data point的timestamp==该段的timestamp,则直接使用该data point。
  • 如果该段timestamp往前的5分钟范围内没有找到任何data point,则该段无值。

下面这张图解释了上面逻辑:

instant_vector_selector_1

图中的绿点是Prometheus实际存储的数据,按照时间轴从左到右排列。蓝点是根据step参数的求值结果。

当data point间隔比step更大的时候会发生下图这种情况:

instant_vector_selector_2

可以看到有两个段的求值结果来自于同一个data point。

Range vector selector

形如下面的就是Range vector selector,x是metric的名字,方括号里的是range duration

x[5m]

range vector select返回的是当前timestamp之前的range duration内的所有data point。range vector是不能直接用做绘图的,你得用某些function把range vector转换成instant vector才行,比如rate()

下图解释了是如何对Range vector selector进行分段求值的:

range_vector_selector

step和rate duration

steprange duration是独立的两个参数,在某些情况下两者的值存在某种限制条件,这里例举rate()来说明。rate()的作用是获得一个range-vector的每秒平均增长率。

如果step=10mrange duration=5m,那么rate在计算的时候会丢失一半的数据,两个分段之间的data point有一半没有被纳入计算。前面那张图就存在数据丢失的情况,有一个data point被漏掉了。

因此在使用rate()时,range duration得大于等于step

而如果是irate(),这个限制则是range duration不得大于step(详见Brian Brazil的Presentation)。

Grafana中的step参数

在Grafana中并没有直接提供step参数,而是这两个参数:min stepresolution文档在这里)。min step故名思义设定的是step的最小值,那么resolution是什么呢?

大家都知道Grafana都是用来画图的,比如下面这张图Y轴是值,X轴则是时间线,因此在X轴方向的每个像素都代表了一个timestamp。

grafana_graph

resolution就是用来根据像素来计算step的一个参数。下面用6个像素以及它们的timestamp来说明:

x=1,ts=0; x=2,ts=5; x=3,ts=10; x=4,ts=15; x=5,ts=20; x=6,ts=25
  • resolution=1/1时,那么step就是相邻像素所代表的timestamp的差,即5;
  • resolution=1/2时,那么step就是相隔1个像素的两个像素的timestamp的差,即10;
  • resolution=1/3时,那么step就是相隔2个像素的两个像素的timestamp的差,即15;
  • 以此类推

而每个像素所代表的timestamp受两个因素影响:

  1. 查询所定义的时间范围
  2. Graph的宽度(单位:像素)

所以在Grafana发起的查询中step参数是动态的。其实这也是很合理的,因为只有这样才能够在Graph宽度小的时候绘图更粗糙(即step更大),Graph宽度大的时候绘图更精细(即step更小,但是不能小于min step)。实际发起的请求的step参数你可以在Graph的Query Inspector里看到:

grafana_query_inspector

但是我们之前不说过了rate()range duration不能小于step吗?那么把range duration给固定值的化就不太好了,怎么办呢?你可以使用Grafana提供的内置变量$__interval,它代表的Grafana就是计算出来的step的值。比如这样就能够将range durationstep保持一致了(更多内置变量可以见这里):

rate(x[$__interval])

所以,你想自己实验一把

如果你想自己动手实验,但是又苦于无法制造干净的假数据,那么可以参考这篇文章推荐的方法

目录
相关文章
|
Prometheus Cloud Native 固态存储
|
4月前
|
Prometheus 监控 Cloud Native
云原生监控实战:Prometheus+Grafana快速搭建指南
云原生监控实战:Prometheus+Grafana快速搭建指南
|
4月前
|
存储 Prometheus 监控
OSS监控体系搭建:Prometheus+Grafana实时监控流量、错误码、存储量(开源方案替代云监控自定义视图)
本方案基于Prometheus构建OSS监控系统,涵盖架构设计、指标采集、可视化、告警及性能优化,助力企业实现高可用、低成本的自建监控体系。
424 1
|
5月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
405 79
|
4月前
|
存储 监控 Cloud Native
云原生监控实战:Prometheus+Grafana打造RDS多维度预警体系
本方案构建了基于Prometheus与Thanos的云原生RDS监控体系,涵盖数据采集、存储、可视化与告警全流程。支持10万+QPS采集、90%存储压缩,具备&lt;30秒告警延迟能力。通过自定义指标与智能预警策略,显著提升故障发现效率,实现分钟级响应。
327 5
|
4月前
|
Prometheus 监控 Cloud Native
|
3月前
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
|
11月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
982 3
|
7月前
|
Prometheus Kubernetes 监控
Kubernetes监控:Prometheus与AlertManager结合,配置邮件告警。
完成这些步骤之后,您就拥有了一个可以用邮件通知你的Kubernetes监控解决方案了。当然,所有的这些配置都需要相互照应,还要对你的Kubernetes集群状况有深入的了解。希望这份指南能帮助你创建出适合自己场景的监控系统,让你在首次发现问题时就能做出响应。
327 22
|
10月前
|
存储 数据采集 Prometheus
Grafana Prometheus Altermanager 监控系统
Grafana、Prometheus 和 Alertmanager 是一套强大的开源监控系统组合。Prometheus 负责数据采集与存储,Alertmanager 处理告警通知,Grafana 提供可视化界面。本文简要介绍了这套系统的安装配置流程,包括各组件的下载、安装、服务配置及开机自启设置,并提供了访问地址和重启命令。适用于希望快速搭建高效监控平台的用户。
513 20