6 微服务架构谈:从监控到故障定位( 二 )


因此 , 配置监控预警阈值会在预警准确性和去噪音两者之间取舍 , 人工配置预警的方式永远找不到银弹 , 未来还是需要考虑通过智能化的方式去学习业务波动渠道才是最终解决方案 。
7.2 智能定位问题
在大型SOA架构的系统中 , 包括采用了微服务设计的一系列服务中 , 定位是一个老大难问题 。交易下跌了 , 是支付的问题 , 还是营销的问题?是应用系统问题还是数据库切换到读库状态了?在传统的运维模式中基本靠”喊” 。大盘出问题了 , 大家都看一下自己的系统!然后人肉综合判断 。为了更好的做的定位 , 需要一套支撑根因分析与定位的系统 。目前流行的有基于知识经验的定位、基于有监督算法的定位这2类 。
基于知识经验的定位
顾名思义 , 基于知识经验的定位是把人肉经验固化的一种方法 。特点是见效快 , 特别是历史出过的问题 , 而且可以举一反三 , 分门别类 。确定是检测代码的维护问题 , 随着系统变更 , 调用链路和依赖存储的变化 , 检测代码需要做同步变更 。另外 , 此方案对于发现完全陌生类型的问题 , 收效存疑 。

6  微服务架构谈:从监控到故障定位

文章插图
如上图所示 , 其实质是关联指标法 。比如 , 发现点击率下降 , 可以从人工经验总结的影响ctr波动的系统内部(模型、算法、索引、数据等)指标入手 , 依次检测是否正常 。此类方法 , 可以描述成一棵可追溯的树 , 层次深入 。
基于有监督算法的定位
系统风险的发现和定位属于异常检测( )的范畴 , 在该领域通常有监督模型法()、聚类模型法( Model)、近邻法( )、统计法()、信息论( )和谱理论( )等 。一般来说 , 标注数据的获取是一大难题 , 所以半监督、无监督的算法在这类场景中大量使用 , 而我们利用故障注入得到种子标注数据 , 再通过对种子问题做同类扩展 , 得到大量标注样本 , 然后基于样本构建分类模型 , 预测每次系统调用的风险 , 对有问题的调用进行报警 , 并结合调用参数、系统变更数据对根因进行定位 。我们将智能定位问题分为两步实现:1、检测问题;2、定位问题 。这里展开一下检测问题 , 定位问题的解法后面专文叙述 。
评估智能检测系统的发现问题的效果一般采用“系统风险覆盖率和误报率” 。因为缺乏标注数据 , 这两个指标一直是很难度量的 , 我们利用故障注入平台的能力设计了有监督综合模型将其分解为4个阶段来实现定量评估:1、历史故障;2、同类延伸历史故障;3、覆盖用例库可能出现的故障及其延伸;4、有创造性的智能延伸故障 。整体上 , 业务通过接入故障注入平台和精细化故障检测平台 , 使业务具备常态化进攻和防守的“左右互搏”的能力 , 常态化、周期性拿到系统在风险敞口的指标 , 辅助或在一些场景帮助业务作出最优决策 。
6  微服务架构谈:从监控到故障定位

文章插图
上图描述了攻防结合的反馈与优化闭环 , 精细化智能检测平台作为防守方 , 涉及故障延伸方法的设计、有监督综合模型的设计、周期性演练效果的计算三个重要步骤 , 下面我以某故障为实例来具体说明: