美文网首页
golang 代码埋点试性能监控

golang 代码埋点试性能监控

作者: 皮皮虾_132a | 来源:发表于2019-03-14 15:15 被阅读0次

    背景

    在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

    特点

    使用方便,只需在需要特别关照的业务处埋点,会自动生成metric,并推送至Falcon上

    使用方法

    配置文件

    <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

    相关文章

      网友评论

          本文标题:golang 代码埋点试性能监控

          本文链接:https://www.haomeiwen.com/subject/lxtcmqtx.html