本文分别记录了:
- Grafana使用步骤
- P50 P99 min max m1_rate等指标分别是什么意思,Metrics为何不会对“吞吐量”指标记录P99 min 等聚合
- Metrics常用的几种记录方式(我司用了两种)
1.场景
-
Metrics
收集日志交给Graphite
(Graphite本身也可以做为监控,但我们只是把他作为了一个数据存储,对grafana提供数据接口),Grafana
做数据展示 -
Grafana的数据来源于Graphite(由Metrics收集),其监控方式也是通过不停轮询(所以在Grafana中也叫新建query),如果Graphite中没有数据,Grafana中自然也不会显示,举个例子:
- 启动了Spring项目,但没有访问接口(此时接口被Metric记录),此时Grafana甚至都不知道是哪个“project”
- 请求接口,如果Metric记录了log(“myType . myMetric_key . myMetric_value1”) ,则只会在Grafana中出现value1的选项,不会出现value2(直到log记录到了value2)
-
上述这个“Metric记录后才有选项”的特性十分重要,涉及到Grafana中的新建query是否有提示
2.web界面操作步骤
2.1创建仪表盘dashboard
仪表盘dashboard属于是最外层,在里面还可以创建row(一个小分组),创建query(一个实际的监测指标)
2.2配置仪表盘dashboard
通用设置
变量设置:这里主要是为了后续配置query时能直接用$host $metric来默认指定
2.3盘内新建分组row
创建一行,后续可以鼠标放上去设置名字
2.4新建监测指标query
还是上面那个图,点“Add Query”即可
3.统计度量
3.1Metrics统计度量类型
Metrics提供了五种基本的度量类型:
- Gauges:计量器
- Counters:计数器
- Histograms:直方图
- Timers:计时器
- Meters:TPS计数器
一般来说最后两个满足了绝大部分监控的场景
3.2适用场景
3.2.1 Gauges
Gauges中文名称可以翻译为计量器。它可以表示一个既可以增加, 又可以减少的度量指标值。它是最简单和最基本的Metrics类型,只有一个简单的返回值,通常用来记录一些对象或者事物的瞬时值
。
计量器的典型使用场景包括:
温度
内存使用量
3.2.2 Counters
Counters中文名称可以翻译为计数器。它是一种累计型的度量指标,数值只能单调递增。
计数器的典型使用场景包括:
服务请求数
任务完成数
错误出现次数
3.2.3 Histograms
Histograms中文名称可以翻译为直方图。它可以用来度量流数据中value的分布情况,Histrogram可以计算最大/小值、平均值,方差,分位数(如中位数,或者95th分位数),如75%,90%,98%,99%的数据在哪个范围内。最大的特点是提供了多种多样的数据统计方式。
直方图的典型使用场景包括:
流量最大值
流量最小值
流量平均值
流量中位值
3.2.4 Meters
Meters中文名称可以翻译为TPS计数器
。它是一种只能自增的计数器,通常用来度量一系列事件发生的比率(例如记录succeed和failed可以直到接口成功率)。他提供了平均速率,以及指数平滑平均速率,以及采样后的1分钟,5分钟,15分钟速率。
TPS计数器的典型使用场景包括:
平均每秒请求数
最近1分钟平均每秒请求数
最近5分钟平均每秒请求数
最近15分钟平均每秒请求数
3.2.5 Timers
Timers中文名称可以翻译为计时器
。Histogram跟Meter的一个组合,另外还提供了对于某段代码执行的耗时的统计及计算功能。
计时器的典型使用场景包括:
请求时延
磁盘读时延
3.3各度量类型提供的属性(非重点)
-
Gauges:
属性 value (某个属性实时值变化)
-
Counter:
属性count (定时时间间隔之内的请求总数)
-
Histrogram:
属性 count(定时时间间隔之内的请求总数) 属性 min(定时时间间隔内请求参数的最小值) 属性 max(定时时间间隔内请求参数的最大值) 属性 mean(定时时间间隔内请求参数的平均值) 属性 stddev(定时时间间隔内请求参数的方差) 属性 median(定时时间间隔内请求参数的中位数) 属性rate_unit(比率记录单位) 属性 75% <=(75百分位) 属性 95% <=(95百分位) 属性 98% <=(98百分位) 属性 99% <=(99百分位)
-
Meters:
属性 count(定时时间间隔之内的请求总数) 属性 meanRate(平均每秒请求数(时间间隔内总请求数/定时任务时间间隔)) 属性 oneMinuteRate(最近1分钟平均每秒请求数) 属性 FiveMinuteRate(最近5分钟平均每秒请求数) 属性 FifteenMinuteRate(最近15分钟平均每秒请求数)
-
Timer:
属性 count(定时时间间隔之内的请求总数) 属性 meanRate(平均每秒请求数(时间间隔内总请求数/定时任务时间间隔)) 属性 oneMinuteRate(最近1分钟平均每秒请求数) 属性 FiveMinuteRate(最近5分钟平均每秒请求数) 属性 FifteenMinuteRate(最近15分钟平均每秒请求数) 属性 min(定时时间间隔统计数据的最小值) 属性 max(定时时间间隔统计数据的最大值) 属性 mean(定时时间间隔内统计数据的平均值) 属性 stddev(定时时间间隔内统计数据的方差) 属性 median(定时时间间隔内统计数据的中位数) 属性 rate_unit(比率记录单位) 属性 duration_unit(时间数值单位)
3.4我司常用指标
监控指标一般分为两大类:
- 离散的有限状态:如:调用Metrics的
meter.mark(k,v)
,v的选择是有限且离散的(如succeed和failed) - 连续的无限状态:如:调用Metrics的指定key值对应的timer对象:
timer.update(value,TimeUnit.MILLISECONDS)
,value就是一个连续无限的“end-start时间”
3.4.1 P系列指标解释
p50, p90, p99(或者写作pct 50,pct90,pct 99)都是数据聚合统计一种方式,跟百分比相关(p的含义是percentile)。
p50
:数据集按升序排列,第50分位置大的数据(即升序排列后排在50%位置的数据)。
p90:数据集按升序排列,第90分位置大的数据(即升序排列后排在90%位置的数据)。
p99
:数据集按升序排列,第99分位置大的数据(即升序排列后排在99%位置的数据)。
P99.9:同上,精度到达99.9%,一般用P99和P99.9来展示绝大部分用户的接口响应时间,满足绝大部分用户的体验
3.4.2 统计函数指标
“stddev”: 方差
“count”: 总次数
“max
”: 最长时间
“mean
”: 平均时间
“min
”: 最短时间
3.4.3 比率相关(x分钟内平均)
“m15_rate”: 15分钟 请求数/每秒的比率
“m1_rate
”: 1分钟内 请求数 / 每秒 即OPS
“m5_rate”: 5分钟 请求数/每秒的比率
“mean_rate”:平均每秒请求数
“duration_units”: “seconds”,//该Timer的单位
“rate_units”: “calls/second”//比率单位
4.统计指标在Grafana中的体现
4.1连续无限:timer.update()
当我们记录了一条值,调用了一次这个方法,刚刚注册过的一堆指标都能选了
4.2离散有限:meter.mark()
但是如果调用meter.mark(),就只能看到一些离散的结果值,因为Metrics不会对这种值进行计算“平均值,百分值”等,想想也不合理嘛
5.functions函数
一般来说常用的就两个:sumSeries()
和maxSeries()
,用于观测整体status状态,host来自多个数据源时,通过聚合函数可以将其合并,达到观测整体的效果
5.1maxSeries()监测整体最大延迟
- 对于记录响应时间Timer.updata()的指标(P99、max、mean、m1_rate),如果Grafana同时监测了多个host的数据源,每次P99、max等“响应指标”都会有多个(host几个就几个),这时候需要使用
maxSeries()
来取最大值,来监测99%的用户最大延迟是多少
5.2sumSeries()监测整体数量
- 对于记录响应结果状态Meter.mark()的指标(m1_rate),这种指标只有数量一说,因此只需要通过
sumSeries()
达到聚合整体观测的效果