【问题标题】:Alert when failure rate stays above 25% for 5 mins当故障率保持在 25% 以上 5 分钟时发出警报
【发布时间】:2023-01-17 08:29:02
【问题描述】:

我正在尝试创建一个警报,如果发出的请求的失败率在 5 分钟内保持在 25% 以上,除非 5 分钟内发出的请求总数少于 10,否则该警报将触发。

我有一个名为 result 的指标,参数为 status="SUCCESS|FAIL"

我尝试了以下方法:

avg_over_time(
  (
    (
      sum(rate(result{status="FAIL"}[5m])) /
      sum(rate(result[5m])) unless
      sum(rate(result[5m])) < 10
    ) > BOOL 0.25
  )[5m:] 
)

这看起来正确吗?我是普罗米修斯的新手,所以我很难理解函数和时间范围。

此外,我正在使用 sum 函数,因为该指标具有其他参数,如 customer_id,但我想要总体故障率。

【问题讨论】:

    标签: prometheus grafana promql prometheus-alertmanager


    【解决方案1】:

    外部avg_over_time()函数不需要,因为rate(m[d])已经返回平均值输入countermd期间的每秒增长率。

    因此,当最近 5 分钟的平均失败率超过 25% 时,除非最近 5 分钟的请求数小于 10,否则以下查询将返回非空结果(也称为警报):

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

    该查询使用 increase() 函数返回过去 5 分钟内的请求数。

    请注意,Prometheus 中的 increase() 函数在应用于整数计数器时可能会返回意外的非整数结果。有关详细信息,请参阅this issue。解决方法是使用 VictoriaMetrics - 我正在使用的类似 Prometheus 的监控系统。它从 increase() 函数返回预期的整数结果 - 请参阅 the technical details

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多