PromQL查询异常:统计5分钟内执行超3秒请求数的问题排查
原查询问题分析及正确写法
你写的查询有两个关键错误
- 桶的逻辑搞反了:
http_server_requests_seconds_bucket是Prometheus的直方图累积桶,le="3"统计的是执行时间≤3秒的请求,和你要的“超过3秒”完全相反。 - 用错了聚合函数:
count_over_time是用来数时间序列在窗口内有多少个样本的,但直方图的bucket样本是累积计数,不是单个请求的记录,用它算出来的数值根本不是你要的请求数量。
正确的查询语句
要统计最近5分钟内执行时间超过3秒的请求数,得利用直方图的累积特性:用总请求数(le="+Inf"的桶,包含所有请求)减去≤3秒的请求数,再取5分钟窗口内的增量:
sum_over_time(http_server_requests_seconds_bucket{env=~"myEnv", group="myGroup", uri="myUri", le="+Inf"}[5m]) - sum_over_time(http_server_requests_seconds_bucket{env=~"myEnv", group="myGroup", uri="myUri", le="3"}[5m]) > 10
额外说明
如果你的指标有多个实例或方法这类额外标签,需要把所有维度的结果聚合起来,可以在外层加sum():
sum( sum_over_time(http_server_requests_seconds_bucket{env=~"myEnv", group="myGroup", uri="myUri", le="+Inf"}[5m]) - sum_over_time(http_server_requests_seconds_bucket{env=~"myEnv", group="myGroup", uri="myUri", le="3"}[5m]) ) > 10
内容的提问来源于stack exchange,提问作者Aram Arzumanyan
相关产品推荐
相关产品推荐

