offset 与 @ 是什么
两个时间修饰符用来改变查询的时间语义:offset 把查询窗口整体前移(如 offset 1w 看上周同一时刻),@ 把查询固定到某个时间点(如 @ end() 对齐查询区间的结束时间)。它们常用于同期对比与多面板对齐,写对位置是关键。
基本信息
| offset 语法 | 指标[区间] offset 时长 |
|---|---|
| offset 作用 | 窗口整体前移,可写 1w、1d、5m |
| @ 语法 | @ <Unix 秒> / @ start() / @ end() |
| @ 作用 | 固定求值时间点,忽略查询时刻 |
| 书写位置 | 都写在区间选择器之后 |
| 常见用途 | 同期对比、多面板时间对齐 |
典型使用场景
- 对比本周与上周同一时刻的流量与错误率
- 大促期间把当天曲线与历史峰值日对齐观察
- 多块面板使用 @ end() 让数据点落在同一时刻,避免拼接错觉
- 做容量对比时把去年同期数据拉到同一张图上
- 复盘时固定到故障发生的时间点取快照数值
- 跨时区团队协作时用 @ 固定时间点统一口径
常见用法
常见用法
# 与上周同一时刻对比
sum(rate(http_requests_total[5m] offset 1w))
# 固定到某个时间戳
sum(rate(http_requests_total[5m] @ 1755000000))
# @ end():对齐到查询区间的结束时间
sum(rate(http_requests_total[5m] @ end()))
# offset 写在区间选择器之后
node_load1 offset 1d修饰符对照
| 写法 | 含义 | 典型用途 |
|---|---|---|
| offset 1w | 窗口前移一周 | 与上周同期对比 |
| offset 1d | 窗口前移一天 | 日同比 |
| @ end() | 固定到区间结束时间 | 多面板对齐 |
| @ <Unix 秒> | 固定到指定时刻 | 复盘取快照 |
@ 的数值是 Unix 秒;与看板的时间联动变量混用时注意语义差异,否则会得到固定的历史值而不是当前值。
offset 必须写在区间选择器之后:http_requests_total[5m] offset 1w,位置写错会直接报错。
子查询中同时使用 @ 与 offset 时语义较绕,建议先用简单查询验证结果再嵌入告警规则,避免规则长期给出错误判断。
offset 会查询更早的数据:若保留期短于回溯时长,结果会为空,排查时先确认 TSDB 里是否还有那段时间的数据。