本文分别记录了:
Metrics
收集日志交给Graphite
(Graphite本身也可以做为监控,但我们只是把他作为了一个数据存储,对grafana提供数据接口),Grafana
做数据展示
Grafana的数据来源于Graphite(由Metrics收集),其监控方式也是通过不停轮询(所以在Grafana中也叫新建query),如果Graphite中没有数据,Grafana中自然也不会显示,举个例子:
上述这个“Metric记录后才有选项”的特性十分重要,涉及到Grafana中的新建query是否有提示
仪表盘dashboard属于是最外层,在里面还可以创建row(一个小分组),创建query(一个实际的监测指标)
通用设置
变量设置:这里主要是为了后续配置query时能直接用$host $metric来默认指定
创建一行,后续可以鼠标放上去设置名字
还是上面那个图,点“Add Query”即可
Metrics提供了五种基本的度量类型:
一般来说最后两个满足了绝大部分监控的场景
Gauges中文名称可以翻译为计量器。它可以表示一个既可以增加, 又可以减少的度量指标值。它是最简单和最基本的Metrics类型,只有一个简单的返回值,通常用来记录一些对象或者事物的瞬时值
。
计量器的典型使用场景包括:
温度
内存使用量
Counters中文名称可以翻译为计数器。它是一种累计型的度量指标,数值只能单调递增。
计数器的典型使用场景包括:
服务请求数
任务完成数
错误出现次数
Histograms中文名称可以翻译为直方图。它可以用来度量流数据中value的分布情况,Histrogram可以计算最大/小值、平均值,方差,分位数(如中位数,或者95th分位数),如75%,90%,98%,99%的数据在哪个范围内。最大的特点是提供了多种多样的数据统计方式。
直方图的典型使用场景包括:
流量最大值
流量最小值
流量平均值
流量中位值
Meters中文名称可以翻译为TPS计数器
。它是一种只能自增的计数器,通常用来度量一系列事件发生的比率(例如记录succeed和failed可以直到接口成功率)。他提供了平均速率,以及指数平滑平均速率,以及采样后的1分钟,5分钟,15分钟速率。
TPS计数器的典型使用场景包括:
平均每秒请求数
最近1分钟平均每秒请求数
最近5分钟平均每秒请求数
最近15分钟平均每秒请求数
Timers中文名称可以翻译为计时器
。Histogram跟Meter的一个组合,另外还提供了对于某段代码执行的耗时的统计及计算功能。
计时器的典型使用场景包括:
请求时延
磁盘读时延
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(时间数值单位)
监控指标一般分为两大类:
meter.mark(k,v)
,v的选择是有限且离散的(如succeed和failed)timer.update(value,TimeUnit.MILLISECONDS)
,value就是一个连续无限的“end-start时间”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来展示绝大部分用户的接口响应时间,满足绝大部分用户的体验
“stddev”: 方差
“count”: 总次数
“max
”: 最长时间
“mean
”: 平均时间
“min
”: 最短时间
“m15_rate”: 15分钟 请求数/每秒的比率
“m1_rate
”: 1分钟内 请求数 / 每秒 即OPS
“m5_rate”: 5分钟 请求数/每秒的比率
“mean_rate”:平均每秒请求数
“duration_units”: “seconds”,//该Timer的单位
“rate_units”: “calls/second”//比率单位
当我们记录了一条值,调用了一次这个方法,刚刚注册过的一堆指标都能选了
但是如果调用meter.mark(),就只能看到一些离散的结果值,因为Metrics不会对这种值进行计算“平均值,百分值”等,想想也不合理嘛
一般来说常用的就两个:sumSeries()
和maxSeries()
,用于观测整体status状态,host来自多个数据源时,通过聚合函数可以将其合并,达到观测整体的效果
maxSeries()
来取最大值,来监测99%的用户最大延迟是多少sumSeries()
达到聚合整体观测的效果