监控系统故障定位之事件关联分析的设计介绍
《监控系统故障定位之事件关联分析的设计介绍》要点: 作者介绍 本文作者是吴城?联系方式:autohomeops@autohome.com.cn,主要负责汽车之家云平台的开发和技术管理工作. 个人Blog?http://jackywu.github.io/ 团队介绍我们是汽车之家运维团队,是汽车之家技术部里最为核心的团队,由op和dev共同组成.我们的目标是为汽车之家集团打造一个高性能,高可扩展,低成本,并且稳定可靠的网站基础设施平台. 团队技术博客地址为 http://autohomeops.corpautohome.com 一、前言在《汽车之家监控系统的第一次里程碑》](http://autohomeops.corpautohome.com/articles/汽车之家监控系统的第一次里程碑/)之后,我们实现了如下几个小Feature
而后,我们又希望能够实现所谓的“自动故障定位”,来提升问题诊断的效率. 二、思路我们认为,一个异常问题的发生,必定是有一个或者多个原因导致的,我们用“事件(Event)”来描述这个异常.网站的QPS增大超预期是一个事件,后端接口响应时间变大超预期是一个事件,服务器的CPU-Load增大超预期是一个事件,有人对MySQL服务器进行了配置变更是一个事件,有人进行了一次业务代码发布也是一个事件,找出这些事件之间的关系是实现故障定位的关键. 我们理解有两种故障定位的方法
我们目前在实践第一种方法. 三、方案监控指标分类 为了方便进行分析定位,我们对所有采集的监控指标进行了分类 解释
通过分层,我们将问题分类在我们熟知的范围内. 建立服务树模型 重点是:“服务” 和 “模块”
这两个概念的定义,为下面的模块调用关系奠定了基础. 建立模块调用关系 大写字母代表”服务“,如A服务;小写字母代表”模块“,如a模块;箭头代表调用或者结果返回关系 建立”统一事件库“ 我们认为有如下几种确定事件之间关系的方法
那么,首先我们得需要一个统一的“事件库”来收集所有事件. 我们认为形成事件的来源有这么几个 我们认为一个对象产生异常的影响因素来自于这几个方面
对于第一点,我们只要将自身的4层指标监控完整,就能够做到可控的程度. 对于第二点,需要我们完整确定每个模块的调用关系. 对于第三点,是我们尤其担心的一点,因为我们很难收集全所有的外部事件,我们使用了如下的方法来尽量实现这个目标.
对于事件总线这块,我们这几个系统的是这样工作的
故障原因定位策略 我们目前使用的策略
根据“模块调用关系”和“指标分层”的概念,采用递归的方法去遍历所有事件,得到一个疑似故障原因诊断报告. 范例如下 “广告服务”的接口响应时间异常(为3s),疑似原因为“索引模块”的服务器xxx.autohome.cc磁盘util异常(为98%). 保留问题现场 (编辑:ASP站长网) |