Go问答 想用 golang 写个分布式的监控,大神给点建议

lucyne · 2016年10月13日 · 最后由 UlricQin 回复于 2020年03月22日 · 125 次阅读

现在是一台 liunx 作为中控机,多台 liunx 作为应用服务器,想试着写个 liunx 性能监控的程序 有两种方法 1.不写 agent 程序,每次收集监控数据,直接在中控机上发起到应用服务器去收集,收集完后返回,多台可以并发 2.写 agent 程序,定时在应用服务器上将 agent 收集的监控数据发送到中控的 server 端,然后再去作展现

如果应用服务器多,第 1 种方法可能会慢?

如果是使用第 2 种方法,那这个 agent 和 server 程序是使用 tcp,还是 http 还是 socket? 那种更好,程序新手,不太懂呢,请大神给点建议。

监控 cpu,io,内存之类的。

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

这个问题很有意思,很多场景设计都会来考虑拉和推两种方案,我分别对拉和推两种的优缺点对比以下,你自己权衡一下,欢迎大家继续补充

拉的方案 (不写 agent)

优点:

  • 不需要 agent,不需要再部署新的程序

缺点:

  • 网络中断的情况下,就无法监控机器的信息

推的方案 (agent)

优点:

  • 本地运行,在和中控机失去网络连接的时候还是可以继续保存监控数据

缺点:

  • 需要部署 agent,如果机器多得话将来升级也是比较麻烦

拉取和推送其实大家可以考虑,微博的 follow 逻辑,直播流里面也有同样的问题,很多场景都会遇到

至于说第二种方案走什么协议,这种程序我建议走 tcp 协议,HTTP 的话相对重了一点。

prometheus 采用的是 agent + pull 的方式 , 楼主可以看看 https://prometheus.io/

小米有开源的企业级监控系统,你可以看看open-falcon,但是这玩意。。。。真的好大

直接使用 prometheus 就可以了。不需要造轮子。当然如果你有兴趣可以做 prometheus 存储端插件的开发,比如对接云厂商的存储,比如 aws s3。让数据存储更久远些。另外也可以开发 prometheus + grafana 的 template 自动刷新机制。保证分布式系统中子节点动态迁移后的业务监控自动刷新。

自荐一个,可以免费使用我们的产品, Agent 采集数据,StatsD 聚合,可视化展现,有专业的性能指标。http://cloudinsight.oneapm.com/

Cloudinsight Agent 项目也开源了:https://github.com/cloudinsight/cloudinsight-agent

然后就变成了各公司的广告 233

https://github.com/hackstoic/golang-open-source-projects#%E7%9B%91%E6%8E%A7%E7%B3%BB%E7%BB%9F 这个链接收录了一些用 go 写的监控系统。 供你参考。

prometheus 不折腾

open-falcon 就不错

最近在折腾 prometheus

请关注 open-falcon:)一整套的解决方案

当然是prometheus了,在这方面已经很强大的东西就不用自己做了。

推荐用 Prometheus,原生支持 pull model,当然社区里面也支持 push model。这里有一篇架构设计的文章,详细的讲了如何实现 push,Push Based Monitoring Service with Prometheus

建议采用 agent push, linux 很多 metric 读 proc 下的文件会很方便, 上报采用 http 即可, 周期性采集完数据后批量上报, 服务端只做 push 数据接受和存储, db 建议采用 influxdb, 然后对 db 中的数据异步处理,实现监控规则和报警

推荐夜莺:https://gocn.vip/topics/10089 哈哈,王婆卖瓜,纯 Go,组件少易维护,可以看做 Open-Falcon 的升级版,在 cpu、内存、io 这种基础指标的监控场景,比 Prometheus 好用

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册