2022 AIOps挑战赛方案总结

挑战赛赛题:微服务架构电商系统下的故障识别和分类

一、赛季关键字

  • 云原生:赛题生产环境,比赛环境
  • 混沌工程:赛题数据的故障注入,基于混沌工程平台
  • 复合:赛题复合场景,赛程双赛道
  • 生态:参赛队伍多样性

二、赛题背景

1、开源的微服务系统

  • 数据来源:基于微服务架构的模拟电商系统(基于谷歌开源HipsterShop并进行改造)
  • 数据可靠性:在建行云上流量与真实业务流量一致

2、丰富的故障类型

  • 故障场景:来源于实际工业界总结的频发故障。
  • 故障类型:多层级(k8s pod、service和虚拟机)、多种类(CPU,内存,网络,磁盘等故障)

3、多模态监控数据

  • 比赛数据:包括实时业务黄金指标、容器和虚拟机等性能指标、日志、调用链等。
  • 数据难点:选手需要根据多模态的多源海量监控数据设计算法进行故障实时发现于故障分类。

三、方法汇总

1、特征工程

(1)时序预处理
  • 标准化差异特征提取:原始单条曲线 -> 标准化 -> 窗口绝对差分
  • 窗口绝对差分:当前时间点减去过去一天同时间段的值(猜测)
  • 时序融合算法:对多维时间序列指标进行重构,实现海量指标序列快速检测。自定义类别进行聚类,聚类后先标准化,再提取绝对差分特征,利用时序特征融合曲线对该类指标进行重新表示。
  • 聚合:分组求和或均值:针对多状态值指标;
  • 无量纲化:转化为使用率百分比的形式:由于不同CMDB的配置差异,某些指标的取值不具有可比性;
  • 指标筛选:去除无效指标:针对配置类指标、常量指标(方差为0);
  • 近似归一化:指标值除以均值:某些指标在不同pod差异较大,甚至相差一个数量级;
  • stl分解:消除周期性波动影响:某些指标存在周期性波动,这与故障表现极为相似;
  • 卡尔曼滤波:卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。
(2)时序特征提取方案
  • 一阶差分
  • 滑动窗口求和的差分
  • 滑动窗口的标准差
  • 滑动窗口均值的增长率
  • 滑动窗口求和的增长率
  • 一阶差分后滑动窗口的标准差
  • 原数据和一阶差分
  • kalman的一阶差分
  • 原数据与kalman差值
(3)特征筛选(多指标异常检测)
  • 相关性选择:多指标异常检测情况,根据特征间相关性进行筛选。
(4)日志数据挖掘
  • 故障关键词检测:根据故障关键词,获取关键词词频进行转换。
  • Drain日志解析算法
    a、异常日志检测:使用正常日志进行训练,并使用训练的模板去匹配实时数据,未匹配到的日志则为异常日志。
    b、模板数量统计:训练所有日志模板并保存,统计所有日志模板在窗口中出现的次数,作为频次特征。
(5)调用链信息挖掘
  • 存在问题:并非所有异常都体现在本节点上、上游耗时包含下游耗时。
  • 解决办法:以消息对形式检测、上游节点耗时减掉所有下游节点耗时之和。
(6)类别不平衡(分类问题)
  • 欠采样处理:欠采样就是一个随机删除一部分多数类(数量多的类型)数据的过程。
(7)sklearn机器学习之特征工程

2、曲线分类

  • 曲线分类的作用:对时序进行分类,不同的指标类型采用不同的算法进行异常检测。
  • 分类指标:mean、std、波动性分析、趋势分析、自相关系数(周期性分析)、频谱分析等。
  • 时序类型:突刺型、无波动、无周期、伪周期、周期型、趋势型等。
    在这里插入图片描述

3、时序异常检测算法

  • 四分位法:利用箱型图的四分位距(IQR)对异常值进行检测, 提供了识别异常值的一个标准:异常值通常被定义为 小于 QL-kIQR 或 大于 QU+kIQR 的值。
  • 3-sgima:基于正态分布,3sigma准则认为超过3sigma的数据为异常点。
  • K-MaxMin:K-MaxMin异常检测算法是我们基于3Sigma原则改进的一种异常检测算法,用于不符合高斯分布的数据异常检测。
  • 分位数法:将每个时间序列值与历史分位数进行比较,将大于百分之n和小于百分之m的值记为异常点。
  • 极值理论:极值理论是处理与概率分布的中值相离极大的情况的理论,常用来分析概率罕见的情况,如百年一遇的地震、洪水等,在风险管理和可靠性研究中时常用到。基于极值理论的单变量时间序列流式异常检测算法SPOT/DSPOT
  • 阈值自适应:通过引入长短期记忆阈值计算思想增强模型对数据突变的自适应能力,公式:threshold = w1 * threshold(1 hour) + w2 * threshold(10 hour) + w3 * threshold(off line)
  • 核密度估计kde:用平滑的峰值函数(“核”)拟合观察点,对真实的概率分布曲线模拟。“核”是一个函数,提供权重。如高斯函数 (Gaussian) 就是常用的核函数,如果某一个数在观察中出现了,认为这个数的概率密度很大,与该数较近的数的概率密度也会比较大,离这个数远的数的概率密度会比较小。
  • 高斯分布:利用训练集拟合出一个高斯分布,当要预测一个样本是否为异常时,只需将这个新样本带入高斯分布求出概率,如果概率小于指定的阈值时则为异常。利用高斯分布进行异常检测
  • 伯努利二项分布:将数据转换为伯努利分布,既大于某个值则为事件一,否则为事件二。采用一段时间的数据为训练集,假设满足伯努利分布,计算P值,对于需要检测的区间,再次计算P值,对比前后P值获取误差,如果误差大于指定的阈值时则为异常。 部分布尔型或者按照少量种类分布的数据,使用伯努利二项分布,可以更好的放大异常。
  • ECOD:使用经验累计分布函数的无监督离群值检测,使用类似集成的方法(结合同一样本不同维度的离群分),计算每个样本的离群分,分值越高是异常值的可能性越大。
  • ADTK:是无监督异常检测的python工具包,它提供常用算法和处理函数:简单有效的异常检测算法(detector)、异常特征加工(transformers)、处理流程控制(Pipe)。

4、根因定位

  • trace异常检测:制定如下规则进行异常节点检测。
    在这里插入图片描述
  • CMDB_ID选取策略
    (1)最大异常选取策略:根据每个cmdb_id所包含的所有指标异常程度来进行选取。
    (2)pod/service抉择选取策略:这个策略主要是要区分当故障发生时,到底是pod故障,还是service故障。从service故障的定义得知:当某个service的4个pod都发生故障时,则认定为service故障。而实际情况可能某个service服务的3个或者2个pod发生严重故障,其service服务才是根因故障。
    (3)istio服务调用关系选取策略:istio的流量相关指标,cmdb_id格式:容器名.source/destination.服务调用方.被调用服务。我们通过对istio数据异常检测,可同时获得3个异常得分字典,分别是容器异常得分字典、服务调用方异常得分字典、被调用服务得分字典。首先根据服务调用方异常得分字典、被调用服务得分字典确定是服务调用方异常还是被调用服务异常,然后结合容器异常得分字典确定是服务异常还是服务下的某个pod异常。
    (4)调用链拓扑关系选取策略:这个策略主要是要区分当故障发生时,被检测出来的cmdb_id并不是根因,需要通过拓扑关系图来溯源。
    在这里插入图片描述

5、故障分类

  • 分类特征构建
    (1)横向时序维度:整体时序指标统计值,前序后序指标统计值,目标时点指标与前序、后序偏差,后序异常点统计值等,得到指标的时序信息和异常的持续情况。
    (2)纵向指标维度:目标时点指标值,目标时点异常指标数,目标时点异常分统计值等,得到异常的指标分布和各指标的异常情况。
    在这里插入图片描述

  • 集成学习分类模型:有标签的情况下,构建有监督分类模型,对异常检测结果进行分类。

6、告警策略

  • 异常置信度:异常检测模型计算异常得分时间序列,滑动窗口积分计算累计异常得分作为异常置信度,利用实时异常置信度对比机制进行告警抑制。
  • 告警权重得分模型:自定义得分模型,根据指标的历史异动情况计算其权重,跟历史故障匹配度越高,同时跟非异常情况下匹配度越低,则权重越高(通俗来讲:异常情况下和正常情况下对比,抖动明显)。
  • 异常链路汇聚:该方法只用于调用链判断,主要是根据调用链上下游的抖动情况,计算cmdb_id节点的汇聚度,通过汇聚度决策是否异常。
  • DBSCAN:故障注入发生后的异常发生时间具有集中性特征,利用DBSCAN基于密度聚类的特征,准确识别同次故障,将一个时间段的异常记录聚类成异常事件,有效避免故障跨节点传播导致的误报。应用DBSCAN对时间戳进行聚类,有效避免告警风暴。
  • 故障窗口:基于滑动窗口(从当前时刻向前推10个时刻),计算窗口内各个故障的累计得分,得分最高者即为故障,满足一定条件提交;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏秃然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值