最近公司需要一套通用的监控系统,对监控系统进行了一些调研,最后在网上搜索资料和同事讨论中知道了open-falcon(小米开源)监控系统,这是一套针对于互联网的监控,看了设计原理和一些特性,觉得非常不错,现在已经上线并试用。跟大家分享一下open-falcon的使用和配置方法
open-falcon将监控数据都抽象成key-value的形式,所以无论你是监控什么样的业务,什么样的场景,只要将数据抽象为key-value,理论上都是被open-falcon监控的。举个例子,要监控服务器的qps,那可以将qps数据抽象为{“qps”:1000},前面就是key,后面就是qps的值。然后将数据push到监控中,设置合理的报警即可。其他数据也是一样,所以他是一个非常通用的监控。
官方文档已经比较全面了,这里主要讲一下遇到的一些坑
我们有部分机器在运行一段时间以后出现了异常,无法上报数据,异常代码如下:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x471654]
goroutine 13 [running]:
github.com/open-falcon/agent/g.(*SingleConnRpcClient).Call(0x0, 0x81c0d0, 0xf, 0x6da0a0, 0xc2080e2000, 0x7678a0, 0xc2080d21e0, 0x0, 0x0)
/home/xiaoju/gopath/src/github.com/open-falcon/agent/g/rpc.go:58 +0x584
github.com/open-falcon/agent/g.updateMetrics(0xc20801efc0, 0x11, 0xc20810c180, 0x6, 0x8, 0xc2080d21e0, 0x0)
/home/xiaoju/gopath/src/github.com/open-falcon/agent/g/transfer.go:50 +0x174
github.com/open-falcon/agent/g.SendMetrics(0xc20810c180, 0x6, 0x8, 0xc2080d21e0)
/home/xiaoju/gopath/src/github.com/open-falcon/agent/g/transfer.go:24 +0x1ff
github.com/open-falcon/agent/g.SendToTransfer(0xc20810c180, 0x6, 0x8)
/home/xiaoju/gopath/src/github.com/open-falcon/agent/g/var.go:60 +0x1ad
github.com/open-falcon/agent/cron.collect(0x3c, 0xc20802b340, 0x2, 0x2)
/home/xiaoju/gopath/src/github.com/open-falcon/agent/cron/collector.go:73 +0x2a4
created by github.com/open-falcon/agent/cron.Collect
/home/xiaoju/gopath/src/github.com/open-falcon/agent/cron/collector.go:30 +0xf7
这是老版本的agent使用了一把大锁,当transfer挂掉以后,agent无法恢复数据的push。
解决方法是:最新版本的agent已经解决了这个问题,使用源码安装的方式安装即可。
nodatas配置主机列表是,当改变HostGroups以后,nodatas里的数据并不会改变,会导致配置失效。
解决方法是:在修改HostGroups后,一定要记得同时修改nodatas的数据,这个地方设计不是很好。
portal端口默认是1988,如果改成其他端口的话,从portal中打开机器时无法看到机器的数据,因为页面的端口是写死的。
解决方法:修改页面的默认端口号,文件路径
/home/work/open-falcon/portal/web/templates/host/index.html
所有组件数据库链接格式都是:
root:123456@tcp(127.0.0.1:3306)/graph?loc=Local&parseTime=true
# 账号:密码@tcp(主机:端口)/graph?loc=Local&parseTime=true
很多问题其实已经在最新版本解决了,所以大家尽量使用源码安装方式去安装,官方二进制版本有点老了,文档其实也有点老了,这也是国内众多开源系统的通病吧。