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

如何为Prometheus告警配置恢复阶段的5分钟稳定性过滤器?

解决方案

核心问题是Prometheus默认的for子句仅控制告警触发的延迟逻辑,恢复时会在下一次评估周期(1分钟)内直接转为inactive。要实现恢复阶段的5分钟稳定性过滤,最直接的方案是使用Prometheus 2.24+版本支持的keep_firing_for参数,无需修改全局evaluation_interval影响其他服务。

修改后的告警规则

- alert: forecaster
  expr: rate(forecasts_published_counter{job="metrics_job", module_name="forecaster"}[5m]) <= 0
  for: 5m
  keep_firing_for: 5m

配置效果说明

  • 触发阶段:和原有逻辑一致,当rate(...) <= 0的状态持续满5分钟后,告警才会从pending转为firing,避免Push Gateway短时间宕机(如1分钟)触发误告警。
  • 恢复阶段:当指标恢复(rate(...) > 0)后,告警不会立刻转为inactive,而是继续保持firing状态5分钟。只有当这5分钟内指标持续正常推送(rate(...) > 0始终满足),5分钟后才会正式恢复告警,确保恢复的稳定性。

兼容旧版本的替代方案(若无法升级Prometheus)

如果你的Prometheus版本低于2.24,可通过记录规则结合PromQL模拟恢复延迟:

  1. 先创建记录规则,标记过去5分钟是否有指标推送:
- record: forecaster:has_metrics
  expr: count_over_time(forecasts_published_counter{job="metrics_job", module_name="forecaster"}[5m]) > 0
  1. 修改告警规则,仅当“无指标状态持续5分钟”触发告警,且恢复时需要“有指标状态持续5分钟”:
- alert: forecaster
  expr: |
    forecaster:has_metrics == 0
    and changes(forecaster:has_metrics[5m]) == 0
  for: 5m

这种方式通过changes()函数确保无指标状态的稳定性,恢复时则需要forecaster:has_metrics == 1的状态持续5分钟才会让告警表达式变为false,间接实现恢复延迟。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:22:56