背景

在gateway系统开发的过程中,因为毕竟是面向公网的,所以需要全方位的监控,比如QPS,失败次数,成功次数,这类代码级的监控,参考transfer的源码,其在代码中埋了一部分监测点,然后通过API暴露出来,交给另外的组件去采集,这样略显麻烦

数据类型

目前常用的度量类型:

Gauge:

Gauge是最简单的度量类型,存储了一个double类型的值,所以一般用它记录系统的一些即时值,比如最近的一次的内存占用或者是系统CPU百分比。

Counter:

Counter顾名思义是计数器的意思,用于存储一个64位长计数器,由应用系统的代码逻辑控制Counter的自增或自减。而且该计数器是支持明细计数的,Counter保持一个总的计数,并且保持一个子项的计数明细数组。
计数器可以用来记录当前系统的并发数。在进入调用时计数器自增,退出之前自减。并且还可以支持使用一个Counter实现针对各个接口进行明细统计。

Histogram:

Histogram直方图,度量流数据中Value的分布情况,将会计算最大/最小、平均值、方差、分位数(75%,90%,98%,99%的数据在哪个范围)。例如可以统计每一个POST请求中的内容的大小或者处理所花的时间。

Meter:

Meter度量的是事件在一定单位时间内发生的次数。比如单位时间内事件发生的平均次数,或者1分钟、5分钟或15分钟内发生次数的滑动平均值。可以使用Meter统计异常发生的频率。

Timer:

Timer是Histogram跟Meter的一个组合,他在Meter的基础上,增加了对处理耗时的Histogram的度量,并且他还度量了一个ActiveSession的值,他代表了一个并发数。Timer是五种度量里最复杂的度量类型。

调研

在github上相中了“goperfcounter”,而且老版本的原生的gateway中也有少部分地方用到了该组件:github.com/niean/goperfcounter

特点

特别关照

使用方法

配置文件

<pre>
{
"debug": false, // 是否开启调制,默认为false
"hostname": "", // 机器名(也即endpoint名称),默认为本机名称
"tags": "", // tags标签,默认为空。一个tag形如"key=val",多个tag用逗号分隔;name为保留字段,因此不允许设置形如"name=xxx"的tag。eg. "cop=xiaomi,module=perfcounter"
"step": 60, // 上报周期,单位s,默认为60s
"bases":[], // gvm基础信息采集,可选值为"debug"、"runtime",默认不采集(gvm为go虚拟环境,类似ruby的rvm)
"push": { // push数据到Open-Falcon
"enabled":true, // 是否开启自动push,默认开启
"api": "" // Open-Falcon接收器地址,默认为本地agent,即"http:// 127.0.0.1:1988/v1/push"
},
"http": { // http服务,为了安全考虑,当前只允许本地访问
"enabled": false, // 是否开启http服务,默认不开启
"listen": "" // http服务监听地址,默认为空。eg. "0.0.0.0:2015"表示在2015端口开启http监听
}
}
</pre>

使用示例

  • 记录gateway push接口累计接收的数据
    image.png