prometheus中step或resolution的含义_iceman1952的博客

CSDN博客 · · 965 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

prometheus官方文档对resolution的解释真是语焉不详,只有下面寥寥几句话

https://prometheus.io/docs/prometheus/latest/querying/examples/

Subquery

Return the 5-minute rate of the http_requests_total metric for the past 30 minutes, with a resolution of 1 minute.

rate(http_requests_total[5m])[30m:1m]

由于官方文档的缺失,想了解也无从看起。网上有两篇文章解释的比较清楚:

https://blog.csdn.net/weixin_33778778/article/details/88705246

https://github.com/prometheus/docs/issues/699

但,还不够清楚,所以,我再来详细解释下。step和resolution是一个意思,下面我使用step

一:step对谁起作用?

只对range query起作用。

1. instant query时,无需step。instant query求值时就使用一个时刻点。当前时刻点或自定义的时刻点(通过API查询时)。

2. range query时,step是有用的。先定出时刻点,然后,对于每一个时刻点,向过去回溯,使用最先遇到第一个采样值。

二:step如何起作用?

在每一个时刻点上,使用该时刻点上(如果存在)的采样值,或回溯到过去,使用最先遇到第一个采样值。注意几点:

1. 每一个 “step应该停顿的时刻点”,总是会返回一个采样值的。

即使 多个 “step应该停顿的时刻点” 向过去回溯时,遇到的是identical sample,也总是返回这个identical sample的采样值。

啥时候会有这种情况呢?两个采样就能够跨好几个step(step灰常灰常小)。此时,就得到很多相同的采样值。

2. 例外是:

“step应该停顿的时刻点” 向过去回溯时,最多回溯5min(promql.LookbackDelta = 5 * time.Minute),超过这个时长就不返回采样值啦。

向过去回溯时,如果存在一个显式的staleness marker,也就不返回采样值啦。
 

三:step起作用的例子

假设我们的时序为X,X如下图所示,即:

0, 1, 2...是时刻点,时刻点上面的方框中是存储的采样值(没有值的说明无采样值)

如果step==5,那么X[15s:5s]应该返回什么呢?

首先,找到每一个 “step应该停顿的时刻点”,该例中,“step应该停顿的时刻点” 为:t0, t5, t10, t15

再者,在每一个“step应该停顿的时刻点”上,向过去回溯,于是,我们得到X[15s:5s]:

(t0,    不存在。回溯时不会脑补数据的,没有就是没有)

(t5,    4)

(t10,  7)

(t15,  15)

四:解释这三个表达式

http_requests_total{job="prometheus"}   offset 1w

结果为 instant vector。即:从当前时刻,向过去回溯1w,取那个时刻点的 “名字为http_requests_total且label job为prometheus” 的 每一个time series的 单一一个采样。

http_requests_total{job="prometheus"}[10m]   offset 1w

结果为 range vector。从当前时刻,向过去回溯1w,从那个时刻起再回溯10min,取这10min之内的 “名字为http_requests_total且label job为prometheus”的 每一个time series的 “每一个”采样。

(不对喽,不是“每一个”采样。事实上,此时使用了全局的step或resolution,应该是15s,然后,就和下面一条一样啦)

http_requests_total{job="prometheus"}[10m:22s]   offset 1w

结果为 range vector。从当前时刻,向过去回溯1w,从那个时刻起再回溯10min,取这10min之内的 “名字为http_requests_total且label job为prometheus”的 每一个time series的采样。

怎么取采样呢?这么取:

step或resolution为22s,于是,把10min,从最遥远的过去开始,按22s的长度进行分割,得到 每一个“step应该停顿的时刻点”,对于每一个点,使用该时刻点上(如果存在)的采样值,或,向过去回溯,使用最先遇到第一个采样值(回溯时,如果自己step区间内没找到值,则一直向过去回溯(最多5min),直到遇到第一个采样值)。

 (这个就对了)
 

完!

本文来自:CSDN博客

感谢作者:CSDN博客

查看原文:prometheus中step或resolution的含义_iceman1952的博客

965 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传