Prometheus Go客户端Histogram指标API配置与使用问题
Prometheus Go 应用埋点问题解答
使用github.com/prometheus/client_golang/prometheus库对Go应用进行埋点实现指标采集的代码相关问题解答如下:
1. Buckets参数的具体含义
Buckets: []float64{0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10}(注:原代码中2,5是笔误,重复的5属于冗余定义,不影响统计但无实际作用)是Histogram类型指标的分桶配置,具体含义如下:
- 切片中的每一个浮点值都是对应桶的累计上边界,代表该桶统计所有观测值小于等于该边界的样本
- 所有桶是累计统计的,比如上边界为0.1的桶,计数包含了所有≤0.05和在0.05~0.1之间的样本总数,以此类推
- 预先设置合理的分桶边界是为了后续Prometheus可以基于桶的计数,近似计算出请求耗时的分位数(比如p90、p95、p99)、不同耗时区间的请求占比等指标,分桶越贴合实际业务的耗时分布,计算出的指标误差越小
2. requestDurations.Observe(0.42)的执行逻辑与作用
作用
该语句的作用是将本次观测到的0.42秒的请求耗时数据上报到http_request_duration_seconds这个Histogram指标中,完成一次指标采样。
执行逻辑
当传入观测值0.42时,内部会执行以下操作:
- 遍历所有预先配置的分桶上边界,找到所有上边界≥0.42的桶,对应本次配置就是0.5、1、2.5、5、10这几个桶
- 给所有符合条件的桶的计数各加1
- 该Histogram指标的总样本计数(
_count后缀)加1 - 该Histogram指标的所有样本耗时总和(
_sum后缀)加上0.42
后续Prometheus拉取指标时,就能基于这些累计的桶计数、总样本数、总耗时,计算出平均请求耗时、请求总量、指定分位的耗时等业务观测指标。
内容的提问来源于stack exchange,提问作者overexchange
相关产品推荐
相关产品推荐

