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是最简单的度量类型,只有一个简单的返回值,
他用来记录一些对象或者事物的瞬时值。
类似于程序里的常量,是不变的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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()方法对计数器做修改。
1 2 3 4 5 6 7 8 9 10 11 12 | 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
本身是一个自增计数器。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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的一个组合,比如要统计当前请求的速率和处理时间。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-03-04 Ajax技术使用之ajax与模态框结合的妙用
2019-03-04 Django报错:提交表单报错---RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you have APPEND_SLASH set.
2019-03-04 Django2.0引入css、js、img文件