首页/云/可观测性速查/Histogram 与 Summary:分位统计怎么选
监控体系与方法40 条

Histogram 与 Summary:分位统计怎么选

Histogram 在服务端按 le 分桶累计,分位用 histogram_quantile() 在查询时计算且可跨实例聚合;Summary 在客户端直接算出分位,但分位数值无法跨实例合并。

可观测性速查云更新于 2026-10-13

两者的根本差别

两种类型都在解决耗时分布问题,差别在于分位在哪里计算:直方图把原始分布以桶的形式带到服务端,在查询时按需算出分位;摘要类型在客户端算好分位再上报,服务端拿到的已经是结果值。

为什么摘要不能聚合

分位数不是可加量:两个实例各自的 P99 求平均,得不到整体 P99。直方图保留的是可相加的桶计数,因此能跨实例与跨分区合并;摘要上报的是算完的结果,合并时只能做没有意义的平均,这是选择类型时最关键的一条。

基本信息

分位位置直方图在查询时计算,摘要在采集时计算
跨实例聚合直方图支持,摘要不支持
序列构成直方图按桶生成,摘要按分位标签生成
精度直方图受桶边界影响,摘要在其窗口内较精确

典型使用场景

  • 微服务延迟看板:跨多个实例看整体 P95,只有直方图能给出正确结果
  • 按接口下钻:直方图可按任意标签重新聚合分位
  • 客户端开销敏感:摘要把计算放在客户端,可减少服务端负担
  • 数据结构简单:摘要产生的序列数由分位数量决定,易于预估
  • 需要超阈值比例:直方图可用桶相减直接算出比例

取舍对照

维度HistogramSummary
分位计算位置查询时,由表达式计算采集时,由客户端计算
跨实例聚合支持,按桶求和后再算不支持,分位不能平均
精度来源受桶边界影响滑动窗口内较精确
序列成本由桶数量决定由分位数量决定

场景推荐

场景推荐原因
多实例服务整体分位Histogram需要跨实例合并
单机自算且不聚合Summary省掉服务端计算
要与 SLO 阈值比对Histogram可在阈值附近加密桶

直方图查询与平均值

直方图查询与平均值
# P90 与 P99:先按 le 聚合桶,再计算分位
histogram_quantile(0.90, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

# 平均耗时等于总和除以计数
sum(rate(http_request_duration_seconds_sum[5m]))
  / sum(rate(http_request_duration_seconds_count[5m]))
桶边界要覆盖业务关注点,例如 100 毫秒、300 毫秒、1 秒附近:边界过粗会让分位误差集中在最需要判断的区间。
对多个实例的摘要分位做平均或求和没有数学意义:需要聚合分位时只能改用直方图,事后无法补救。

易错点

  • 对摘要分位做聚合:得到的结果没有数学意义,容易在汇报里放大成结论
  • 桶边界设计过粗:关键阈值附近的分位误差最大,也正是最需要准确的地方
  • 改动桶边界不做评审:新旧数据口径不一致,历史对比失去参考价值
  • 同时暴露两种类型:同一含义出现两套指标,看板与告警的取数长期分叉

数据来源与参考

  • Prometheus 文档 · Histograms and summaries
  • Prometheus 文档 · histogram_quantile()
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌