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

使用avg_over_time函数返回值超预期及月度统计方法咨询

VictoriaMetrics按月份统计avg_over_time的问题解答

问题背景

需要统计2023年4月1日至2024年3月31日期间每个月的avg_over_time,当前使用step=30.4d配合vector(0)补全缺失值,但返回了13个结果而非预期的12个,同时有两个疑问:

  1. 2023年4月1日时间戳对应的avg_over_time是否代表4月1日至4月30日的统计值?
  2. 当前实现方法是否正确?

问题解答

1. 关于4月1日时间戳的统计范围

不是。在VictoriaMetrics中,带step的范围查询里,每个结果时间戳对应的统计区间是该时间戳往前推一个step长度的时间段。你设置了step=30.4d,所以4月1日的这个数据点,统计的是2023-04-01 00:00:00 - 30.4天到2023-04-01 00:00:00的区间,也就是约2023年3月1日到4月1日的数据,完全不符合你“当月全月统计”的需求。

2. 当前实现方法不正确,问题出在这几点:

  • step固定天数不匹配实际月份:不同月份天数不同(28/30/31天),用30.4d无法精准对齐自然月,会导致区间错位。
  • 区间逻辑反向:你需要的是“当月全月”的统计,但当前查询是“每个时间戳往前取step长度”,方向完全错误。
  • 返回13个结果的原因:2023-04-01到2024-03-31共365天,365/30.4≈12.006,加上起始时间戳,最终会生成13个采样点。
  • avg_over_time语法不完整:正确的avg_over_time需要指定区间后缀(比如[30d]),你当前的查询缺失了这部分,VM会默认用step作为区间长度,进一步加剧逻辑偏差。

优化实现方案

VictoriaMetrics没有直接的month函数,但可以通过时间函数分组的方式实现精准的自然月统计:

方案1:按年+月分组统计

直接提取样本的年和月标签,分组计算当月平均值,同时过滤目标时间范围:

avg by (year, month) (
  {__name__=~"label_1", label_2="123", label_3="456"}
  and on() year(timestamp()) >= 2023 and year(timestamp()) <= 2024
  and on() (
    (year(timestamp()) == 2023 and month(timestamp()) >= 4) 
    or (year(timestamp()) == 2024 and month(timestamp()) <= 3)
  )
)

方案2:补全缺失月份的0值

如果需要确保每个目标月份都有结果(无数据时显示0),可以结合vector(0)和预设的月份标签补全:

union(
  # 正常统计有数据的月份
  avg by (year, month) (
    {__name__=~"label_1", label_2="123", label_3="456"}
    and on() year(timestamp()) >= 2023 and year(timestamp()) <= 2024
    and on() (
      (year(timestamp()) == 2023 and month(timestamp()) >= 4) 
      or (year(timestamp()) == 2024 and month(timestamp()) <= 3)
    )
  ),
  # 生成所有目标月份的0值
  vector(0) + on() group_left(year, month) (
    {year="2023", month="4"} or {year="2023", month="5"} 
    or {year="2023", month="6"} or {year="2023", month="7"}
    or {year="2023", month="8"} or {year="2023", month="9"}
    or {year="2023", month="10"} or {year="2023", month="11"}
    or {year="2023", month="12"} or {year="2024", month="1"}
    or {year="2024", month="2"} or {year="2024", month="3"}
  )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:44:54