更新时间:2022-03-25 GMT+08:00
分享

IT应用故障定界

  • 分类

    故障诊断

  • 适用领域

    IT应用

  • 使用场景

    公有云服务运维中,SRE可以通过KPI指标监控和异常检测,发现当前服务存在故障和异常,但是往往无法立即进行故障定界和根因定位,需要通过大量的人工分析和定位,最终才能定界,基于调用链的故障定界,实时监控服务间的调用链,当服务底端发送异常和故障时,能准确指定出具体服务的某节点发生了故障,大大提升了SRE的运维效率。

  • 功能说明
    1. 流式事件聚合

    通过异常检测,我们从原始的机器数据中提取了大量的异常事件。这些事件散布在不同的服务,不同的节点上,是孤立的。我们前文提到,一个故障会触发大量的异常事件,如果要全面的分析故障,就需要把这些异常事件再聚合在一起,共同分析。这里我们使用事件聚合原子能力,它会根据事件窗以及配置关系对异常事件进行聚合。聚合后,我们会得到异常事件组。

    2. 实时调用链定界

    有了异常事件组,我们还需要进一步分析,识别多个异常事件中的根因事件。所谓的“根因事件”,就是能反映故障原因的事件,其他事件是根因事件引发的,是衍生事件。根因定位的过程我们可以分为两步1)确定根因节点 2)确定根因节点上的根因事件。我们选用AIOps的根因定位原子能力来完成以上两个步骤。下面简要介绍下该原子能力的算法流程。

    确定根因节点时,我们需要异常事件在节点间的传播关系。Trace日志中包含调用链信息,能很好的反映服务节点间的调用关系,并进而恢复故障传播关系。

    在一个统计周期内,通常会发生很多次调用,生成多个调用链。如何利用多个调用链恢复故障传播关系,一个思路是,先识别所有有问题调用链,比如有失败的调用,或者有时延异常的调用;然后从多个异常的调用中,选出发生频次最高的一个调用模式,进而恢复出故障传播关系。有了传播关系,可以通过图搜索或随机游走的方法来定位根因节点。

    定位根因节点之后,我们要进一步考虑根因事件。根因节点上通过会有多种异常事件,接口的KPI异常往往都不是真正的根因,根因需要从日志,告警等更加细节的信息中获取。这里我们使用无监督的因果发现算法,来发现同一节点上各种异常事件间的因果关系,再利用随机游走来定位根因事件。

  • 输入数据
    1. 异常事件
      • 接入方式:kafka
      • 异常事件字段描述如表 异常事件字段表
        表1 异常事件字段表

        名称

        类型

        长度

        是否必须

        描述

        serialId

        String

        255

        Y

        告警实例ID

        alarmSource

        String

        255

        Y

        告警资源

        reportTime

        timestamp

        29

        Y

        上报时间

        severity

        String

        255

        Y

        告警级别

        clearflag

        String

        255

        Y

        消除记录

        raiseTime

        timestamp

        29

        Y

        异常上报时间

        clearTime

        timestamp

        29

        Y

        异常清除时间

        location

        String

        255

        Y

        日志位置

        neId

        String

        255

        Y

        网元ID

        normId

        String

        255

        Y

        日志ID

        title

        String

        255

        Y

        告警标识

        alarmType

        String

        255

        Y

        告警类型

    2. trace日志

    接入方式:kafka

    表2 日志信息

    名称

    类型

    长度

    是否必须

    描述

    message

    String

    2048

    Y

    信息

  • 输出数据
    • 故障(事件)
    • 接入方式:kafka
    • 故障数据字段描述如表3所示
      表3 故障数据字段表

      名称

      类型

      长度

      是否必须

      描述

      csn

      String

      255

      Y

      事件标识

      domain

      String

      255

      Y

      领域

      name

      String

      255

      Y

      名称

      occurTime

      String

      255

      Y

      发生时间

      updateTime

      date

      255

      Y

      更新时间

      clearTime

      date

      255

      Y

      清除时间

      duration

      String

      255

      Y

      持续时间

      category

      String

      255

      Y

      类别

      detail

      String

      255

      Y

      明细

      rootEventCsn

      String

      255

      Y

      根因事件识别

      eventSize

      String

      255

      Y

      事件大小

      sourceObjects

      String

      255

      Y

      源对象

      events

      String

      255

      Y

      事件列表

      affects

      String

      255

      Y

      受影响事件

      linkList

      String

      255

      Y

      关联topo

  • 流程样例

    Access日志接入:从数据源接入Access日志。

    运行日志接入:从数据源接入运行日志。

    GC日志接入:从数据源接入GC日志。

    调用链日志接入:从数据源接入调用链日志。

    KPI提取: 通过Access日志来提取各接口调用成功率和接口时延。

    KPI异常检测:对KPI时序数据进行异常检测,生成KPI异常告警。

    日志异常检测:对日志文本进行异常检测,生成日志异常告警。

    GC异常检测:对GC日志进行异常检测,生成GC异常告警。

    数据转换:数据转换,将前序节点的输出格式转换为后续节点的输入格式。

    记录集: 将数据记录到ES数据库。

    基于调用链的故障定界:输入异常事件,Trace日志,输出事件。该原子能力完成了异常事件聚合,故障定界,故障定位。

    事件通知:通过短信,邮件等发送通知。

  • 使用约束

    需要提供Trace日志作为输入。Trace日志一般需要先在软件中埋点才能获得,具体请参考华为云CloudMonitorTracker-SDK。

分享:

    相关文档

    相关产品

close