熊亚军
灵犀技术总监,原百度系统部高级项目经理,负责百度IT基础设施监控团队,其带领的团队经历了百度服务器规模迈入几十万量级,网络架构数次演进,对服务器尤其是网络层的监控和运维自动化智能化有丰富的经验。
在超级互联网公司,随着服务器规模都早早迈过 10 万台量级,加之业务模式的多样性和 IT 架构的云化迁移,其 IT 运维团队面临的挑战与日俱增,常规的系统和经验都需要不断迭代更新。
本文将给大家介绍在超级互联网公司如何基于网络的故障根因自动定位技术,提高故障定位速度,从而提高业务可用性。
首先我们先来看看超级互联网公司的业务架构示例图:
在超级互联网公司中,通常不同的层次都由不同的团队来负责运维管理,同层次不同的硬件/系统/应用都由不同的小组来负责运维管理。
就基础设施即服务这层来说,随着IT设备规模的不断增加,IT 设备故障的告警种类与告警数量也随之急剧增加。
告警的多面性、冗余性、耦合性,导致某些核心层面的故障会引起大面积告警的现象,而这些告警又有可能分属不同小组,运维人员处理故障会增加排查问题的难度以及增加小组间沟通成本。
同时因为对故障信息缺乏统一的管理,无法对告警系统进行反馈优化,致使误报漏报频出。同样也无法进行全面的故障信息统计分析,不知道如何对基础设施资源进行风险管理。
众所周知,IT基础设施层的运维工作,直接影响公司服务稳定性。一次服务中断事件便会对公司造成极大的经济损失。
告警系统缺乏有效的反馈机制进行系统优化,同时缺少全面有效的故障信息沉淀,无法帮助预算与评估采购系统进行合理采购。
这些都极大约束了运维水平的与时俱进,新的方法论和新的运维技术有迫切的内部需求。
基于上述背景下的痛点问题,一套以故障定位为核心的运维生态体系的建立便成为高逼格的不可或缺:
而在这套生态体系中,故障自动定位技术便是体系是否能够成功建立的核心要素。
故障根因自动定位简要科普
故障根因自动定位系统为人工智能的分支,属于诊断性专家系统,专家系统通常包含:
其中最重要的是知识库和推理机。知识库用于专家经验的存储,是一种静态规则,推理机根据现象结合知识库中的规则反复推理得出结论。规则集的组成形式有多种方式,本文重点介绍的是二叉决策树。
故障根因自动定位系统主要由监控系统、接入系统、推理系统、通告系统四个部分组成,分别的功能如下:
故障定位算法采用机器学习中的二叉决策树的方式实现:
以某公司网络故障根因定位为例,实现上述目标需要三步:
第一步:将问题排障过程的经验提炼成二叉决策树;
第二步:将告警信息按照时间分片算法进行分类分组;
第三步:将分组的告警信息输出给决策树进行自动推理输出推理结果。
根据某公司目前网络故障时的告警特点和网络工程师运维的特点,得出下面的一些结论,而这些结论可帮助我们构建出经验推理树。
A、告警信息是分层次的:
第一层是交换机级别,如ROUTER_ID、CPU、TM告警;
第二层次是板卡告警,比如板卡芯片问题,板卡故障;
第三层次是端口告警,LINK-NEW告警等与端口相关的告警;
B、每一层的告警又可分为原子告警,衍生性告警。
比如:
第三层告警,LINK-NEW便是衍生性的告警,而PORT DOWN的告警为原子告警,即PORT DOWN了一定会有LINK-NEW的告警,反之不然。
根据以上结论,故障定位的原则为:重要性从最高层往最低层报,每层中重要性从原子告警到衍生性告警报。
比如:
收到了ROUTER_ID,PORT DOWN, LINK-NEW的告警,那么只需报ROUTER_ID的告警;
如果只有PORT DOWN, LINK-NEW的告警,就重点报`PORT;
DOWN的告警,如果只有LINK-NEW的告警,则只能报LINK-NEW`的告警。
引入故障追踪列表,比如第二层的【BOARD告警】引起第三层的告警【PORT、OSPF、LINK-NEW】,每个故障追踪列表形成一个Case,即Case的生成过程不是以某交换机为单位,而是以故障追踪列表为单位。
A、推理树的构建有以下四个原则:
原则一:告警从高层向底层,在逻辑层次上面,越根源性的告警越先判断。
例如:
A出现问题必然导致B出现问题,B出现问题必然导致C出现问题,在逻辑层次上面,A的根源性最高,当A、B、C告警同时到达,先判断A,判定A、B、C故障的根因为A。
在告警关联度上面,越明确关联的告警越先判断。
例如:
故障A对应有A1、A2、A3三种告警,关联度依次为A1 > A2 > A3,先判断A1,由A1直接确定A1、A2、A3的故障根因为A。
原则二:从原子到衍生告警。
原则三:推理树的建立根据告警来定。
原则四:验证规则,根据经验和知识库来定。
B、推理过程实现有以下三种方式:
方式一:
给出特征 —> 推理机 —> 结论 —> 验证 —> 发出结果
方式二:
自主收集特征 —> 推理机 —> 结论 —> 验证 —> 发出结果
方式三:
数据 —> 根据特征设计的推理机 —> 结论 —> 验证 —> 发出结果
简单来说,方式一就是半人工方式、方式二就是简单机器学习方式、方式三就是智能机器学习方式。
看完是不是有点小激动,想动手试试如何构建一套智能故障根因定位系统,需要如下几个步骤:
CMDB是监控系统的基础,数据部分通常分为静态、动态两大类.
就网络设备而言,静态数据通常包括:
机框
矩阵
板卡
模块
端口
动态数据通常包括:
IP地址
路由
端口状态
端口流量
需要统一告警信息的格式,便于故障定位系统提取关键特征级并进行分类分组。
理清告警之间的关联关系,关联关系需要是逻辑上面的,形成必要的关系,例如A是B上游模块,A出现问题必然会导致B出现问题。
根据人工故障定位判断逻辑,构建推理树,设定每个推理节点的判决条件。
OK啦,做完以上几步,您就搭建了一个简单的故障根因自动定位系统,通过对每个推理节点判断条件的不断优化,您可以不断提升故障自动定位准确率,让您的运维效率得到大幅提升,IT运营水平逐步与BAT等超级互联网公司运营水平对齐。