指标统计是实现APM(Application performance management)的基础,一般经过一些指标的统计以及上报,咱们能够了解程序的运行情况,及时发现程序的问题,提早预估系统瓶颈.
指标(metric)目前的实现有metrics,这是java的实现,能够直接引入程序做为库使用.go语言的实现见go-metrics.
另外,这里只是将指标在内存中进行处理及计算,若是咱们想要展现,须要将数据抛出来,这里能够抛到日志里,也能够抛到时序数据库,最简单的作法就是直接抛到监控系统进行绘图或者报警.所以本文后面将讲解各指标的含义以及如何将计算好的数据抛到监控open-falconjava
用于计算一段时间内的计量,一般用于计算接口调用频率,如QPS(每秒的次数),主要分为rateMean,Rate1/Rate5/Rate15等指标.git
单位时间内发生的次数,如一分钟发送100次,则该值为100/60.github
1分钟/5分钟/15分钟内的滑动平均值(moving average),数据库
用于对瞬时值的测量,如咱们能够过一段时间就对内存的使用量进行统计,并上报,那么全部的数据点集就是对应时间点的内存值,Gauges只有value指标.也就是上报的是什么就是什么.json
计数类统计,能够进行加或减,也能够进行归零操做,全部的操做都是在旧值的基础上进行的.这里能够经过天天归零,而后新增注册用户时加1来统计天天的注册用户.spa
主要用于对数据集中的值分布状况进行统计,典型的应用场景为接口耗时,接口每次调用都会产生耗时,记录每次调用耗时来对接口耗时状况进行分析显然不现实.所以将接口一段时间内的耗时看作数据集,并采集Count,Min, Max, Mean, Median, 75%, 95%, 99%等指标.以相对较小的资源消耗,来尽量反应数据集的真实状况.日志
距离上次清理后产生的样本数量.code
样本中的最小值orm
样本中的最大值blog
全部样本的求得的平均值
样本中的中间位置的值.
样本中的%75位置的值.
样本中的%95位置的值.
样本中的%99位置的值.
对某个代码模块同时进行统计调用频率以及调用耗时统计.指标就是Histograms以及Meters两种统计方式的合集.
更对详细用法见go-metric文档
c := metrics.NewCounter() metrics.Register("foo", c) //进行加操做 c.Inc(47) //进行减操做 c.Dec(1) //获取出值 c.Count()
g := metrics.NewGauge() metrics.Register("bar", g) //更新瞬时值 g.Update(47) //获取出瞬时值 g.Value()
m := metrics.NewMeter() metrics.Register("quux", m) //写入数据集 m.Mark(47) //获取数据集只读快照 m := metric.Snapshot() //数据集大小 m.Count() //1分钟滑动平均值 m.Rate1() //5分钟滑动平均值 m.Rate5() //15分钟滑动平均值 m.Rate15() //平均值 m.RateMean()
h := metrics.NewHistogram(s) metrics.Register("baz", h) //写入数据集 h.Update(47) //获取数据集只读快照 h := metric.Snapshot() //数据集大小 h.Count() //最小值 h.Min() //最大值 h.Max() //平均值 h.Mean() ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99}) //中位数 ps[0] //75%的数 ps[1] //95%的数 ps[2] //99%的数 ps[3]
t := metrics.NewTimer() metrics.Register("bang", t) t.Time(func() { //do some thing }) t.Update(47) //获取方式同meter以及Histograms
代码及使用方式见 go-metrics-falcon
实现数据上报open-falcon,只须要将全部数据取出,按open-falcon格式上报便可,这里有涉及到上报json的定义,具体以下.
{ "endpoint": "$endpoint", "metric": "$name", "value": 2.2, "step": 60, "counterType": "GAUGE", "tags": "project=$projectName,metricType=meter,valueType=ratemean", "timestamp": 1524724608 }
endpoint: 这一个通常是主机hostname,用于标注是哪台机器.
metric: 指标名,由用户定义
value: 指标的值
step: 上报的时间周期
counterType: 上报的类型,这里open-falcon只支持GAUGE以及COUNTER,所以统一使用GAUGE.
tags: 标签,用于却别指标,包含指标类型,值类型,项目名三项.
timestamp: 指标上报的时间戳,单位秒.
如图,输入endpoint, 而后在counter部分输入项目名就能够过滤出该项目上报的全部指标.
点击指标,进入查询该指标的大图.
同时咱们能够对指标设置监控,具体见open-falcon文档.