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

Grafana选自定义起止时间时如何计算Prometheus查询的时间间隔

问题原因

你用相对时间范围时$__range会自动解析为你选择的相对时长,比如最近1小时就对应1h,所以increase(metric[$__range])可以直接取到对应区间的增量。自定义起止时间时不需要手动计算offset,Grafana的内置变量本身就可以适配这种场景,你遇到的异常大概率是配置问题而非写法逻辑错误。

解决方案

方案1:直接复用内置变量,无需额外调整

Grafana的$__range变量本身兼容所有时间范围选择模式,不管是相对的「最近N分钟/小时/天」还是自定义from/to起止时间,它都会自动计算为结束时间 - 开始时间的时长,你原本的increase(metric[$__range])写法在自定义时间范围下也可以正常生效,如果查询异常可以优先排查两个点:

  • 你的Prometheus指标采集间隔是否远小于所选时间区间,区间过短没有采集到对应数据会返回空值
  • 检查指标是否存在标签冲突,导致指定时间范围内的时间序列出现断层

方案2:特殊场景下offset的计算方式

如果你有跨区间对比等特殊需求,确实需要手动指定offset,计算规则为offset值等于当前查询时间减去目标查询区间的结束时间,示例如下:
假设你选择的自定义时间范围是2024-05-01 00:00:00到2024-05-02 00:00:00,当前查询时间为2024-05-03 12:00:

  1. 先算区间时长为24h,对应区间向量范围就是[24h]
  2. 再算offset为当前时间减去目标区间结束时间的差值,即36h
  3. 最终PromQL为increase(metric[24h] offset 36h)

在Grafana中可以用内置变量简化offset计算:
Grafana的自定义时间范围结束时间对应毫秒级时间戳变量$__to,Prometheus的time()函数返回秒级当前时间戳,offset时长可以直接写为time() - $__to / 1000,自动适配任意自定义时间范围。

你需要的两个指标查询示例

假设count类型指标名为query_request_count,sum类型指标名为query_request_object_sum:

  • 指定时间范围内查询次数:increase(query_request_count[$__range])
  • 指定时间范围内被查询对象总数:increase(query_request_object_sum[$__range])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:54:02