背景

从公司产品上线的那一天就开始需要运维,而监控则是运维中重要的一环,那我们想一下,为什么要监控呢,因为要保证线上服务出问题之后或者即将出问题时能立刻感知,此外有些数据我们想知道它的发展趋势。这其实已经道出了监控的最小功能点:
收集信息,进行处理,发出提醒,数据展示

阶段一:

机器数量:n < 5
假如公司的只有一款产品部署在一台机器,那我们只要写一个监控脚本,收集机器的信息和业务指标,再加一些判断,就完事了

阶段二:

机器数量:5 < n < 200
那如果公司规模扩大,机器增加到50台,项目组件分别部署在不同的机器。如果还按照原来的办法,每个机器的脚本各不相同,管理起来必然非常麻烦,之前脚本的方式显然不适用了。那怎么做呢。

  1. 自己开发一套监控系统
  2. 寻找能满足需求的开源的监控系统

从人力成本考虑,方案一是一个比较好的选择,小米在当初就是用的开源监控系统Zabbix

阶段三:

机器数量:n > 200
等公司规模继续扩大发展到非常大的规模,发展到5000台机器,每个机器假设有100个监控项,就是50W监控项,这样在mysql数据库储存方案就遇到了性能瓶颈,如果搭建多套zabbix,管理成本也会非常高昂。此时,就迫切需要根据公司的需求自己开发一套监控系统。下面就让我们思考下怎么开发一套监控系统。

总体设计

现在我们需要开发一套监控系统,下面就思考一下整体的架构
首先我们要收集数据,数据包括机器指标和业务产生的数据,所以我们需要一个agent采集端。
有了数据后,有两个用途:1.画趋势图 2.做告警判断
所以还需要两个组件,一个负责储存并展示历史数据,一个负责告警判断
这篇就到这里,后续文章将对三个重要组件及其拓展做更详细的讲解

–End–