大家好,我叫大倪,出来工作快两年了,现在从事运维工作。我接触python已经有一年多了(边上班边学习),python是门很不错的语言(我也只接触过这一门),可以做很多事情,而我接触它,是因为想往自动化运维方向发展,学了这么久,总得有拿的出手的作品才行,那就写个自动化监控系统吧,不过我没从事过开发,自己肯定搞不定的,这里我就借鉴(抄)Alex老师的需求分析、架构设计、表结构设计等等,别的自己实现。
下面这个链接是我买的视频,用的是Django web框架,
http://edu.51cto.com/course/course_id-6208.html
一、监控的项目
网络层面:
网络流量、延迟、基本存活状态
系统层面:
cpudisk amload...
应用层:
mysql、tomcat、nginx、redis、django、ha-proxy、squid。。。cdn。。
业务层面:
pv、uv、订单总量。。。。。。
硬件层面监控:
磁盘、温度。。。。。。
二、优劣点:
从服务器的角度来讲
主动监控:是监控服务器 器主动向客户端索取数据
好处:
1、不需要装客户端。
2、简单
坏处:
1、当客户端过多的时候,就出现了瓶颈(解决方法:通过分布式,用代理服务器)
2、不易灵活的定制各种监控插件
被动监控:是客户端主动向服务 器汇报数据
好处:对服务器端的压力小,
灵活的定制各种监控插件
延迟小
坏处:
1、需要装客户端。
三、监控系统需求讨论
1、可监控常用系统服务、应用、网络设备等。
2、一台主机上可监控多个不同服务、不同服务的监控间隔可不同
3、同一个服务在不同主机上的监控间隔、报警阀值可不同。
4、可以批量的给一批主机添加、删除、修改要监控的服务。
5、告警级别:
不同的服务 因为业务重要程度不同,如果出了问题可以设置不同的报警
可以指定特定的服务或告警级别的事件通知给特定的用户
告警级别的升级设定
6.历史数据 的存储和优化
● 实现用最少的空间占用量存储最多的有效数据
● 如何做到1s中之内取出一台主机上所有服务的5年的监控数据?
7. 数据可视化,如何做出简洁美观的用户界面?
8.如何实现单机支持5000+机器监控需求?
9.采取何种通信方式?主动、被动?
10.如何实现监控服务器的水平扩展?
四、采用什么架构?
•Mysql
•主动通信? Snmp,wget…
•被动通信?Agent ---how to communicate with the monitor server
•Socket server –> Sockect client
•能否用现成的c/s架构? Rabbit mq, redis 订阅发布, http ?
采用HTTP好处
1.接口设计简单
2.容易水平扩展做分布式
3.Socket稳定成熟,省去较多的通信维护精力
五、设计架构图: