为何要作监控?
zabbix已经这么强大了,为何要写一个监控mysql
首先来讲说zabbix的痛。redis
- 性能瓶颈。zabbix是使用MySQL来存放监控历史数据的。一台机器假设有100个监控项,2000台机器,就是20w监控项,监控系统的数据采集没有高峰低谷,是持续性的,周期性的,通常是一分钟采集一次。机器量愈来愈大,数据量就愈来愈大,MySQL的写入逐渐成为瓶颈,业界有一些proxy的方案,也只是治标不治本。zabbix有些数据采集是经过pull的方式,也就是server端主动探测的方式,当目标机器量大了以后,这些pull任务也常常出现积压。
- zabbix有些易用性问题。好比zabbix的模板是不支持继承的,机器分组也是扁平化的,监控策略不容易复用。zabbix要采集哪些数据,是须要在server端作手工配置的。
- 有些公司还须要业务的监控,好比某个thrift rpc接口,每分钟调用的cps,latency,某些url的5xx、4xx咱们也但愿作监控,某个开源软件,比redis、openstack、mysql的一些状态统计数据
- zabbix的大屏是个问题。虽然有些二次开发的界面很是棒
说了这么多很差的地方,只是在某些big的时候很差而已,咱们本身写的话,短时间内也是不可能超越zabbix的。那么为何要手写一套监控呢?sql
一、熟悉IT监控系统的设计原理
本身写的时候确定有不少事更zabbix相匹配的。
二、开发一个简版的类Zabbix监控系统。
为之后团队写监控作准备.zabbix在2K以上数量机器的时候,明显会吃力。小米也正是因为这个本身写了open-falcon。那么若是之后咱们遇到大数量的服务器的时候,彻底也会基于公司的业务去写一个监控。
那么如今练练手也是彻底OK的。
三、掌握自动化开发项目的程序设计思路及架构解藕原则。
监控系统需求讨论
1.可监控经常使用系统服务、应用、网络设备等
2.一台主机上可监控多个不一样服务、不一样服务的监控间隔可不一样
3.同一个服务在不一样主机上的监控间隔、报警阈值可不一样
4.能够批量的给一批主机添加、删除、修改要监控的服务
5.告警级别:
- 不一样的服务 由于业务重要程度不一样,若是出了问题能够设置不一样的报警级别
- 能够指定特定的服务或告警级别的事件通知给特定的用户
- 告警的升级设定
6.历史数据 的存储和优化
- 实现用最少的空间占用量存储最多的有效数据
- 作到1s中以内取出一台主机上全部服务的5年的监控数据(采用redis存取模糊点的方式)
7. 数据可视化,作出简洁美观的用户界面安全
8.实现单机支持5000+机器监控需求
9.实现主动以及被动监控方式
10.实现监控服务器的水平扩展
采用什么架构?
- Mysql存储主机配置项对应关系
- redis存储历史数据
- 支持服务端主动的监控方式(SNMP/PING)以及客户端被动的发送数据
- 采用HTPP的通讯方式
采用HTTP好处
1.接口设计简单服务器
2.容易水平扩展作分布式网络
3.Socket稳定成熟,省去较多的通讯维护精力。不用本身从socket底层写起架构
Http特性:socket
1.短链接分布式
2.无状态post
3.安全认证
4.被动通讯