GoPerfcounter 用户 golang 业务监控

发布于 2021-11-29 17:29:45 字数 4810 浏览 1140 评论 0

goperfcounter 用于 golang 应用的业务监控。goperfcounter 需要和开源监控系统 Open-Falcon 一起使用。

概述

使用 goperfcounter 进行 golang 应用的监控,大体如下:

  1. 用户在其 golang 应用代码中,调用 goperfcounter 提供的统计函数;统计函数被调用时,perfcounter 会生成统计记录、并保存在内存中
  2. goperfcounter会自动的、定期的将这些统计记录push给Open-Falcon的收集器(agenttransfer
  3. 用户在 Open-Falcon 中,查看统计数据的绘图曲线、设置实时报警

另外,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统计指标,如下。其中,timestampvalue是监控数据的取值;endpoint默认为服务器Hostname(),可以通过配置文件设置;step默认为60s,可以通过配置文件设置;tags中包含一个name=bar.called.error的标签(bar.called.error为用户自定义的统计器名称),其他tags标签可以通过配置文件设置;counterTypemetric由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的行为,可以通过配置文件来进行。配置文件需要满足以下的条件:

  • 配置文件必须和golang二进制文件应用文件,在同一目录
  • 配置文件命名,必须为perfcounter.json

配置文件的内容,如下

{
    "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监听
    }
}

API

几个常用接口,如下。

接口名称例子使用场景
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是用户定义的统计器名称。

统计器类型输出指标的名称输出指标的含义
Gaugevalue最后一次的记录值(float64)
Metersum事件发生的总次数(即所有计数的累加和)
rate一个Open-Falcon上报周期(默认60s)内,事件发生的频率,单位CPS
Histogrammax采样数据的最大值
min采样数据的最小值
mean采样数据的平均值
75th所有采样数据中,处于75%处的数值
95th所有采样数据中,处于95%处的数值
99th所有采样数据中,处于99%处的数值

Bench

请移步到这里

TODO

  • 支持本地缓存统计数据及UI展示。

项目地址:https://github.com/open-falcon/goperfcounter

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文