为什么要做监控?
zabbix已经这么强大了,为什么要写一个监控
首先来说说zabbix的痛。
- 性能瓶颈。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的。那么为什么要手写一套监控呢?
1、熟悉IT监控系统的设计原理
自己写的时候肯定有很多事更zabbix相匹配的。
2、开发一个简版的类Zabbix监控系统。
为以后团队写监控做准备.zabbix在2K以上数量机器的时候,明显会吃力。小米也正是由于这个自己写了open-falcon。那么如果以后我们遇到大数量的服务器的时候,完全也会基于公司的业务去写一个监控。
那么现在练练手也是完全OK的。
3、掌握自动化开发项目的程序设计思路及架构解藕原则。
监控系统需求讨论
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特性:
1.短连接
2.无状态
3.安全认证
4.被动通信