promql 基本概念 (一)

目录
警告
本文最后更新于 2022-11-29 23:16,文中内容可能已过时。

好久没发笔记了,发点存货 (●ˇ∀ˇ●)

一组时间序列,每一个时间序列包含一个样本,所有时间序列共享一个时间点。 比如 http_requests_total 指标

42009-exx1t4nz5w.png
42009-exx1t4nz5w.png

红框内的算一组时间序列 (所有时间序列),每一行算一个时间序列,每一个时间序列都有自己的 value 即样本。 所有时间序列共享一个时间点是什么意思呢?可以看到上面的一组时间序列的时间点都是 2022-07-18 21:12:15 的。

一组时间序列,每个时间序列包含 N 个样本数据 (随时间变化的) 还是拿 http_requests_total 指标举例

46134-6267onrxtjw.png
46134-6267onrxtjw.png

可以看到我们在最后加了 [1m], 即 http_requests_total[1m] 什么意思呢? 获取每个时间序列过去 1 分钟内的所有样本和对它应的时间,因为没有指定时间,所以默认就是当前时间,含义就是当前时间 - 1m 这个时间范围的数据。可以看到这样结果和瞬时向量有很大的区别,这种数据就是范围向量了。为什么一个时间序列只有 4 个样本数据呢?因为 15 秒收集一次,1 分钟刚好 4 个。

就是简单的数字、浮点型数据

用于修改瞬时向量、范围向量的时间偏移量。 举个例子 http_requests_total offset 1m

33556-8u1smsk7a1e.png
33556-8u1smsk7a1e.png

正常情况下我们查询是当前时间,加了 offset 1m 后就代表当前时间减 1m。这里和 [1m] 不一样的是,[1m] 的查询结果是范围向量,而 offset 1m 的结果是不会变的,他还是瞬时向量,最终他的含义就是获取 1 分钟前的时间点的样本数据

在举一个例子 http_requests_total[1m] offset 2m

78122-gb5xr85alv4.png
78122-gb5xr85alv4.png

首先看结果他肯定是一个范围向量,先不看 offset 2m,先看 http_requests_total[1m] 他的含义是获取当前时间-1m当前时间的数据。offset 做了什么呢?其实他就是把当前时间修改了,也就是当前时间-2m,最终含义就变成了: 获取 (当前时间-2m)-1m当前时间-2m 的数据

offset 还可以指定负数,也就是将时间点偏移到未来,这个的使用场景我只能想到是在指定了查询时间的情况下,比如 (http_requests_total{job="RabbitMQ"} offset -1d) - (http_requests_total{job="RabbitMQ"} offset 1d)

06983-4wset9fq927.png
06983-4wset9fq927.png

将这个式子想象成一个线段,这将以 2022-07-15 00:00:00 为中点,用右边的值减去左边的值就是中间区域的值了,最终计算出 14 号到 16 号的请求数。

44501-fblz2hr0ds9.png
44501-fblz2hr0ds9.png

注意使用负偏移需要开启参数–enable-feature=promql-negative-offset

用来设置查询值的时间,比如 http_requests_total @ 1609746000 查询 2021 年 1 月 4 日 15 点 40 的值。 一般情况下用 api 查询就足够了,query API 可以指定 time 参数,query_range API 可以指定 startend 参数。 如果想要使用 @修饰符需要启用 --enable-feature=promql-at-modifier

请我喝杯水
SoulChild 微信号 微信号
SoulChild 微信打赏 微信打赏
0%