想用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

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


拉的方案(不写agent)


优点:



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


缺点:



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


推的方案(agent)


优点:



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


缺点:



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


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


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

smallfish1

赞同来自: 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 - 爱go,爱编程,专注网络开发,流媒体、分布式、网络加速,欢迎讨论listomebao@gmail.com

赞同来自:

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

张明锋

赞同来自:

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

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

赞同来自:

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


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

hackstoic

赞同来自:

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

山羊wayne

赞同来自:

最近在折腾 prometheus

三只熊 - GO狂热追随者

赞同来自:

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

zhipj

赞同来自:

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

my3157

赞同来自:

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

要回复问题请先登录注册