Prometheus 教程

PromQL 时间位移选择器

时间位移选择器(Offset Vector Selector)允许用户选择时间序列的过去或未来的数据。它通过在时间序列选择器后添加一个 offset 关键字来实现,该 offset  表示与当前时间相比的时间差。

offset 修饰符允许更改查询中各个瞬时向量和范围向量的时间偏移量。

例如:下面的表达式返回 prometheus_http_requests_total 指标相对于当前查询时间的过去 5 分钟的值:

prometheus_http_requests_total offset 5m

执行效果如下图:

时间位移选择器

请注意,offset 修饰符必须紧跟在选择器之后,下面的示例是正确的:

sum(prometheus_http_requests_total{code="200"} offset 5m) // 正确

而以下则是不正确的:

sum(prometheus_http_requests_total{code="200"}) offset 5m // 无效

同样的方法也适用于范围向量。这将返回一周前 prometheus_http_requests_total 指标的 5 分钟速率:

rate(prometheus_http_requests_total[5m] offset 1w)

在查询过去的样本时,负偏移量可用于向前进行时间比较,即查询未来的数据:

rate(prometheus_http_requests_total[5m] offset -1w)

请注意,这里允许查询在其评估时间之前进行查询。

@ 修饰符

使用 @ 修饰符可以更改查询中各个瞬时和范围向量的计算时间。为 @ 修改器提供的时间是 unix 时间戳,并用浮点字面进行描述。

例如,下面的表达式会返回 2021-01-04T07:40:00+00:00 时的 http_requests_total 值:

http_requests_total @ 1609746000

请注意,@ 修饰符必须紧跟在选择器之后,即以下内容是正确的:

sum(http_requests_total{method="GET"} @ 1609746000) // GOOD.

而以下内容是不正确的:

sum(http_requests_total{method="GET"}) @ 1609746000 // INVALID.

同样的方法也适用于范围向量。返回 http_requests_total 在 2021-01-04T07:40:00+00:00 时的 5 分钟速率:

rate(http_requests_total[5m] @ 1609746000)

@ 修饰符支持上述数字字面的所有表示方法。它与偏移修饰符配合使用,偏移量相对于 @ 修饰符的时间使用。无论修饰符的顺序如何,结果都是一样的。

例如,这两个查询将产生相同的结果:

# offset after @
http_requests_total @ 1609746000 offset 5m
# offset before @
http_requests_total offset 5m @ 1609746000

此外,start() 和 end() 作为特殊值也可用作 @ 修饰符的值。

对于范围查询,它们分别表示范围查询的开始和结束,并在所有步骤中保持不变。

对于瞬时查询,start() 和 end() 都解析为计算时间。

http_requests_total @ start()
rate(http_requests_total[5m] @ end())

请注意,@ 修饰符允许查询在计算时间之前进行查询。

子查询

子查询允许您针对给定的范围和分辨率运行即时查询。子查询的结果是一个范围向量。

语法:

<instant_query> '[' <range> ':' [<resolution>] ']' [ @ <float_literal> ] [offset <duration> ]。

注意:<resolution> 为可选项,默认为全局评估间隔。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号