Prometheus 中的 Bucket(桶)是什么?

Bucket 是 Histogram 指标的分桶区间,每个桶记录"小于等于 le 边界的观测数",暴露为 xxx_bucket{le="0.5"} 序列。本文讲清桶的累积语义、histogram_quantile 计算原理与桶边界设计方法。

最佳实践
Prometheus 中的 Bucket(桶)是什么?封面

Bucket 是直方图(Histogram)的分桶:你定义一组上界(le),Prometheus 自动为每个上界维护一个累计计数——request_duration_seconds_bucket{le="0.5"} 的值表示耗时 ≤0.5 秒的请求总数。

桶是怎么工作的

定义桶边界 [0.1, 0.5, 1, 5] 后,客户端暴露这样的序列:

request_duration_seconds_bucket{le="0.1"}  105
request_duration_seconds_bucket{le="0.5"}  480   ← 含 ≤0.1 的 105
request_duration_seconds_bucket{le="1"}    760
request_duration_seconds_bucket{le="5"}    799
request_duration_seconds_bucket{le="+Inf"} 800   ← 总是等于总数

桶是累积的——每个桶包含前面所有桶的计数,le="+Inf" 兜底等于观测总数。

为什么这样设计

累积结构让分位数可以插值计算:

histogram_quantile(0.95, sum(rate(request_duration_seconds_bucket[5m])) by (le))

Prometheus 找到 P95 落在哪个桶,在桶内线性插值出近似值。误差取决于桶的疏密——关键区间桶越密,分位越准。

桶边界设计原则

  1. 围绕 SLO 布点:SLO 是 500ms,就在 300/400/500/600/800ms 附近加密;
  2. 覆盖全量程:最小桶别漏掉大量样本,最大也别漏;
  3. 数量适中:每桶 = 一条序列 × 标签组合数,10-20 个桶通常够用。

观测云对照

观测云完全兼容 Prometheus Histogram 数据;在 APM 中,接口延迟的分布、分位数由链路数据直接计算,精度不依赖预设桶边界。

常见问题(FAQ)

Q:桶定错了能改吗? 可以改代码里的边界,但历史数据桶结构不变,变更前后分位数会有跳变。

Q:bucket 序列能直接画图吗? 一般不直接画,配 rate + histogram_quantile 或 heatmap 面板使用。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台