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

Grafana间隔变量:如何为rate()查询设置最小间隔阈值?

Grafana间隔变量与rate()函数的最小间隔解决方案

核心需求实现思路

你要的max($interval,1m)逻辑完全可以实现,两种方式任选:

方式一:直接在PromQL查询中嵌入间隔判断

利用Grafana的模板变量表达式,直接在rate()的时间窗口部分做判断,无需新增变量:

# 原查询(15s间隔可能无数据)
rate(your_metric[$myinterval])

# 修改后:强制最小1m间隔
rate(your_metric[$${__eval:if(toSeconds($myinterval) < 60, '1m', $myinterval)}])

解释:toSeconds($myinterval)把间隔转成秒数,判断如果小于60秒(即1m),就用"1m",否则用原变量值。Grafana会在渲染查询时自动替换成正确的间隔字符串。

方式二:创建链式变量统一管理rate专用间隔

如果希望所有rate查询复用这个逻辑,更推荐创建链式变量:

  1. 保留已有的$myinterval变量(Interval类型,包含15s、1m、5m等选项)
  2. 新建变量$myinterval_rate,类型选择Query,数据源选Grafana(本地处理,无需Prometheus)
  3. 变量查询内容填写JavaScript表达式:
toSeconds($myinterval) < 60 ? "1m" : $myinterval
  1. 保存变量后,所有使用rate()的图表用$myinterval_rate作为时间窗口间隔,其他图表继续用$myinterval即可。

关于数据平均的实现

针对你提到的交替序列求平均需求,直接使用Prometheus的avg_over_time()函数即可:

avg_over_time(your_metric[$myinterval])

当$myinterval大于基础采样率(15s)时,该函数会自动把窗口内的所有采样点做平均,比如1m间隔下,4个15s采样点(100、0、100、0)会被计算为50,完全符合你的需求。

为什么rate()在15s间隔下无数据?

rate()函数需要时间窗口内至少有2个采样点才能计算速率,而你的基础采样率是15s,rate(metric[15s])的窗口刚好只能容纳1个采样点,所以返回空。强制用1m窗口后,窗口内有4个采样点,就能正常计算速率了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:12:06