对于一个提供实时服务的互联网企业,尽量保证7*24的不间断服务是我们追求的目标之一,尽管我们做了非常多的努力,但是由于某些不可预知的因素产生的异常还是常常发生,为了及时的发现异常,避免问题进一步辐散扩大,我们可能需要一些工具或者方法来发现异常、发现问题。这时候,我们就引入了一个原本和业务可能不太相关的技术--监控。
1. 引言
本文就针对当前百度公司业务中所提炼出的一些监控方法、监控方式及一些监控平台的实现简单讲述一下对于监控的理解。
2. 为什么要做监控?
为什么要做监控,先从监控的定义说起吧:对装备及系统的工作状态不间断地实时监测,并根据反馈信息自动对系统中异常部位实施相应措施的闭合自动控制作用,这个是监控的定义之一。这里的主要关键点有: 不间断、实时、监测、针对异常实施相应措施。
那我们的监控是什么?
能够不间断的实时监控当前业务,并且根据异常能够自动执行相应的预案或者自动操作,最大限度的减少服务损失及人工参与程度,最大程度的自动化处理,这个应该是我们对于监控的理解,也是我们做监控的目标之一。
3. 应该监控哪些内容?
简单来讲,所有对于业务有直接或者间接影响的要素,都应该被监控。那这些要素包括什么呢?
1、支撑业务运行的外部环境:
这里具体又包括:
a. IDC监控:
i. 机房环境,如电力供应、空调、温度、湿度等;
b. 网络设备:
i. 光纤、路由器、交换机等;
c. 服务器硬件:
i. 磁盘、主机板、电源、内存、CPU等;
d. 操作系统:
i. 资源使用、系统异常等;
2、支撑业务运行的内部关联;
a. 基础服务:
i. DNS、CDN等;
b. 业务应用:
i. 业务运行状况,包括日志、流量、处理耗时等;
ii. 业务的内部逻辑;
3、其他特别的监控内容;
百度监控的内容也在不断完善,从最初的外部资源监控到最后的业务应用监控,随着对于监控的理解及业务发展,一点点摸索总结出最需要的监控内容。监控是一个循序渐进的过程,不可太着急。
4. 应该选用哪些监控方式?
如何对于业务进行监控?其实监控的方法可能不外乎如下几种:
1、 文件方式:
采集文件(日志、数据等)进行信息判断,如判断文件大小、判断文件生成时间、匹配文件内容并进行判断,通过此方法监控的优点是不需要业务程序的额外开发或者修改成本,但是比较耗费资源(分析日志占用的资源比较高),并且对于文件的格式要求比较高,需要进行定制化,监控的效果存在一定的滞后性;
2、 共享内存方式:
共享内存监控,如通过模块开辟的共享内存数据进行采集分析,将模块实时运行的数据获取并处理,能够比较快速的得到模块当前的运行状态,获取到模块内部处理的比较详细的信息,可以做到比较全面的信息判断,但是由于共享内存存在一定的风险和比较高的维护成本,因此不推荐此种方式;
3、 SOCKET通讯方式:
通过socket进行通信,如通过模块监控的服务端口获取相应的返回信息,并且依据返回的信息确定模块能否处理监控请求,进而对于模块的运行状态等进行判断,如果要实现更全面的信息获取,需要模块进行修改开发来支持,成本相对较高;
由于业务的不同特性及对于监控的要求不同,因此对于上述三种监控方式,我们可能同时选用其中的两种甚至三种来使得监控能够有比较灵活的覆盖面,保证监控的最大范围的覆盖。比如对于模块的存活与否,我们可能需要时效性最高的socket或者共享内存的方式进行监控判断,而对于模块是否有清理内存操作的监控,通过文件监控可能就满足需求了,而成本还相对较低。总之,就是要根据恰当的监控内容,选择合适的监控方式。
5. 如何选择监控模式?
这里又引出一个概念,监控模式,那监控模式是什么?就是支撑监控内容、监控方式和监控管理的监控框架,如选用何种通信机制、使用什么样的客户端、提供什么样的监控展示、监控管理机制等等,主要是结合用户的使用需求和开发模式,并且考虑监控内容和监控方式的关键点来确定,使得监控能够作为一个可用、易用的系统或者平台存在,并且利于后续的扩展。
6. 如何做自动化、如何进一步深入做监控?
其实对于监控本身来讲,监控的自动化其实是监控管理的自动化,如何自动添加、变更监控,如何自动分析问题等等,目前针对这个方面我们还在研究和探索中。而通常来讲的监控自动化,往往会和问题发现后的自动处理相关,依赖于制定的一系列预案或者操作指令,自动完成异常的处理和响应,以达到将报警限定在监控平台的范围内,既能达到实时性的要求,又能很大程度上减少人工操作带来的问题。针对这一点,很多系统都或多或少实现了这样一些基本的功能,如监控异常时触发系统调用某些脚本等等,但是如果要真正做到报警的自动化处理,还是需要从监控本身入手,能够精确的判断服务状态、精准定位问题,接下来才是如何自动化处理,否则,处理动作执行了,但是有可能因为监控的问题导致处理出现错误,这个可能带来更大的问题。这个其实也是深入做监控的一个方向。如何深入做监控?这个问题我们也还在摸索中,主要还是从监控的几个要素入手,探索更好的监控方式、更全面有效的监控内容、更简单统一的监控支撑、更高效的监控平台、更智能的报警分析等等,也希望和大家一起探讨研究。