时间位移选择器(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> 为可选项,默认为全局评估间隔。