高性能可扩展的python自动化运维框架[作业]

一直在用Python写运维中的各种脚本,想做自动化运维平台却有心无力,没有见过大的运维平台怎么做,自己写的脚本在大的场景下是否靠谱,每当讨论说一些基于ssh获取数据执行操作的方式都会被鄙视。

迷茫大半年找不到方向,最近在reboot系统学习了下,收获很多,很多疑惑和疑难问题终于解开了。

感谢PC老师的深入讲解:程序对系统利用的深入讲解[cpu\内存的利用\系统的特性],几款典型开源软件源码的网络模型剖析,如何真正控制多线程,守护进程如何fork,封装socket的epoll非阻塞框架,如何制定传输协议。

有兴趣的同学可以点文章右边→_→的群链接咨询群主试听。还有每2、3周举办免费技术沙龙分享。敬请关注!

此次更新框架使用epoll,并将代码全部分享,详见github地址:

https://github.com/51reboot/simpleMon

  • 监控和执行命令流程图

    流程图

 

  • 软件目录 [根据需要分分钟复制出一个server,改改操作就好了]

    模块文件

 

  • 任务控制服务的传输数据

    发送命令和接收命令

 

  • flask数据接口的请求日志

    flask数据接口

 

  • agent的执行日志

    agent获取监控数据和执行命令

  • agent的4个线程,可随意扩展需求

    agent

  • 后台请求页面和数据接口

数据接口

  • 页面ajax调用数据接口

ajax数据接口信息

 

  • 监控数据出图

图1

哎!前面的数据,6个server同时在一个机器上跑,毫无压力,监控图不好看。。。。我来搞几百个并发shell进程跑跑,把load压上来。

 

  • 执行命令 [发出ajax请求,agent异步处理,传回入库后,再用ajax动态调用数据接口显示]

执行命令

 

总结

此架构非常灵活,任意拆装拼接,如果小,可功能集成于一点,如果大,可随意扩展瓶颈,server全部守护进程方式。

一切魔法都封装在nbNet模块中,socket使用epoll非阻塞,自定义传输协议,QPS几万毫无压力,epoll是注册回调函数,无需主动扫描FD,长链接也只占用内存,性能更好,所有模块全部导入这个nbNet模块,收发接口全部统一,就可随意拼接,3分钟就可以扩展出一个不同功能的server。得此神器,只有想不到没有做不到。

nbNet模块中2个重要功能,已经全部封装好了,只需要调用即可。

flask_web 就是极简单的几个数据接口和html页面,不得不承认大家确实都觉得一些比较炫的web页面就很牛,不会过多关注后台怎么回事,有张漂亮的脸也确实吸引人,不过确实需要花不少时间折腾,像我这种根本不懂审美,时间又有限,只能做成这个熊样了,真心不喜欢折腾web页面,啥时候用啥时候看,看过了还是忘,这里紧紧做了一些监控出图和执行命令的ajax调用。底层框架有了,页面随便找个做前端的小妹纸配合下就好了。

其他的server流程基本一致,不做过多重复展示了,文件传输在另外一个分支上做了,暂时没有合并,有这套框架,业务和功能比较好扩展了。

这里关于诸多实际情况都做出了考虑,比如agent睡眠时间漂移,监控数据丢失后时间戳不连续,报警动态加载配置,网络状态不好等等。但还是有很多细节需要逐步完善的地方。

启动过程

基于python2.7+   安装过程详见:  http://51reboot.com/python-base-install/

目录介绍

agent              客户端
controller      服务端[任务分发服务]
db                    写数据库
ff                      监控报警
trans               监控汇总分类传输
flask_web     web界面
nbNet             核心通信模块,每个server都要基于这个模块
每个目录下都有 daemon.py 脚本,此模块就是后台守护进程的模块
framework.py   为主程序模块
nbNet/nbNet.py   为核心通信模块,socket的epoll非阻塞I/O方式,自定义协议

安装Flask

由于暂未加重连功能,需要注意启动顺序,
启动web
启动controller   db    ff


在启动 trans
最后启动 agent
文章分类 架构
2 comments on “高性能可扩展的python自动化运维框架[作业]
  1. safeng说道:

    请问这个在哪可以下到 想学习

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

在线交流

数百位业内高手和同行在等你交流
Reboot运维开发分享