脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - Go语言metrics应用监控指标基本使用说明

Go语言metrics应用监控指标基本使用说明

2022-09-04 16:52tianlongtc Golang

这篇文章主要为大家介绍了Go语言metrics应用监控指标的基本使用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

metrics 是什么?

当我们需要为某个系统某个服务做监控、做统计,就需要用到Metrics

五种 Metrics 类型

  • Gauges :最简单的度量指标,只有一个简单的返回值,或者叫瞬时状态
  • Counters:Counter 就是计数器,Counter 只是用 Gauge 封装了 AtomicLong
  • Meters:Meter度量一系列事件发生的速率(rate),例如TPS。Meters会统计最近1分钟,5分钟,15分钟,还有全部时间的速率。
  • Histograms:Histogram统计数据的分布情况。比如最小值,最大值,中间值,还有中位数,75百分位, 90百分位, 95百分位, 98百分位, 99百分位, 和 99.9百分位的值(percentiles)。
  • Timer其实是 Histogram 和 Meter 的结合, histogram 某部分代码/调用的耗时, meter统计TPS。

接下来我们写代码实际使用一下这些功能 就从最简单的Gauges 开始吧

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main
import (
    "github.com/rcrowley/go-metrics"
    "time"
    "os"
    "log"
)
func main(){
    g := metrics.NewGauge()
    metrics.Register("bar", g)
    g.Update(1)
    go metrics.Log(metrics.DefaultRegistry,
        1 * time.Second,
        log.New(os.Stdout, "metrics: ", log.Lmicroseconds))
    var j int64
    j = 1
    for true {
        time.Sleep(time.Second * 1)
        g.Update(j)
        j++
    }
}

此时我们运行程序 可以看到如下输出

在程序中我们在metrics.Log 中设置了 metrics 的输出频率为1s 同时指定了数据输出的目的为 log.New出来的Logger 设置为打印在标准输出

Go语言metrics应用监控指标基本使用说明

接下counters 与gauges 类似

只不过在操作上 gauges 是 update 而 counter 是 inc 做加法 增加参数市值 dec 做减法

?
1
2
3
4
5
6
7
g := metrics.NewGauge()
metrics.Register("bar", g)
g.Update(1)
c := metrics.NewCounter()
metrics.Register("foo", c)
c.Inc(45)
c.Dec(3)

以上代码可以看到区别 在New 的时候 默认的时候数值都为0

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main
import (
    "github.com/rcrowley/go-metrics"
    "time"
    "os"
    "log"
)
func main(){
    s := metrics.NewExpDecaySample(1024, 0.015) // or metrics.NewUniformSample(1028)
    h := metrics.NewHistogram(s)
    metrics.Register("baz", h)
    h.Update(1)
    go metrics.Log(metrics.DefaultRegistry,
        1 * time.Second,
        log.New(os.Stdout, "metrics: ", log.Lmicroseconds))
    var j int64
    j = 1
    for true {
        time.Sleep(time.Second * 1)
        j++
        h.Update(j)
    }
}

metrics.NewExpDecaySample这函数的两个参数的含义: 第一是内部存储数据的个数

第二个是指数后乘以的数值 具体位置

下面来测试一下meters

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main
import (
    "time"
    "os"
    "github.com/rcrowley/go-metrics"
    "log"
)
func main(){
    m := metrics.NewMeter()
    metrics.Register("quux", m)
    m.Mark(1)
    go metrics.Log(metrics.DefaultRegistry,
        1 * time.Second,
        log.New(os.Stdout, "metrics: ", log.Lmicroseconds))
    var j int64
    j = 1
    for true {
        time.Sleep(time.Second * 1)
        j++
        m.Mark(j)
    }
}

测试结果

Go语言metrics应用监控指标基本使用说明

输出到influxdb

influxdb的安装和基本使用这里不做介绍

使用下面工作

vrischmann/go-metrics-influxdb

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main
import (
    "github.com/rcrowley/go-metrics"
    "time"
    "github.com/vrischmann/go-metrics-influxdb"
)
func main(){
    m := metrics.NewMeter()
    metrics.Register("quux", m)
    m.Mark(1)
    go influxdb.InfluxDB(metrics.DefaultRegistry,
        time.Second * 5,
        "http://192.168.150.74:8086",
        "mydb",
        "",
        "")
    var j int64
    j = 1
    for true {
        time.Sleep(time.Second*1)
        m.Mark(j)
        j += 1
    }
}

看以上的代码 其他地方都不用改动 只要改下输出的地方就可以了

在influx中使用设置的database 表名则自用生成 使用 是 metrics中register 设置的名字加上类型 在这里例子中 表名为quux.meter

就可以在influxdb 里面看到如下的一些数据:

Go语言metrics应用监控指标基本使用说明

以上就是Go语言metrics应用监控指标基本使用说明的详细内容,更多关于go语言metrics使用的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/tianlongtc/article/details/81158506

延伸 · 阅读

精彩推荐
  • GolangGo语言自带测试库testing使用教程

    Go语言自带测试库testing使用教程

    这篇文章主要为大家介绍了Go语言自带测试库testing使用教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    darjun7492022-07-22
  • Golanggo语言在请求http时加入自定义http header的方法

    go语言在请求http时加入自定义http header的方法

    这篇文章主要介绍了go语言在请求http时加入自定义http header的方法,实例分析了Go语言http请求的原理与操作技巧,需要的朋友可以参考下 ...

    令狐不聪8742020-04-22
  • GolangGo语言实现简单Web服务器的方法

    Go语言实现简单Web服务器的方法

    这篇文章主要介绍了Go语言实现简单Web服务器的方法,实例分析了Web服务器的实现原理与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    不是JS2962020-04-17
  • GolangGo语言计算指定年月天数的方法

    Go语言计算指定年月天数的方法

    这篇文章主要介绍了Go语言计算指定年月天数的方法,实例分析了Go语言操作时间的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    pythoner6952020-04-19
  • GolangGO语言创建钱包并遍历钱包(wallet)的实现代码

    GO语言创建钱包并遍历钱包(wallet)的实现代码

    比特币钱包实际上是一个密钥对,当你安装 一个钱包应用,或者是使用一个比特币客户端来生成一个新地址是,他就会为你生成一个密钥对,今天通过本文...

    辜智强 -buaa6012021-06-26
  • GolangGo并发控制WaitGroup的使用场景分析

    Go并发控制WaitGroup的使用场景分析

    WaitGroup,可理解为Wait-Goroutine-Group,即等待一组goroutine结束,本文通过具体场景结合实际例子给大家介绍使用WaitGroup控制的实现方法,感兴趣的朋友跟随小...

    failymao6682021-08-15
  • Golanggo语言实现接口查询

    go语言实现接口查询

    这篇文章主要介绍了go语言实现接口查询,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Nick_6665532021-03-19
  • Golanggolang实现本地缓存Localcache的方法

    golang实现本地缓存Localcache的方法

    使用二维数组存储数据的相比于bigcache的优势在于可以直接根据索引删除对应的数据,虽然也会有虫洞的问题,但是我们可以记录下来虫洞的索引,不断填...

    Golang梦工厂5832022-01-04