当前位置: 首页 > news >正文

prometheus histogram

一、Histogram 是干嘛的(先有直觉)

Prometheus 里:

👉 Histogram 用来统计“数据分布” + 支持全局聚合的分位数计算

和 Summary 的区别你已经知道了,这里重点看“怎么用”。


二、业务场景(贯穿例子)

👉 场景:统计接口响应时间

比如:

 
50ms, 100ms, 200ms, 500ms, 2s
 

你关心:

  • 有多少请求 < 100ms?
  • 有多少请求 < 500ms?
  • p90 / p99 延迟是多少?

👉 这就是 Histogram 的用武之地


三、代码定义(Go 示例)

用你之前的 Go 风格👇

 
hist := prometheus.NewHistogram(prometheus.HistogramOpts{
Name: "http_request_duration_seconds",
Help: "接口响应时间",
Buckets: []float64{0.1, 0.2, 0.5, 1, 2, 5}, // 单位:秒
})
prometheus.MustRegister(hist)
 

👉 记录数据

 
hist.Observe(0.12)
hist.Observe(0.3)
hist.Observe(1.2)
 

四、/metrics 实际暴露的数据(非常关键)

Histogram 不止一个指标,会拆成 3 类:


1️⃣ bucket(桶)

 
http_request_duration_seconds_bucket{le="0.1"} 1
http_request_duration_seconds_bucket{le="0.2"} 2
http_request_duration_seconds_bucket{le="0.5"} 3
http_request_duration_seconds_bucket{le="1"} 3
http_request_duration_seconds_bucket{le="2"} 4
http_request_duration_seconds_bucket{le="+Inf"} 4
 

👉 含义:

le = less than or equal(≤)

比如:

  • le="0.2" → ≤0.2秒的有2个请求

2️⃣ sum

 
http_request_duration_seconds_sum 1.62
 

👉 总耗时


3️⃣ count

 
http_request_duration_seconds_count 4
 

👉 总请求数


五、核心理解(必须搞懂)

👉 Histogram 本质:

 
用多个“桶”统计数据分布
 

比如你配置:

 
[0.1, 0.2, 0.5, 1, 2, 5]
 

其实是在问:

 
≤0.1 ?
≤0.2 ?
≤0.5 ?
...
 

六、PromQL 查询(重点来了🔥)


1️⃣ 查询每秒请求量(QPS)

 
rate(http_request_duration_seconds_count[1m])
 

👉 因为 count 是累计值(counter)


2️⃣ 查询平均响应时间

 
rate(http_request_duration_seconds_sum[1m])
/
rate(http_request_duration_seconds_count[1m])
 

👉 平均值 = 总时间 / 总次数


3️⃣ 查询 p90 / p99(最重要)

 
histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[5m]))
 

👉 p90


 
histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))
 

👉 p99


👉 原理(你要理解)

histogram_quantile() 会:

  1. 根据 bucket 分布
  2. 插值计算分位数

👉 注意:

Histogram 的分位数是“近似值”


七、按维度统计(结合 label)

假设你加了 label:

 
HistogramVec(..., []string{"method"})
 

👉 查询 GET 请求 p99

 
histogram_quantile(
0.99,
rate(http_request_duration_seconds_bucket{method="GET"}[5m])
)
 

👉 按 method 分组

 
histogram_quantile(
0.99,
sum by (le, method) (
rate(http_request_duration_seconds_bucket[5m])
)
)
 

👉 重点:

  • 必须带 le
  • histogram 聚合必须 sum by (le, ...)
http://www.jsqmd.com/news/519258/

相关文章:

  • 《医学数据分析与挖掘》第三周课程笔记
  • 55 千瓦感应电机设计与仿真那些事儿
  • 2026年 上海招商办公楼实力推荐榜:聚焦核心商圈,解析优质办公空间选址策略与增值服务 - 品牌企业推荐师(官方)
  • 永磁同步电机PMSM参数辨识与SVPWM矢量控制仿真探索
  • 深入解析LeetCode 136:巧用异或运算,高效找出数组中唯一的“单身数字”
  • Whisper-Tiny 模型:轻量级语音识别的实时应用与优化
  • GDS Decompiler:Godot引擎逆向工程工具深度解析
  • AI编程时代,35岁以上程序员将何去何从?
  • Java基础 - 对象与类
  • 别再死记硬背了!一张图帮你理清FS、FT、DTFT、DFS、DFT的关系与区别
  • 北京上门收画哪家专业?丰宝斋资深团队,精准鉴定名家字画 - 品牌排行榜单
  • 汇川H3U 10 轴项目实战:电池自动上料机的奇妙之旅
  • 交换机堆叠与集群完全指南:从入门到实战,一篇搞定所有难题
  • Keil5编译报错解析:从Program Size参数到Target not created的解决之道
  • 探索光储直流微电网协调控制之直流电压分层优化控制
  • 从零到全网通:一个实验彻底搞懂VLAN、三层交换与静态路由(华为eNSP实战)
  • 《QGIS快速入门与应用基础》231:图例项目管理(添加/删除/排序)
  • 7车位立体车库组态王6.53仿真程序:急停功能解析
  • 人机协作的核心困局,终于被这篇顶会论文破解了
  • 少走弯路:9个AI论文工具全场景通用测评,开题报告+毕业论文高效写作推荐!
  • 用Bash脚本构建AI编码助手:learn-claude-code项目技术解析
  • 避坑指南:PostgreSQL MCP高可用集群配置中的5个常见错误与性能调优实战
  • STM32+LoRa模块实战:从环境搭建到数据传输完整指南(附避坑清单)
  • 拖延症福音 一键生成论文工具 千笔AI VS 灵感ai 全领域适配首选
  • 人-机交互是新文科与新理科融合的最佳窗口
  • 用STM32F103C8T6最小系统板驱动HC-SR04超声波模块,手把手教你做个简易测距仪(附完整代码)
  • 人工智能如何改变 Anthropic 的工作方式60
  • 霍尔木兹海峡:帝国黄昏的祭坛?
  • 毕业论文神器 9个一键生成论文工具测评:全流程开题报告+学术论文写作全攻略
  • 从微库配置到时钟树:STM32H750VB调试卡死全流程避坑指南(附DAP调试技巧)