go go-metrics

Posted -wenli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go go-metrics相关的知识,希望对你有一定的参考价值。

 

 go-metrics介绍

go-metrics — 对Go应用的某个服务做监控、做统计,应用级监控和测量。

源码 : https://github.com/rcrowley/go-metrics

文档:http : //godoc.org/github.com/rcrowley/go-metrics

Metrics提供5种基本的度量类型:Gauges, Counters, Histograms, Meters和 Timers。

Gauge

Gauge是最简单的度量类型,只有一个简单的返回值,
他用来记录一些对象或者事物的瞬时值。
类似于程序里的常量,是不变的值。

package main

import (
	"github.com/rcrowley/go-metrics"
)
func main(){
	g := metrics.NewGauge()
	metrics.Register("bar", g)
	g.Update(1)
	print(g.Value())//1
	g.Update(5)
	print(g.Value())//5
} 

Counter

Counter是一个简单的计数器,可以增加和减少。
可以通过inc()和dec()方法对计数器做修改。

package main

import (
	"github.com/rcrowley/go-metrics"
)
func main(){
	c := metrics.NewCounter()
	metrics.Register("foo", c)
	c.Inc(45)
	c.Dec(3)
	print(c.Count())/42
}

Meter

Meters用来度量某个时间段的平均处理次数(request per second),每1、5、15分钟的TPS。比如一个service的请求数,通过metrics.meter()实例化一个Meter之后,然后通过meter.mark()方法就能将本次请求记录下来。统计结果有总的请求数,平均每秒的请求数,以及最近的1、5、15分钟的平均TPS。

Meters工具会帮助我们统计系统中某一个事件的速率。比如每秒请求数(TPS),每秒查询数(QPS)等等。这个指标能反应系统当前的处理能力,帮助我们判断资源是否已经不足。Meters本身是一个自增计数器。
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)
	}
} 

Histrogram

Histrogram是用来度量流数据中Value的分布情况,Histrogram可以计算最大/小值、平均值,方差,分位数(如中位数,或者95th分位数),如75%,90%,98%,99%的数据在哪个范围内。

Timer

Timer是Histogram跟Meter的一个组合,比如要统计当前请求的速率和处理时间。

 

以上是关于go go-metrics的主要内容,如果未能解决你的问题,请参考以下文章

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

你知道的Go切片扩容机制可能是错的

golang代码片段(摘抄)

npm : 无法加载文件 D:softcodeProcess ode ode_global pm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +(代码片段

为每个片段添加一个操作栏