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

如何在Grafana指定时间范围内计算Prometheus指标的P99分位数

如何在Grafana指定时间范围内计算Prometheus指标的P99分位数

嘿,我来帮你搞定这个需求!要在Grafana选中的时间范围内计算Prometheus指标的P99分位数,用PromQL的内置函数就能轻松实现,我结合你给出的MySQL指标例子一步步说明:

核心思路

Prometheus提供了quantile_over_time()函数,专门用于计算指定时间窗口内样本数据的分位数。其中P99对应的分位数值就是0.99,刚好匹配你的需求。

针对你的例子的具体查询

你之前用max_over_time获取了指标的最大值,现在只需要把它替换成quantile_over_time,并指定分位数参数即可:

quantile_over_time(0.99, mysql_info_schema_innodb_metrics_transaction_trx_rseg_history_len{service_name=~"$service_name"}[$__range])

这里的关键参数说明:

  • 0.99:代表要计算的P99分位数
  • $__range:Grafana的内置变量,会自动对应你在timepicker中选中的时间范围(比如你例子里的10:30到13:30,这个变量会转换成对应的时长,比如10800秒)
  • 指标和标签部分保持你原来的筛选逻辑不变,确保只计算目标服务的指标数据

在Grafana中展示统计结果

把上面的PromQL放到Grafana面板的Metrics查询框后,推荐选择Stat或者Gauge类型的面板,这样可以直接以清晰的统计格式展示P99数值;如果还想同时观察指标的趋势变化,也可以用Graph面板,把这条P99查询作为一条曲线叠加在原始指标曲线上。

一些额外注意事项

  • 确保你的Prometheus版本在2.0及以上,quantile_over_time是2.0版本之后引入的函数
  • 如果你的指标是Counter类型(比如累计计数类指标),需要先通过rate()或increase()转换成速率指标后,再计算分位数;你的例子里是Gauge类型的指标(直接反映当前状态),所以不需要额外转换
  • 要是你需要按更小的时间粒度聚合后再计算P99(比如每5分钟算一次P99,再看整个时间范围的结果),可以调整时间窗口参数(比如把[$__range]改成[5m]),再结合其他聚合函数,但你的需求是整个时间picker范围内的P99,用$__range是最直接的方式

备注:内容来源于stack exchange,提问作者Asuwini P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:28:11