直击传统运维痛点,京东金融智能运维初探!(2)
CPU 使用率(进程、线程)可以通过 proc 虚拟文件系统得到,此处不是本文重点,不展开讨论.不同环境还可以通过不同的特性快速得到这些数据.以 Java 应用为例,我们可以从 JMX 中拿到线程执行的统计情况,大致推算出上述的比例,如下图所示: 继续分析上面的例子,假设我们通过分析线程的运行情况得知,运行时间与等待时间为 1:1,此时进程 CPU 的使用率为 20%,那么 CPU 指标能支撑的单机最高 QPS 为 200 * 100% / 20% = 1000,也就是这个方法的单机最高 QPS 为 1000.同理可以推断网络带宽等物理资源的瓶颈点. 一般来说,业务逻辑耗时中,对于计算密集型的应用,CPU 计算耗时的比例比较大,而 IO 密集型的应用反之. 通过以上的数据,我们就可以实时评估系统的容量,如下图: 智能告警根源告警分析是基于网络拓扑,结合调用链,通过时间相关性、权重、机器学习等算法,将告警进行分类筛选,快速找到告警根源的一种方式.它能从大量的告警中找到问题的根源,因此大大缩短了故障排查及恢复时间. 告警处理步骤
举例来说: 假设多个系统通过 RPC 进行服务调用,调用关系如下:D 系统->C 系统-> B 系统-> A 系统. 当 A 系统查询数据库出现查询超时后,告警会层层往前推进,导致 B、C、D 系统均有 N 个超时告警产生.此时,ROOT 分析可以将告警进行收敛,直接分析出根源告警为 A 系统访问数据库异常,导致 A、B、C、D 多个系统异常. 这样,就避免了处理人员和每个系统开发人员沟通,辅助处理人员快速定位问题根源、提高了平均解决时间(MTTR).如下图所示: 根源告警调用链关系 根源告警明细表? 根源告警分析主要分为强关联分析与机器学习两类. a.强关联数据分析强关联指的是已知确定的关联关系.如:
若在同一个时间窗内,有多个强关联的设备或应用服务器同时告警,则大概率认为告警之间存在关联关系. 在权重算法中,有一个重要的规则,链路上存在连续的告警可能存在关联,越靠后的应用越可能是根源.现在我们根据例子,分别计算各类根源告警. 继续使用上面的例子,D 应用->C 应用->B 应用->A 应用->数据库异常的情况.
根据权重计算规则,数据库告警为 90,GC 告警 10,也就是说数据库异常告警权重最高.这时由于数据库根源告警和调用链根源告警一致,会将两种类型的告警合并.最后得出结论:数据库异常导致 A、B、C、D 系统告警. b.机器学习根源分析强关联数据分析是对已知告警的关联关系,直接进行根源告警分析.但是有些时候,关联关系是未知的.这时就需要通过机器学习算法,找到告警之间的隐含联系,再进行根源告警预测. 目前,主要进行了两类机器学习实践. 1、关联规则算法 关联规则算法主要进行了 Apriori 算法和 FPGrowth 两类算法的实践.这两类功能相似,都可以发现频繁项集.经过实测,FPGrowth 比 Apriori 更高效一些. 我们按一定的时间间隔划分时间窗,计算每个时间窗内,各种告警一起出现的频率,找出各类告警之间的关联.最终可按分析出的关联关系,生成根源告警. 关联规则算法的优点在于理解和实现起来比较简单.缺点是效率比较低,灵活度也不够高. 2、神经网络算法 循环神经网络(简称 RNN)是一个和时间序列有关系的神经网络,对单张图片而言,像素信息是静止的,而对于一段话而言,里面的词的组成是有先后的,而且通常情况下,后续的词和前面的词有顺序关联. 这时候,卷积神经网络通常很难处理这种时序关联信息,而 RNN 却能有效地进行处理. (编辑:ASP站长网) |