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

现在是一台liunx作为中控机,多台liunx作为应用服务器,想试着写个liunx性能监控的程序 有两种方法 1.不写agent程序,每次收集监控数据,直接在中控机上发起到应用服务器去收集,收集完后返回,多台可以并发 2.写agent程序,定时在应用服务器上将agent收集的监控数据发送到中控的server端,然后再去作展现 如果应用服务器多,第1种方法可能会慢? 如果是使用第2种方法,那这个agent 和server程序是使用tcp,还是http 还是socket? 那种更好,程序新手,不太懂呢,请大神给点建议。 监控cpu,io,内存之类的。
已邀请:

astaxie - 创造、获取、分享、传播和应用Go

赞同来自: lucyne swrd freedkr heygo bananalee PirLCK更多 »

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

## 拉的方案(不写agent)
优点:
- 不需要agent,不需要再部署新的程序

缺点:
- 网络中断的情况下,就无法监控机器的信息

## 推的方案(agent)
优点:
- 本地运行,在和中控机失去网络连接的时候还是可以继续保存监控数据

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

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

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

smallfish1 - 国内 Prometheus 首席布道师,是电子书《Promethues 实战》和 《Go 零基础入门》作者,另外对 SRE,自动化运维有深入理解。

赞同来自: swrd freedkr hitjxt heygo yet

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

Xargin

赞同来自: zradelaide1122 hitzzc narutoinfo

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

c4pt0r - PingCAP CTO

赞同来自: wwek

prometheus 不折腾

akin520

赞同来自: laiwei

open-falcon就不错

laiwei

赞同来自: taowen

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

sheepbao - https://sheepbao.github.io 爱go,爱编程,领域网络开发,流媒体、分布式、网络加速

小米有开源的企业级监控系统,你可以看看[open-falcon](https://github.com/XiaoMi/open-falcon),但是这玩意。。。。真的好大
直接使用prometheus就可以了。不需要造轮子。当然如果你有兴趣可以做prometheus存储端插件的开发,比如对接云厂商的存储,比如aws s3。让数据存储更久远些。另外也可以开发prometheus + grafana的template自动刷新机制。保证分布式系统中子节点动态迁移后的业务监控自动刷新。

Cloudinsight - 系统监控可视化工具,一体化解决方案,涵盖 Windows、Linux 操作系统监控,以及支持 30 多种基础组件监控。安装 Cloudinsight 探针只需 40 秒;所有基础组件监控支持可插拔。用 Golang 写的探针即将开源,敬请关注!

自荐一个,可以免费使用我们的产品, Agent 采集数据,StatsD 聚合,可视化展现,有专业的性能指标。[http://cloudinsight.oneapm.com/](http://cloudinsight.oneapm.com/?utm_source=gocn&utm_medium=answer&utm_term=answer&utm_campaign=CiTech&from=jscwgyegna)

Cloudinsight Agent 项目也开源了:https://github.com/cloudinsight/cloudinsight-agent
https://github.com/hackstoic/golang-open-source-projects#%E7%9B%91%E6%8E%A7%E7%B3%BB%E7%BB%9F 这个链接收录了一些用go写的监控系统。 供你参考。
最近在折腾 prometheus

三只熊 - GO狂热追随者

当然是`prometheus`了,在这方面已经很强大的东西就不用自己做了。
推荐用Prometheus,原生支持pull model,当然社区里面也支持push model。这里有一篇架构设计的文章,详细的讲了如何实现push,[Push Based Monitoring Service with Prometheus](http://zpjiang.me/2017/07/10/Push-based-monitoring-for-Prometheus/ "Push Based Monitoring Service with Prometheus")
建议采用agent push, linux很多metric 读proc下的文件会很方便, 上报采用http即可, 周期性采集完数据后批量上报, 服务端只做push数据接受和存储, db建议采用influxdb, 然后对db中的数据异步处理,实现监控规则和报警

要回复问题请先登录注册