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

如何用MetricsQL/PromQL实现按小时时段的均值与标准差关联查询

在MetricsQL中实现按小时时段的28天均值/标准差关联

可以通过VictoriaMetrics的MetricsQL实现需求,原生PromQL因缺少时间戳字段提取和灵活聚合的函数,无法直接完成。以下是具体实现方案:

核心思路

  1. 为原始数据的每个样本添加小时标签,标记其所属的一天中的小时时段(0-23)
  2. 在过去28天的时间范围内,按小时分组计算均值和标准差
  3. 将原始数据与对应小时的统计值关联,返回包含原始值、均值、标准差的结果

完整MetricsQL查询

join(
  -- 原始数据,添加hour标签
  hitcount with(hour=hour(ts)),
  -- 过去28天每个小时的均值
  aggregate(hitcount{__range__=28d}, "avg", by=(hour(ts))) with(name="average"),
  -- 过去28天每个小时的标准差
  aggregate(hitcount{__range__=28d}, "stddev", by=(hour(ts))) with(name="stddev"),
  -- 按hour标签关联所有序列
  on(hour)
)

各部分说明

  • hitcount with(hour=hour(ts)):为hitcount指标的每个样本添加hour标签,值为该样本时间戳对应的小时数(0-23)。
  • aggregate(hitcount{__range__=28d}, "avg", by=(hour(ts))):限定时间范围为过去28天,按小时分组计算hitcount的均值,结果每个小时对应一条时间序列,标签为hour。
  • aggregate(..., "stddev", ...):逻辑同上,计算每个小时时段的标准差。
  • join(...) on(hour):将原始数据、均值序列、标准差序列通过hour标签关联,最终每个原始样本都会带上对应小时的28天均值和标准差。

注意事项

  • __range__=28d用于指定聚合的时间范围为过去28天,确保统计的是目标时段内的数据。
  • 该方案依赖VictoriaMetrics的MetricsQL特性(hour(ts)函数、aggregate函数、join函数),原生PromQL无法直接实现相同逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:20:35