如果监控不报警,就一定是系统没有问题吧?什么样的监控才真正说明系统有问题?今天就和大家聊一聊多维度的三维监控。什么是多维三维监控?不同的公司或多或少都有自动化的监控方式,比如:http接口监控;日志关键字监控;操作系统、进程、端口;http状态码;服务生存能力;接口处理时间;RPC接口监控;用户级监控;如果只监控一个或几个维度:当监控到异常时,基本可以确定是系统有问题;反之,如果没有监控到异常,则不能确定系统没有问题;例如:监控操作系统CPU100%,大概率是系统有问题,但CPU正常,不代表系统正常。比如tomcat宕机了,CPU一定是正常的,但是操作系统监控检测不到,所以需要进程、端口、生存能力等监控辅助;如果进程和端口异常,大概率是系统有问题,但是进程在运行,端口在监听,并不代表系统正常。比如程序死锁,进程和端口正常,需要接口处理时间等其他监控协助;如果监测到接口处理时间超时,大概率是系统有问题,但是接口处理时间没有超时,并不代表系统正常。比如数据库宕机,无法获取数据库连接,关闭服务层各个接口。返回速度快,不会超时;这里的观点是:单一维度的监控容易漏报,多维度的三维监控才是监控平台的根本之道。接下来介绍的四个维度的监控在设计上也着重于“通用”和“非侵入”,即被监控的站点和服务不需要任何埋点和修改,被监控模块的负责人不做不需要合作做任何事情,可以全方位覆盖。维度1,如何监控操作系统、进程、端口?监控需求:系统网络是否满,磁盘是否有空间,CPU是否繁忙,内存是否用完,负载值是否过高,JVM是否正常;服务进程是否正在运行;监控端口是否正常;机器是否连接;常见方案一:搞zabbix运维的都懂,不展开详细聊聊,说多了可能会被骂。常见方案二:shell可以写一些非常简单的脚本来获取网络、磁盘、CPU、内存、负载、JVM等信息。通过一些阈值配置,可以实现超阈值报警功能。如果配合集群信息管理服务,还可以通过ps、netstat、telnet等命令快速实现对进程、端口、连通性的简单监控。实现要点:注重可扩展性、可配置性和非侵入性;集群信息管理服务(或集群信息配置文件);维度二,如何监控404状态码?监控需求:监控http异常状态码。监控方案:统一监控nginx日志。如果实现了http接口的统一监控,那么404监控的必要性就没有那么强了,但是毕竟实现起来简单,整个通用一个也用不了多少时间。在说生存能力监控和接口处理时间监控之前,先说说系统架构。如果框架和组件统一,统一监控会省很多力气。上图是一个典型的互联网分层架构图:最上游是APP和浏览器;反向代理层为nginx,统一http404状态码监控在该层实现;web层,假设是自研的web-framework;服务层,假设自研service-framework,web层通过RPC-client调用服务;数据层db,假设自研Daojia-DAO组件调用db;缓存层缓存,假设自研Daojia-KV组件调用缓存;D-DAO和D-KV这两个组件并没有大家想象的那么复杂,一开始只是简单的封装了一层。维度三:服务生存能力如何监控?监控需求:进程和端口监控只能保证进程和端口存在,不能判断服务是否能响应请求。必须确保服务“活着”。监控方案:乒乓监控,在站点框架和服务框架层面统一实现,提供keepalive接口:乒乓接口可以在框架层面实现;监控中心通过集群信息管理服务(或配置文件)(web/service)、集群IP列表获取集群类型;监控中心统一向集群发送内置乒乓请求;强调两点:如果开源框架不提供乒乓接口,二次开发是可以的(慎重,任何开源框架的二次开发都是一个大坑的开始);统一的集群信息管理服务,或者说统一的集群信息管理配置文件,非常重要,是统一技术体系的基石;维度4,如何监控接口执行时间?监控需求:http站点接口是否超时;RPC服务接口是否超时;数据库访问是否超时;:一个接口的平均响应时间是100ms,一天突然增加到300ms。即使没有超时,也有理由怀疑接口有问题;监控方案:框架组件统一报告(如上图1、2、3、4所示)。在web-framework中,对所有http接口进行数据上报,可以上报url、参数、执行时间等核心数据;在service-framework中,为所有RPC接口上报数据,可以上报接口、参数、执行时间等核心数据;在DAO中,对所有数据库SQL访问进行数据上报,可以上报sql、参数、执行时间等核心数据;在KV-client中,所有缓存访问都会上报数据,可以上报key、执行时间等核心数据;统一上报是思路。具体上报细节,无论是通过flume刷新日志,还是通过storm/spark实时流处理,都可以使用。总结监控是一项技术活:监控平台的思路是多维度监控;一个可以实现很多功能的技术平台,是一个好的技术平台,需要任何人去修改它;统一的集群信息管理服务、统一的人员信息管理服务、统一的告警策略服务(或配置文件)是统一技术体系的基石;【本文为专栏作者《58神剑》原创稿件,转载请联系原作者】点此阅读更多该作者好文
