You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VictoriaMetrics query_range中avg_over_time窗口时间范围疑问

VictoriaMetrics范围查询结果的时间窗口含义疑问

我通过Java以HTTP方式执行了以下VictoriaMetrics范围查询:

http://localhost:8400/select/0/prometheus/api/v1/query_range?query=avg_over_time(numeric{bom_id = "id1", entry_id = "id2"}) or vector(0)&start=1640995200&end=1735689599&step=31536000s

查询的start为2022年1月1日,end为2024年12月31日,step为365天,目的是计算2022年起的年度平均值。但返回结果包含四个时间戳:

[
    [
        1640995200, //Jan1st 2022
        "15.1"
    ],
    [
        1672531200,// Jan1st 2023
        "12.1"
    ],
    [
        1704067200, // Jan1st, 2024
        "10.8"
    ],
    [
        1735603200, // Dec 31st, 2024 12 AM
        "11.8"
    ]
]

我的疑问是:时间戳1640995200(2022年1月1日)对应的返回值,代表的是2022年1月1日至12月31日的平均值,还是过去365天(2021年1月2日至12月31日)的平均值?


回答

时间戳1640995200对应的返回值,是从该时间戳往前推365天(即2021年1月1日到2022年1月1日)的数值平均值,核心逻辑如下:

  • 在兼容PromQL的VictoriaMetrics中,query_range查询里的avg_over_time这类范围函数,计算规则是:每个输出时间戳T对应的统计窗口是[T - step, T),也就是从T往前推一个step长度的区间到T本身(不含T点)。
  • 你的查询step设为365天(31536000秒),所以第一个时间戳1640995200(2022-01-01 00:00:00)对应的计算区间是1640995200 - 31536000 = 1609459200(2021-01-01 00:00:00)到1640995200,覆盖的是2021全年到2022年元旦前的所有样本数据。

如果要获取2022年全年(2022-01-01至2022-12-31)的平均值,需要调整查询逻辑:

  1. 把输出时间戳对齐到年度结束时间,比如将start设为2023年1月1日,step保持365天,此时第一个时间戳对应的窗口就是2022全年;
  2. 或者使用偏移量调整窗口,示例查询:
avg_over_time(numeric{bom_id="id1", entry_id="id2"}[1y]) offset 1y

内容的提问来源于stack exchange,提问作者underachiever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:07:20