【问题标题】: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])已经返回平均值输入counterm在d期间的每秒增长率。
因此,当最近 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。