goperfcounter 用于 golang 应用的业务监控。goperfcounter 需要和开源监控系统 Open-Falcon(link:http://book.open-falcon.com/zh/index.html) 一起使用。
使用 goperfcounter 进行 golang 应用的监控,大体如下:
另外,goperfcounter 提供了 golang 应用的基础监控,包括runtime指标、debug指标等。默认情况下,基础监控是关闭的,用户可以通过配置文件来开启此功能。
在golang项目中使用goperfcounter时,需要进行安装,操作如下
- go get github.com/niean/goperfcounter
-
用户需要引入goperfcounter包,需要在代码片段中调用goperfcounter的API。比如,用户想要统计函数的出错次数,可以调用Meter方法。
- package xxx
-
- import (
- pfc "github.com/niean/goperfcounter"
- )
-
- func foo() {
- if err := bar(); err != nil {
- pfc.Meter("bar.called.error", int64(1))
- }
- }
-
- func bar() error {
- // do sth ...
- return nil
- }
这个调用主要会产生2个Open-Falcon统计指标,如下。其中,timestamp和value是监控数据的取值;endpoint默认为服务器Hostname(),可以通过配置文件设置;step默认为60s,可以通过配置文件设置;tags中包含一个name=bar.called.error的标签(bar.called.error为用户自定义的统计器名称),其他tags标签可以通过配置文件设置;counterType和metric由goperfcounter决定。
- {
- "counterType": "GAUGE",
- "endpoint": "git",
- "metric": "rate",
- "step": 20,
- "tags": "module=perfcounter,name=bar.called.error",
- "timestamp": 1451397266,
- "value": 13.14
- },
- {
- "counterType": "GAUGE",
- "endpoint": "git",
- "metric": "sum",
- "step": 20,
- "tags": "module=perfcounter,name=bar.called.error",
- "timestamp": 1451397266,
- "value": 1023
- }
默认情况下,goperfcounter不需要进行配置。如果用户需要定制goperfcounter的行为,可以通过配置文件来进行。配置文件需要满足以下的条件:
配置文件的内容,如下
- {
- "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",默认不采集
- "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监听
- }
- }
几个常用接口,如下。
接口名称 | 例子 | 使用场景 |
---|---|---|
Meter | // 统计页面访问次数,每来一次请求,pv加1 Meter("pageView", int64(1)) |
Meter用于累加计数。输出累加求和、变化率 |
Gauge | // 统计队列长度 Gauge("queueSize", int64(len(myQueueList))) GaugeFloat64("queueSize", float64(len(myQueueList))) |
Gauge用于记录瞬时值。支持int64、float64类型 |
Histogram | // 统计线程并发度 Histogram("processNum", int64(326)) |
Histogram用于计算统计分布。输出最大值、最小值、平均值、75th、95th、99th等 |
更详细的API介绍,请移步到这里。
goperfcounter会将各种统计器的统计结果,定时发送到Open-Falcon。每种统计器,会被转换成不同的Open-Falcon指标项,转换关系如下。每条数据,至少包含一个name=XXX的tag,XXX是用户定义的统计器名称。
统计器类型 | 输出指标的名称 | 输出指标的含义 |
---|---|---|
Gauge | value | 最后一次的记录值(float64) |
Meter | sum | 事件发生的总次数(即所有计数的累加和) |
rate | 一个Open-Falcon上报周期(默认60s)内,事件发生的频率,单位CPS | |
Histogram | max | 采样数据的最大值 |
min | 采样数据的最小值 | |
mean | 采样数据的平均值 | |
75th | 所有采样数据中,处于75%处的数值 | |
95th | 所有采样数据中,处于95%处的数值 | |
99th | 所有采样数据中,处于99%处的数值 |
请移步到这里。