在看监控指标的时候,需要额外了解一些统计分析的概念
平均值 Avg
统计数据最常用的值就是平均值,例如平均耗时为 100ms,表示服务器当前请求的总耗时除以请求总数量,通过该值,我们大体能知道服务运行情况
但是使用平均值来衡量响应时间有个非常大的问题,这个衡量指标的计算方式会把一些异常的值平均掉,进而会掩盖一些问题,我们只知道所有请求的平均响应时间是 100ms,但是具体有多少个请求比 100ms 要大,又有多少个请求比 100ms 要小,大多少,是 200ms,还是 500ms,又或是 1000ms,我们无从得知
因此监控指标经常将平均值可视化的展示出来,并且在下方标出最大值、最小值、平均值的平均值,并且将原来的数据多少展示出来
比如在代码中,使用监控打点的时候,会以一小时的每分钟计算数据,即获取该小时下所有 QPS 除以 60,然后以每分钟多大展示,比如该分钟下有 1QPS,则该分钟表示为 0.01667:
total 是该时间段内所有数据的加和,avg 是 total 除以 60 计算出来的数据,代表一小时平均每分钟生成多少数据,而最后的 total*60 则是该时间段的所有 QPS
除了 QPS 监控还有另外一种 Time 监控,即一分钟内平均响应时间 time(一般是毫秒,代码中定义),k 代表 1000
百分位数值
平均值并不能反映数据分布及极端异常值的问题,这时我们可以使用百分位数值
百分位数值是一个统计学中的术语
如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列。如,处于p%位置的值称第p百分位数
用我们软件开发行业的例子通俗来讲就是,假设有100个请求,按照响应时间从小到大排列,位置为X的值,即为PX值。
P1就是响应时间最小的请求,P10就是排名第十的请求,P100就是响应时间最长的请求
在真正使用过程中,最常用的主要有P50(中位数)、P95、P99
P50: 即中位数值。100个请求按照响应时间从小到大排列,位置为50的值,即为P50值。如果响应时间的P50值为200ms,代表我们有半数的用户响应耗时在200ms之内,有半数的用户响应耗时大于200ms。如果你觉得中位数值不够精确,那么可以使用P95和P99.9
P95:响应耗时从小到大排列,顺序处于95%位置的值即为P95值。
还是采用上面那个例子,100个请求按照响应时间从小到大排列,位置为95的值,即为P95值。 我们假设该值为200ms,那这个值又表示什么意思呢?
意思是说,我们对95%的用户的响应耗时在200ms之内,只有5%的用户的响应耗时大于200ms,据此,我们掌握了更精确的服务响应耗时信息
同样的道理,一个接口的 P98,代表了某个时间段内,将用户访问该接口的时间从低到高排序后,按顺序找出的第百分之九十八位的数据
这么说来,我们为什么不取某一时间段内,访问接口最高耗时呢,非得取一个 P98 这样的数据吗。原因是最耗时的请求有可能是某些极端情况,某些用户错误操作导致的,我们应当排除这些情况,这些请求没有什么意义
但是如果 P98 的请求耗时过高,并且一直过高,那很可能是系统出了问题,我们应当跟着接口优化一下