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

请求失败率超25%持续5分钟的Prometheus告警规则验证

Prometheus告警规则PromQL语句问题解答

需求回顾

  • 触发告警:请求失败率持续5分钟高于25%
  • 抑制条件:5分钟内总请求数少于10时不触发
  • 指标:result,带status="SUCCESS|FAIL"标签,还有customer_id等其他标签,需计算整体失败率

你写的PromQL存在的问题

  1. 总请求数计算错误:你用sum(rate(result[5m]))判断总请求数,但rate返回的是每秒请求速率,不是5分钟内的总请求数,应该用sum(increase(result[5m]))获取5分钟内的总请求增量(即总请求数)。
  2. 条件逻辑错误:unless sum(rate(...)) <10的逻辑是“当总请求速率小于10时不返回失败率”,既不符合“总请求数>=10”的要求,也用错了逻辑运算符,应该用and关联“总请求数>=10”的条件。
  3. 持续判断逻辑不完整:你用avg_over_time包裹布尔结果,但未明确判断是否所有时刻都满足条件,返回的0-1之间的平均值无法直接作为告警触发的布尔条件。

正确的PromQL语句

avg_over_time(
  (
    (sum(rate(result{status="FAIL"}[5m])) by () / sum(rate(result[5m])) by ())
    and
    sum(increase(result[5m])) by () >= 10
  ) > bool 0.25
[5m:]
) == 1

语句拆解说明

  • sum(rate(result{status="FAIL"}[5m])) by ():聚合所有标签(包括customer_id),计算整体的每秒失败请求速率
  • sum(rate(result[5m])) by ():聚合所有标签,计算整体的每秒总请求速率
  • 两者相除得到实时失败率
  • sum(increase(result[5m])) by () >= 10:计算5分钟内的总请求数(increase获取计数器增量),确保总请求数不少于10
  • > bool 0.25:将“失败率>25%且总请求数>=10”的结果转换为布尔值(1=满足,0=不满足)
  • avg_over_time(...[5m:]) == 1:检查过去5分钟内的所有时刻是否都满足条件(平均值为1说明所有样本都是1,即持续5分钟符合要求)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:10:41