PromQL语法求助:Grafana非2xx请求数告警规则编写报错
问题分析与解决
你的PromQL语句出错的核心原因是误用了计数器类型指标的处理方式:
http_requests_total是计数器(Counter)类型指标,它的值是单调递增的,记录的是从服务启动以来的累计请求数。直接用sum_over_time对它的1分钟窗口样本求和,得到的是这个时间段内所有样本值的累加值,完全不是你需要的「最近1分钟内的请求增量」。
正确的写法应该分两步:
- 用
increase()函数计算每个时间序列在1分钟内的请求增量(它会自动处理计数器重置的情况) - 用
sum()对所有非2xx状态码的请求增量求和,再判断是否超过50
最终的告警PromQL语句是:
sum(increase(http_requests_total{status_code!~'2.*'}[1m])) > 50
额外说明:
- 如果你更关注平均速率,也可以用
rate()代替increase(),然后乘以60得到1分钟内的请求数,结果是一致的:sum(rate(http_requests_total{status_code!~'2.*'}[1m])) * 60 > 50 status_code!~'2.*'的匹配规则是正确的,能覆盖所有非2xx的状态码(比如4xx、5xx)
内容的提问来源于stack exchange,提问作者Asad Khalil
相关产品推荐
相关产品推荐

