Grafana+Prometheus如何实现当前值超近24点最大值110%时触发告警
可行性结论
该动态告警逻辑完全可以在Grafana+Prometheus技术栈中原生实现,无需额外安装插件或接入第三方服务,直接通过标准PromQL编写规则即可满足需求。
前提说明
你提到24个数据点对应2小时监控时长,可推算当前指标采集间隔为5分钟,以下语句默认基于该采集间隔编写,如果你的实际采集间隔有调整,对应修改窗口时长和偏移量即可。
注意:逻辑实现默认做了合理性修正:如果直接将最新采集点纳入24个基准点的计算范围,当最新点本身就是24个点中的最大值时,它永远不可能超过自身的110%,会导致告警逻辑失效。因此常规突增类告警的基准统计窗口会偏移一个采集周期,排除当前判断的最新点,取此前24个连续点作为统计基准。如果你确实需要将最新点纳入基准统计,删除语句中的offset配置即可。
PromQL查询语句
推荐写法(逻辑无缺陷,适配突增告警场景)
# 将your_metric_name替换为你实际要监控的指标名,可按需加标签筛选条件 your_metric_name > 1.1 * max_over_time(your_metric_name[2h] offset 5m)
语句各部分作用:
your_metric_name:取对应指标的最新采集值,会自动按指标自带的标签维度(如实例ID、业务标签、资源标识等)做分组独立计算,不会跨维度混算阈值max_over_time(your_metric_name[2h] offset 5m):统计最新采集点之前、连续2小时内24个数据点的最大值,偏移5m是为了排除当前最新点对基准值的干扰1.1 *:将基准最大值乘以1.1,即你要求的110%触发阈值
严格匹配原描述写法(含逻辑缺陷,仅作参考)
如果你确认需要将最新点纳入24个基准点的统计范围,使用以下语句即可:
your_metric_name > 1.1 * max_over_time(your_metric_name[2h])
Grafana侧配置方式
- 若使用Grafana统一托管告警:新建告警规则时,在Prometheus数据源的查询栏填入上述语句,触发条件设置为查询结果值大于0即可——满足告警条件的时序会返回正数,不满足条件的时序不会出现在查询结果中
- 若使用Prometheus原生告警规则:将上述语句填入告警规则的
expr字段,按需配置for等待时长、告警标签、注解内容即可
适配调整说明
如果你的指标采集间隔不是5分钟,按以下规则调整参数即可:
- 统计窗口长度 = 采集间隔 * 24
- 偏移量 = 实际采集间隔
举个例子:如果采集间隔为1分钟,24个点对应24分钟时长,语句就调整为your_metric_name > 1.1 * max_over_time(your_metric_name[24m] offset 1m)
内容的提问来源于stack exchange,提问作者banjara
相关产品推荐
相关产品推荐

