无所老魏 發表於 2020-3-4 13:40:00

go go-metrics

<p>&nbsp;</p>
<h3>&nbsp;go-metrics介绍</h3>
<p>go-metrics — 对Go应用的某个服务做监控、做统计,应用级监控和测量。</p>
<p>源码 :&nbsp;https://github.com/rcrowley/go-metrics</p>
<p><span><span>文档:</span></span><span><span>http</span></span><span><span>&nbsp;:&nbsp;</span><span>//godoc.org/github.com/rcrowley/go-metrics</span><span>。</span></span></p>
<p>Metrics提供5种基本的度量类型:Gauges, Counters, Histograms, Meters和 Timers。</p>
<h3>Gauge</h3>
<p>Gauge是最简单的度量类型,只有一个简单的返回值,<br>他用来记录一些对象或者事物的瞬时值。<br>类似于程序里的常量,是不变的值。</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">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
} </pre>
</div>
<h3>Counter</h3>
<p>Counter是一个简单的计数器,可以增加和减少。<br>可以通过inc()和dec()方法对计数器做修改。</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">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
}</pre>
</div>
<h3>Meter</h3>
<p>Meters用来度量某个时间段的平均处理次数(request per second),每1、5、15分钟的TPS。比如一个service的请求数,通过metrics.meter()实例化一个Meter之后,然后通过meter.mark()方法就能将本次请求记录下来。统计结果有总的请求数,平均每秒的请求数,以及最近的1、5、15分钟的平均TPS。</p>
<div>
<div><code>Meters</code>工具会帮助我们统计系统中某一个事件的速率。比如每秒请求数(TPS),每秒查询数(QPS)等等。这个指标能反应系统当前的处理能力,帮助我们判断资源是否已经不足。<code>Meters</code>本身是一个自增计数器。</div>
<div>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">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)
        }
} </pre>
</div>
</div>
</div>
<h3>Histrogram</h3>
<p>Histrogram是用来度量流数据中Value的分布情况,Histrogram可以计算最大/小值、平均值,方差,分位数(如中位数,或者95th分位数),如75%,90%,98%,99%的数据在哪个范围内。</p>
<h3>Timer</h3>
<p>Timer是Histogram跟Meter的一个组合,比如要统计当前请求的速率和处理时间。</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/-wenli/p/12409018.html
頁: [1]
查看完整版本: go go-metrics