主要分系统监控和业务监控两类吧

系统监控就是每台主机的CPU,内存,网络带宽等使用情况,以及Mysql, Redis, Nginx等服务的核心指标等,这是比较基本的监控,必须得有,如果这块监控做的好,生产环境可以提前发现很多问题,防患于未然。

业务监控就是业务相关的指标,如某API每秒调用次数,每分钟该API的平均响应时间,服务的在线人数,甚至一些运营相关的数据,如七日留存率啦,每日新增用户,每日流失用户等。这些数据也很重要,他是你整个业务的晴雨表,为你做一些重要决策提供依据。

对于系统监控,有很多开源软件可以拿来用,如比较出名的ngios,cacti,zabbix等,部署都比较复杂,客户端要部agent,还得装一个center用来收集,存储展现数据,还有好多插件需要维护。但有一个比较简单的东西是collectd,它自带了各种插件,如系统CPU,磁盘利用率,mysql,nginx,redix等常用服务都可

以进行监控,而且自动给你推荐了要监控哪些指标。安装很方便,基本上./configuration && make && make install就可以了。

对于业务监控,肯定是需要自己写代码上报业务数据的,现在比较流行的方案是statsd+graphite,比较轻量级,而且有很多语言的sdk,可以很轻松把各种指标监控起来。

大多监控体系都差不多,如下

每台机器上安装一个agent,用来采集本机的性能数据,服务数据

每台机器部署的业务,根据一个sdk,向center提交本业务相关的数据

每个agent可以动态的按需求加载一些插件,以便监控新的指标

一般一个机房内有一个center用来收集各agent和各业务上报的指标

center要把采集到的指标数据进行存储,归档,压缩,一般用rrd database

center还得有一个web界面来查看各个指标的历史图表,甚至要有各种视图和dashborad来显示一组相关的指标。

center还要每天把用户自定义的几个关键的指标生产报表发给运维或者相关人员。

center还需要保存各种告警规则,如某个指标连续几次超过某个阈值产生告警,或者波动超过某个范围产生告警,或者某个指标超过多长时间没有上报数据产生告警

center还要进行各种告警的收敛,如同类告警的合并,临时屏蔽某类告警,防止因为网络抖动引起大量告警等,没有这些运维人员会淹没在各种告警声中。

center要以各种方式将告警发送给运维人员,如短信,邮件,微信,语音等。

center还要对每次告警进行回顾,统计,分析,得出每个系统的薄弱点,可用率,在线时间,稳定性等。

所以说,自己搭建一套完善可靠的监控体系,挺不容易的,需要投入大量的人力和精力去开发和维护。

现在国外也有一些专门做运维外包的厂商,center托管在给他们,免去了很大的工作量,剩下的agent和plugin还是得自己安装,但这就简单了,反正有很多可以做批量部署的运维工具。

比较出名的有NewRelic,StatHat,hostedgraphite,可以去了解一下,基本上就是安装个agent就可以向它们的center上报数据了,或者是利用他们的Sdk提交一些自定义数据,他们负责存储,展现,告警方面的事情,节省很多人力。

国内的话,也有人做类似的事情,如DNSPod的D监控最近推出了自定义监控的功能,兼容graphite的上报接口,你自己部署个collectd就可以把各种系统监控指标监控起来了,如果要做业务监控,graphite也有各种语言的sdk。graphite本身开源,周边工具和软件也特别多,能满足很多的需求。