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

如何用PromQL计算90分位请求中延迟≤1000ms的占比?

实现延迟SLO的正确PromQL方案

你要的是验证90%的请求响应时间不超过1000ms的SLO,之前的错误在于误解了查询逻辑,且用不完整的直方图桶计算分位数导致无数据返回。下面给你两种直接可用的方案:

方案一:直接判断90分位延迟是否达标

计算整体请求的90分位延迟,判断其是否≤1000ms,返回1表示满足SLO,0表示不满足:

histogram_quantile(0.90, sum by (le) (rate(MyMetric_Request_Duration_bucket{instance="foo"}[1h]))) <= 1000

方案二:计算达标请求占比并验证是否≥90%

用你之前写的达标请求占比查询,直接和90%(0.90)做比较,同样返回1/0表示是否达标:

(sum(rate(MyMetric_Request_Duration_bucket{le="1000",instance="foo"}[1h])) / sum(rate(MyMetric_Request_Duration_count{instance="foo"}[1h]))) >= 0.90

如果需要查看具体的达标占比数值,去掉后面的>= 0.90即可。

为什么你之前的合并查询无数据?

histogram_quantile要求第二个参数必须是完整的直方图bucket序列(包含所有le值,直到+Inf的桶),你只过滤了le="1000"的桶,数据不完整无法构建完整分布曲线,自然计算不出分位数。而且你想要的“90分位请求中延迟≤1000ms的占比”逻辑和SLO需求不符——SLO核心是“90%的请求延迟不超过1000ms”,上面两个方案已直接命中这个需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:31:23