首页/云/可观测性速查/均值和分位数:延迟观测的正确姿势
监控体系与方法40 条

均值和分位数:延迟观测的正确姿势

平均延迟会被长尾掩盖:99 个快请求加 1 个超慢请求,均值依然好看。延迟观测应使用 P50/P95/P99 分位并明确统计窗口,同时可统计超阈值请求占比。

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

平均值为什么不够

平均延迟会被长尾掩盖:九十九个快请求加一个超慢请求,平均值依然好看,而那一个请求才是用户投诉的来源。延迟观测应使用分位并明确统计窗口,同时给出超阈值请求占比,让慢的规模也可见。

分位不能直接平均

两个实例各自的 P99 求平均,得不到整体的 P99,必须先聚合可加的分桶数据再计算。窗口选择也有讲究:过长的窗口会把历史峰值与当前状态混在一起,告警应使用较短的窗口。

基本信息

P50一半请求快于该值,代表普遍体验
P95 与 P99尾部体验,更接近投诉对应的信号
关键约束必须先聚合原始分布,再计算分位
补充指标超阈值请求占比更适合直接用于告警

典型使用场景

  • 体验评估:用中位数反映多数用户的感受
  • 尾部治理:用高分位识别少数极慢请求
  • 阈值告警:用超阈值占比代替分位比较
  • 发布对比:比较分位曲线判断是否引入长尾
  • SLO 度量:延迟目标通常以分位或占比表达

分位与超阈值占比

分位与超阈值占比
# P50 / P95 / P99:先聚合桶再计算
histogram_quantile(0.50, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

# 超过 1 秒的请求占比:用桶相减得到
(sum(rate(http_request_duration_seconds_bucket{le="+Inf"}[5m]))
 - sum(rate(http_request_duration_seconds_bucket{le="1.0"}[5m])))
 / sum(rate(http_request_duration_seconds_bucket{le="+Inf"}[5m]))

指标与用途

指标含义用途
平均值整体水平容易被长尾掩盖
中位数多数请求的水平反映普遍体验
高分位尾部最差的请求对应投诉信号
超阈值占比超过阈值的请求比例直接用于阈值告警

观测时的约定

  • 明确窗口长度:不同窗口的分位不可直接比较
  • 成功与失败分开统计:快速失败会拉低耗时
  • 平均值与分位一起看:整体变慢与仅尾部变差,处置方式不同
分位适合看趋势与目标,桶相减得到的超阈值占比更适合直接做阈值告警,两者配合使用效果最好。
把各实例的分位求平均得到的不是整体分位:必须先聚合原始分布再计算,否则结论会系统性偏乐观。

易错点

  • 对分位做平均:数学上不成立,整体结论偏乐观
  • 只看平均值:长尾问题被掩盖,用户投诉无法解释
  • 窗口过长:历史峰值与当前状态混在一起,告警反应迟钝
  • 不区分成功与失败:快速失败拉低耗时,真实劣化看不出来

数据来源与参考

  • Prometheus 文档 · histogram_quantile()
  • Google SRE Book 第 6 章(分位数意义)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌