如何基于Prometheus查询在Grafana中创建延迟分布图表
基于PromQL在Grafana制作延迟分布图表操作指南
前置条件
- 你需要提前在业务监控中埋点了Histogram类型的延迟指标,这类指标会自动生成带
_bucket、_sum、_count后缀的时间序列,默认按照预设的延迟区间(分桶)统计不同延迟范围的请求数量。
核心PromQL语句编写
延迟分布图通常展示P50(中位数)、P90、P95、P99等不同分位数的延迟走势,核心使用PromQL的histogram_quantile函数实现。
假设你的业务延迟指标为http_request_duration_seconds(单位为秒),要统计最近5分钟的延迟分位数,查询语句如下:
- P50:
histogram_quantile(0.5, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) - P90:
histogram_quantile(0.9, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) - P95:
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) - P99:
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
注:如果需要按服务、接口、请求方法等维度拆分延迟分布,只需要把对应标签加到
by子句中即可,例如by (le, service, api_path)
Grafana面板配置步骤
普通多曲线延迟分布图(对应参考效果的分位数走势)
- 新建Grafana面板,图表类型选择时间序列(Time series)
- 数据源选择对应的Prometheus实例,依次添加上述4条查询语句,分别给每个查询设置别名为
P50、P90、P95、P99,方便图例识别 - 右侧面板配置调整:
- Y轴单位选择和指标匹配的时间单位,例如秒
s、毫秒ms - 图例设置为底部/右侧展示,可开启展示最新值、平均值等实时数据
- 样式调整:给不同分位数的曲线设置差异化颜色,例如P99用红色、P95用橙色、P50用绿色,视觉区分更明显
- Y轴单位选择和指标匹配的时间单位,例如秒
热力图形式延迟分布
如果要生成按延迟分桶的热力分布图,操作如下:
- 图表类型选择热力图(Heatmap)
- 查询语句填写:
sum(increase(http_request_duration_seconds_bucket[$__rate_interval])) by (le) - 开启热力图配置中的「按bucket格式解析数据」选项,绑定Y轴到
le标签即可。
常见异常排查
- 查询结果为
NaN:检查Histogram的分桶设置是否合理,是否有足够请求落入对应延迟区间,可适当调大rate/increase的时间窗口(例如把5m改为10m) - 延迟数值和实际不符:检查指标的单位和Y轴设置的单位是否匹配,避免指标为毫秒但Y轴配置为秒的错误
内容的提问来源于stack exchange,提问作者Ronaldo Cristover
相关产品推荐
相关产品推荐

