简介
go-monitor
基于golang
开发,是一个轻量的,用于服务质量监控并实现分析告警的工具。go-monitor
目前并不是一个独立的服务,而是希望被大多数基于golang
开发的项目如同引入一个日志组件一样使用。
go-monitor
能做什么
通过上报接口、函数、或者是任意调用服务的耗时以及其成功状态,go-monitor
将按照设定的周期自动进行服务质量分析,统计,并输出详细的报告数据。
在服务质量达不到理想状态时,go-monitor
将触发告警,并在服务质量回升时,触发恢复通知。
go-monitor
提供非常多灵活的配置,以使其在大多数场景下都可以通过参数调整来胜任服务监控的职责。
go-monitor
采用无锁队列的方式避免并发锁带来的性能问题,MBP2012版本实测500万次上报数据(go test bench)仅花费1.6s即完成所有分析统计(此前并发锁方案为1.9s),强大的性能允许你像记录日志一样来使用它,并且不需要担心IO压力(大部分日志组件使用缓存写盘的方式提升性能,大并发下IO压力明显)。
什么场景建议使用
go-monitor
例如我们开发了一个web应用以对外提供服务,我们可以嵌入go-monitor,上报每一个访问的耗时、状态,以达到对我们整个web应用服务质量的监控,也可以在服务质量下滑甚至不可用时及时作出告警,更详尽的,我们可以上报任何一个调用服务的状态,例如我们所访问的数据库,所依赖的外部接口等,除了监控服务质量,事实上也可以通过go-monitor提供的统计数据了解任何一个服务的平均时延,大到一个完整的接口,小到一个数据库查询语句。而使用go-monitor的成本非常小,仅仅是在golang项目中引入go-monitor,像使用日志组件一样,毫无负担。
使用方法
安装
go get github.com/blurooo/go-monitor
引入使用
go-monitor
的使用非常简单,只需调用其提供的Register
函数即可注册得到一个上报客户端,上报客户端暴露了Report
方法用于上报服务的耗时指标:
import (
"github.com/blurooo/go-monitor"
"time"
)
// 注册得到一个上报客户端用于http服务质量监控
var httpReportClient = monitor.Register(monitor.ReportClientConfig {
Name: "http服务监控",
StatisticalCycle: 100, // 每100ms统计一次服务质量
})
func main() {
t := time.NewTicker(10 * time.Millisecond)
for curTime := range t.C {
// 每10ms向http监控客户端上报一