Prometheus分位值Sumary和Histogram数据格式查看

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.分位值概述

1.什么是分位值

分位值是随机变量的特征数之一。将随机变量分布曲线与X轴包围的面积作N等分,得N—1个值(X_1、X_2……X_(N-1)),这些值称为N分位值。

分位值(数)在统计学中也有很多应用,比如在一般的数据分析当中,需要我们计算25分位(下四分位),50分位(中位),75分位(上四分位)值。

2.分位值的意义是什么

分位值即把所有数据从小到达排序,取前N%位置的值,即为该分位的值。

一般用分位值来观察大部分用户数据,平均值会"削峰填谷",同时高分位的稳定性可以忽略掉少量的长尾数据。

高分位数据不适用于全部的业务场景,例如金融支付行业,可能就会要求100%的成功。

3.分位值是如何计算的

以95分位值为例,将采集到的100个数据,从小到大排列,95分位值就是取出第95个用户的数据做统计,同理,50非文职就是第50个人的数据。


举个例子: 有一组数 A=【65 23 55 78 98 54 88 90 33 48 91 84】,计算他的25分位,50分位,75分位值。

	- 1.先把上面12个数按从小到大排序:
23、33、48、54、55、65、78、84、88、90、91、98

	- 2.12个数有11个间隔,每个四分位间11/4=2.75个数


	- 3.手工计算分位值:先把上面12个数按从小到大排序
		- 计算25分位:
第1个四分位数为上面12个数中的第1+2.75=3.75个数

指第3个数对应的值48及第3个数与第4个数之间的0.75位置处,即:48+(0.75)*(54-48)=52.5 (52.5为25分位值)。

		- 计算50分位:
第2个四分位数为上面12个数中的第1+2.75*2=6.5个数

指第6个数对应的值65及第6个数与第7个数之间的0.5位置处,即:65+(0.5)*(78-65)=71.5 (71.5为50分位值)。

中位值也可以用一种很简单的方法计算,按从小到大排列后:

若数组中数的个数为奇数,则最中间那个数对应的值则为中位值;

若数组中数的个数为偶数,则取中间两个数值的平均值则为中位值,如上(78+65)/2=71.5

		- 计算75分位:
第3个四分位数为上面12个数中的第1+2.75*3=9.25个数

指第9个数对应的值88及第9个数与第10个数之间的0.25位置处,即:88+(0.25)*(90-88)=88.5 (88.5为75分位值)。


课后练习:
	将1到100分为10等分,则有10个10分位,用以上的方法可计算10分位值和90分位值。

二. histogram数据说明

histogram数据指标格式说明:
	- XXX_bucket:
		代表描述"tsdb_compaction_chunk_size_bytes"小于这个le的记录数位多少个:
		prometheus_tsdb_compaction_chunk_size_bytes_bucket{le="32"} 0
			tsdb压缩块大小小于32bytes的有0个。
		prometheus_tsdb_compaction_chunk_size_bytes_bucket{le="48"} 806
			tsdb压缩块大小小于48byte的有806个。
		prometheus_tsdb_compaction_chunk_size_bytes_bucket{le="72"} 1683
			tsdb压缩块大小小于72byte的有1683个。
		prometheus_tsdb_compaction_chunk_size_bytes_bucket{le="108"} 2842
			tsdb压缩块大小小于108byte的有2842个。
		...
		prometheus_tsdb_compaction_chunk_size_bytes_bucket{le="+Inf"} 6091
			最后一定是一个"+Inf"(表示"正无穷")的记录,因为算分位值的时候要用到"+Inf"。
			
		值得注意的是,一个新的数据上报时,会把大于这个value的bucket全部"+1"。
		
	- XXX_sum:
		代表记录的和,比如这个指标就是"tsdb_compaction_chunk_size_bytes"tsdb压缩块大小字节总和为"1.086535e+06"(将近1MB)。
		
	- XXX_count:
		代表记录"tsdb_compaction_chunk_size_bytes"的数量和,就是一共"6091"次上报。


Prometheus可以使用histogram数据类型可以采用分位值的方式随机采样短时间范围内的数据,从而及时发现问题,这需要配合histogram_quantile函数来使用。


举个例子: HTTP请求的延迟柱状图(下面的"0.95"表示的是分位值,你可以根据需求自行修改即可。)
histogram_quantile(0.95,sum(rate(prometheus_http_request_duration_seconds_bucket[1m])) by (le)) 

histogram_quantile(0.95,sum(rate(prometheus_http_request_duration_seconds_bucket{handler="/api/v1/query"}[5m])) by (le)) 

三. summary数据说明

summary数据指标格式说明:
	- XXX{...,quantile=XXX}:
		使用quantile关键字定义具体的分位值。
prometheus_target_interval_length_seconds{interval="15s",quantile="0.01"} 14.997928423
	代表就是"1"分位值为"14.997928423"秒。
	
prometheus_target_interval_length_seconds{interval="15s",quantile="0.05"} 14.998842243
	代表就是"5"分位值为"14.997928423"秒。
	
prometheus_target_interval_length_seconds{interval="15s",quantile="0.5"} 15.000025528
	代表就是"50"分位值为"15.000025528"秒。
	
prometheus_target_interval_length_seconds{interval="15s",quantile="0.9"} 15.000811084
	代表就是"90"分位值为"15.000811084"秒。
	
prometheus_target_interval_length_seconds{interval="15s",quantile="0.99"} 15.001590525
	代表就是"99"分位值为"15.001590525"秒。
	
	
	- XXX_sum:
		代表记录的和,比如这个指标就是"target_interval(采集目标间隔时间)"消耗描述的和为"4785.00520029"。
		
	- XXX_count:
		代表记录的数量和,一共上报了"319"次。
posted @ 2024-11-03 01:07  尹正杰  阅读(22)  评论(0编辑  收藏  举报