如何在Grafana中通过Prometheus展示API处理时间的历史数据?
针对Histogram指标的请求时长可视化方案
核心问题说明
你想要展示指定标签下单次请求的精确处理时长历史,但Histogram本身是聚合型指标——它会把请求时长按预设的le(小于等于某个阈值)桶做计数,无法直接还原每个请求的精确时长。不过通过调整PromQL和面板配置,完全可以清晰展示请求时长的分布变化,或者近似呈现时长趋势。
一、Histogram面板:展示各时长桶的请求分布
1. 正确的PromQL语句
sum by (le) (rate(reservations_api_processing_time_bucket{search_statistics="load-statistics-InHouse"}[$__rate_interval]))
2. 面板配置要点
- 选择「Histogram」面板类型
- 在「Display」设置中:
- 开启「Show histogram bars」,模式选「Stacked」(堆叠展示各桶占比)或「Overlaid」(重叠展示)
- 手动填写「Bucket bounds」为你的指标预设的
le值(比如0.1,0.2,0.5,1,2,对应100ms、200ms等) - 把「Legend」显示设为
le,让每个条形对应明确的时长区间
- 选择目标时间范围后,就能看到不同时间段内各时长桶的请求数量分布
二、Heatmap面板:展示时长分布的时间热力变化
Heatmap适合直观观察哪些时间段出现了长耗时请求,能清晰展现时长分布随时间的变化趋势:
1. PromQL语句
如果你的指标单位是秒,要转成ms方便查看,可加乘1000:
sum by (le) (rate(reservations_api_processing_time_bucket{search_statistics="load-statistics-InHouse"}[$__rate_interval])) * 1000
2. 面板配置要点
- 选择「Heatmap」面板类型
- 「Data」标签页中,将「Format as」设为「Heatmap」
- 「Display」标签页:
- Y轴单位设为
ms - 调整「Color scheme」区分不同请求量的热度
- 开启「Show labels」,悬停时可查看具体桶的时长区间和请求数
- Y轴单位设为
三、分位数趋势展示(近似反映时长变化)
如果想重点看整体时长的趋势(比如中位值、95分位值),用histogram_quantile搭配时间维度聚合,放在Graph面板中:
# 中位值(50%请求的时长不超过该值) histogram_quantile(0.5, sum by (le) (rate(reservations_api_processing_time_bucket{search_statistics="load-statistics-InHouse"}[$__rate_interval]))) * 1000 # 95分位值(95%请求的时长不超过该值) histogram_quantile(0.95, sum by (le) (rate(reservations_api_processing_time_bucket{search_statistics="load-statistics-InHouse"}[$__rate_interval]))) * 1000
同时展示这两个查询结果,就能看到请求时长的核心趋势变化。
四、你之前尝试的PromQL问题说明
- 直接用
reservations_api_processing_time_bucket{...}:这是累计计数,数值会一直递增,无法展示历史分布的动态变化,必须用rate转换为每秒增量 - 单独的
histogram_quantile查询默认只返回当前时刻的分位值,要展示历史数据,必须保留时间维度的聚合逻辑,不能作为单值查询使用
内容的提问来源于stack exchange,提问作者Dsmufsemfisajd
相关产品推荐
相关产品推荐

