Prometheus Range Query起始时间变更致全时段数值异常的问题排查
问题原因解析
这一现象的核心是Prometheus的时间范围对齐规则和increase函数的计算逻辑共同作用的结果,具体拆解如下:
1. Range Query的样本点生成规则
当你使用步长1d执行Range Query时,Prometheus会按公式生成一系列样本点时间:
t_n = 起始时间 + n * 步长 (n为非负整数,且t_n ≤ 结束时间)
- 若起始时间为
2022-12-23 00:00:00(恰好是1d步长的整数倍),样本点会严格对齐自然日的00:00:00,比如2022-12-23 00:00:00、2022-12-24 00:00:00等。 - 若起始时间为
2022-12-23 00:00:01或00:06:40(非步长整数倍),样本点会带有固定偏移,比如2022-12-23 00:00:01、2022-12-24 00:00:01,或2022-12-23 00:06:40、2022-12-24 00:06:40。
2. 嵌套查询的时间范围偏移交互
你的查询sum_over_time(increase(pve_network_receive_bytes{id="000"}[1d] offset-24h )[1d:1d])逻辑为:
- 对
pve_network_receive_bytes的[1d]范围整体偏移24小时,得到一个过去1天的时间窗口。 - 用
increase计算该窗口内gauge指标的增量(本质是窗口首尾样本的差值)。 - 通过
[1d:1d]子查询按天提取上述增量,最后用sum_over_time汇总(此处等价于直接取子查询的单样本值)。
样本点时间不同时,对应的偏移后窗口会同步变化:
- 对齐
00:00:00的样本点,偏移后的窗口是X日00:00:00到X+1日00:00:00(左闭右开区间)。 - 带偏移的样本点,偏移后的窗口是
X日HH:MM:SS到X+1日HH:MM:SS,和前者的窗口差了固定时长(1秒或6分40秒)。
3. increase函数的样本依赖
increase对gauge指标的增量计算完全依赖窗口内的第一个和最后一个样本:
- 对齐
00:00:00的窗口会包含X日00:00:00的样本,但不包含X+1日00:00:00的样本。 - 带偏移的窗口会跳过
X日00:00:00的样本,反而可能包含X+1日HH:MM:SS的样本(若存在)。
这种样本集合的差异会导致每个窗口的增量计算结果变化;由于所有带偏移的样本点偏移量一致,它们的窗口样本集合模式完全相同,因此结果保持一致;但对齐00:00:00的窗口样本模式完全不同,所以所有时段的数值都会变化。
内容的提问来源于stack exchange,提问作者amin mahmoudi
相关产品推荐
相关产品推荐

