Chinaunix

标题: python 做监控数据采集,怎么做。。。新手请教 [打印本页]

作者: peanutshell    时间: 2014-03-03 11:17
标题: python 做监控数据采集,怎么做。。。新手请教
完全新手, 领导要求用python做一个集中监控系统,每台服务器的性能数据采集和各服务器上跑的数据库的相关性能数据的采集,,频率大概每分钟收集一次,存入数据库。
web展示先不考虑。不知道从何入手,有没有demo或者类似源码推荐一些参考一下,谢谢。
作者: timespace    时间: 2014-03-03 11:20
是Python新手,还是数据监控新手?
作者: peanutshell    时间: 2014-03-03 11:28
python会一些,不算精通。
主要是不知道怎么实现在一台上去采集多台服务器上的数据并存入数据库。
作者: q1208c    时间: 2014-03-03 11:29
分布式采集, 然后送到集中的服务器上.
作者: peanutshell    时间: 2014-03-03 11:35
q1208c 发表于 2014-03-03 11:29
分布式采集, 然后送到集中的服务器上.


这个太泛了。我个这也大概知道。有没有demo或者类似的源码?参考一下?多谢了。
作者: q1208c    时间: 2014-03-03 12:00
回复 5# peanutshell

最简单的就是http接口. 采集端只要post数据到服务器就行了. 这方面的例子多了去了吧.


我不知道你到底需要什么样的例子? 难道我全写好了发上来给你?

相信你也明白, 这东西不是几行代码可以搞定的. 就算我手上有, 也没法贴上来.
   
作者: timespace    时间: 2014-03-03 12:10
本帖最后由 timespace 于 2014-03-03 12:12 编辑

这么具体的问题,找通用demo很难啊,个人觉得问题的难点不在Python。
1. 获取什么服务器性能数据和如何获取,可以请教公司内部运维。
2. 获取什么数据库性能数据和如何获取,可以请教公司内部DBA。
3. 以上两点搞定了,才能确定临时数据存储结构和最终数据库表结构。

以上三点是关键,Python的事情就简单多了,提供一种思路:一分钟一次,实时性不高,每台服务器用cron部署一个a.py,用于获取性能数据,在某一台服务器有一个b.py,负责获取所有服务器a.py产生的数据,然后写入数据库;a.py如何上报到b.py取决于你擅长什么,如果熟悉网络编程,用a.py做客户端上报到服务端b.py,如果熟悉shell的文件同步(如rsync),a.py只写本地文件,b.py调用c.sh(封装rsync)拉取远程文件。
作者: peanutshell    时间: 2014-03-03 12:33
我是DBA。。。以上3点都不是问题。以前都是用shell在各自的服务器上做的。python只能写一些本地脚本 。不清楚这种集中式的怎么做。。。
作者: timespace    时间: 2014-03-03 13:36
本帖最后由 timespace 于 2014-03-03 13:37 编辑

这不就简单多了。。。
用Python不意味着只用Python,如果已有shell在本地统计了,就要利用已有成果,改造下shell脚本,按照你的实际需求格式让其写本地文件。然后在某一个机器上用shell(如rsync)把所有这些文件拉取过来,Python只负责解析这些文件并入库。
作者: peanutshell    时间: 2014-03-03 14:39
领导希望完全放弃shell. 也不在各服务器上有本地的脚本 。只有中心监控服务器一台。

作者: nmweizi    时间: 2014-03-03 14:52
本帖最后由 nmweizi 于 2014-03-03 14:56 编辑

zenoss,这个符合要求,而且开源。
作者: timespace    时间: 2014-03-03 14:58
领导的要求多啊,那就从一台服务器搞远程登录吧,paramiko和pexpect都可以,剩下的就是研究原来的shell实现,迁移到Python实现。
作者: 修杰_JIANG    时间: 2014-03-03 16:31
监控宝的 采集器 py写的 可以参考下
作者: q1208c    时间: 2014-03-03 16:54
回复 10# peanutshell


你们家领导的意思是, 不用问病人也能知道他是啥病是吧?
作者: wu_wei_jie    时间: 2014-03-05 16:29
timespace 发表于 2014-03-03 14:58
领导的要求多啊,那就从一台服务器搞远程登录吧,paramiko和pexpect都可以,剩下的就是研究原来的shell实现 ...



“一台服务器搞远程登录”的话,如果需要采集的服务器很多,循环会很慢,如果我如一些性能指标采集的时间间隔是秒级的,该如何处理?
作者: timespace    时间: 2014-03-05 16:49
回复 15# wu_wei_jie
加上前面那些限制,从一台机器登录很多台取数据的时候,基本不可能实现秒级精度,即使用很多线程也不行,跨机器跨网络一定会面临网络波动,内网也不例外,在一台机器部署连最基本的容错都做不到,名符其实的单点故障。
因此,这已经不是技术问题了,而是和领导的沟通技巧问题,拿出自己的观点和方案说服别人,大家都知道又想马儿跑又想马儿不吃草是不现实的。


   
作者: wu_wei_jie    时间: 2014-03-06 08:48
先不考虑可靠性,单不单点故障,这这后面考虑的事。

也就是说,想从一台机器登录到各服务器的方案不现实 ?

至少得在各服务器开发个类似 agent的东西,在各服务器本地收集完存入数据库?
作者: wu_wei_jie    时间: 2014-03-06 15:34
修杰_JIANG 发表于 2014-03-03 16:31
监控宝的 采集器 py写的 可以参考下


这个貌似不是开源的,什么地方可以下载呢?
作者: ToughGuy630    时间: 2014-03-09 20:32
看你用主动式监控还是被动监控

被动监控

监控服务器端起个server, 规范api数据可使用xml或者json都行,然后被监控机器做client, 定期向server发送数据

主动监控

可以用 paramiko 用ssh获取linux服务器信息,  或者pysnmp
当然你足够厉害的话也可以自己开发被监控端的server, 然后监控服务器这边相当于是client 定期到监控机器上去取数据。
作者: hmchzb19    时间: 2014-03-09 21:26
监控软件太多了,为啥要自己在做一个呢?

zenoss,zabbix, nagios, ganglia




作者: lichmama    时间: 2014-03-10 17:22
python编写C/S,C->本地采集->然后Socket-UDP推送,S->监听、接收、解析和入库。
至于呈现,apache+cgi就可以了。
结构上就是这样,没啥难度,多百度就行了。
作者: leiyu0815    时间: 2014-03-10 22:48
正解啊,你领导要是出于让你学习的目的,才有必要你自己写啊。。。要是解决问题,直接zabbix之类的不就可以了。。。
hmchzb19 发表于 2014-03-09 21:26
监控软件太多了,为啥要自己在做一个呢?

zenoss,zabbix, nagios, ganglia

作者: peanutshell    时间: 2014-03-21 16:21
lichmama 发表于 2014-03-10 17:22
python编写C/S,C->本地采集->然后Socket-UDP推送,S->监听、接收、解析和入库。
至于呈现,apache+cgi就可 ...



完全没经验。也想做成这样子。百度也百度不到。可用相关链接推荐?
作者: dooros    时间: 2014-03-26 21:10
远程获取服务器(或相关应用、数据库)状态有以下几种方法:
1、agent(客户端上放脚本程序,cron定时执行)
2、snmp
3、sql(数据库)
4、ssh(pexpect、paramiko)

推荐2,应用上可以用celery和redis保证前端展示的时效性,把耗时任务丢队列,前端用ajax刷新。

PS:黑客想控制你的机器还得经过一系列找漏洞+攻击,最后再放个后门呢!
作者: 初识orcl    时间: 2014-03-27 14:41
关注中,这个感觉可以搞搞
作者: 初识orcl    时间: 2014-05-27 13:27
关注一下这个
作者: Linux_manne    时间: 2014-05-28 14:41
重复造轮子???
1. 开源监控很多 随便来一个玩玩
2. 之前用shell 写的 现在改成python 难度不大,只是考虑到一台集中监控, 可以用 pysnmp 多玩玩 不是很复杂... 只要被监控端 开启snmp 协议即可

ps: 要锻炼脚本啥的 自己写 比较提倡,如果要用做正式环境的监控 你就问你老板 nagios , zabbix 你不知道么.  
作者: 一棵菠菜    时间: 2014-05-30 22:00
python网络异步编程twsited,可以解决你的问题,不过这个框架有点。。。。那个。你懂的。。。。
作者: 一棵菠菜    时间: 2014-05-30 22:01
本帖最后由 一棵菠菜 于 2014-05-30 22:05 编辑

那用paramiko去取数据吧,多进程加异步完全可以承受200+的机器。
作者: zimuyunren    时间: 2014-06-02 16:30
不是很懂,看看也会学到不少,呵呵




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2