文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

蚂蚁金服异常检测和归因诊断分析实践

2024-11-30 00:45

关注

一、归因诊断

在实际工作中,我们常常受到业务方对关键绩效指标(KPI)的灵魂拷问:某个 KPI 指标为什么会上升或下降?归因诊断的任务就是解释这些指标变化的原因。

归因诊断把问题的定位过程看作是一个因子对比的过程:指标在基准时间区间的值为 y,在当前时间区间的值为 y^',两个时间点相差 ∆y。基于这个变化量 ∆y 进行因子的拆解,生成一个因子指标树。在每个叶子节点处,都计算其对整体 ∆y 的贡献度,从而确定哪个因子对整体贡献最大。

通过以上过程,就能够解释 KPI 波动的原因。在实际应用中,可以支持:

接下来举例说明上述归因过程。在实际业务中,假设支付成功率从 80% 下降到 60%,如果按照城市的维度,通过将变化量分配给各个城市从而进行归因诊断,即先计算上海 -15%,北京 -34%,广州 -16%。然后,将这些城市的变化量除以整体变化量(-20%),得到上海为支付成功率下降贡献了 75%,北京贡献了 170%,广州贡献了 80% 的结论。这样的计算方法是存在问题的,因为城市的贡献求和并不等于 100%。正确的逻辑应该是在计算每个城市的贡献时,考虑每个城市的分子分母的情况。因此,上海实际在支付成功率上没有变化,是一个分子分母等比率缩放的情况;而北京和广州则是都下降了10%,为整体变化量(-20%)各自贡献了 50%。

通过这样逐层拆解,可以清晰地看到每个因子对整体的贡献,解释具体的变化是由分子还是分母引起的,是由比率变化还是占比变化引起的。这种逐层拆解的逻辑为我们提供了一个全局可比的归因结论,有助于向业务做出清晰的解释。

在实际应用中,我们总结出四类方法,用于处理不同的业务场景:

这些方法在业务的实际应用中表现出色,取得了显著的效果。

在刚刚的归因过程中,虽然将问题归因到城市维度,但并没有明确解释支付成功率下降的具体原因。因此,需要进一步对因子进行归因,主要分为三个部分:

整个归因过程会生成一个多元因子库,基于这个库,我们重新审视支付成功率下降的问题,得出结论。例如,我们发现北京和广州的下降是因为受到疫情影响,大学生提前放假导致支付成功率下降。业务方得到这一结论后,可以做出相应的判断和策略调整,采取营销手段或其他措施,以解决支付成功率下降的问题,重新提升业务。

二、异常检测

1. 单指标异常检测

接下来介绍一下异常检测,首先从单指标异常检测入手。在实际业务中,业务方关心的是监控指标何时开始异常告警,以及异常告警何时结束。如果我们能够了解指标的正常波动区间,就能够解决这个问题,将告警信息实时、准确地反馈给业务方。

计算一个指标的正常波动区间可以借鉴 STL 时区分解的思路:

首先采用 STL 中通用的 lowess 函数进行趋势提取,同时提取周期信息,即识别时序中包含的周期以及周期的长度(例如,7 天、30 天、周、月、季度、年、小时等),这里我们借鉴论文中的 FFT 加 ACF 处理逻辑,可以识别出周期。

识别了周期后,下一步是提取周期波形。通过很好地提取周期波形并叠加周期,就能够有效地进行检测。

在提取周期波形时,由于周期波形受到营销活动的影响,振幅可能发生变化,因此还需要引入一些检测方法进行分段处理,最终获得相对完整的周期波形进行后续处理。

上图展示了一个真实案例:根据业务配置的异常敏感度动态调整基线的上下限,识别并监控异常告警的整个生命周期。我们能够清晰地追踪何时进入异常状态,以及何时恢复正常。整个过程都能够被有效监控。

在这个智能告警的案例中,当系统触发告警时,可以追溯到异常发生的时刻,随着告警持续推移,最终系统恢复正常,即自动关闭相应的告警单。这样一来,运维团队就不必花费过多精力处理那些自动关闭的告警,而能够集中精力处理更为紧急的运维任务。

在实际应用中,我们的系统在异常检测方面有着优异的表现:

2. 多指标异常检测

接下来介绍多指标异常检测的应用。在业务中,面对多个服务器每天产生大量的指标数据,业务方通常关心如何对每台服务器进行综合评分,以判断其是否异常。如图中,纵轴表示不同的服务器,每层代表一个服务器,横轴表示时间。随着时间的推移,每台服务器都会产生多个指标的数据值。

我们把这个问题定义一下:

上述由时间序列构成的数据矩阵 X^j 能够全面描述一台服务器在每个时刻的状态。那么问题就转化成了:如果我们能够表征出一个整体评分,即为每台服务器 X^j 打一个分数,那么就能综合反映出该服务器是否出现异常。

接下来将介绍三种方法:

VBEM 是基于变分推断(Variational Inference)的期望最大化(Expectation-Maximization)算法。通过隐状态 q 分布来逼近真实后验 p 的分布,结合 ELBO 证据下接的似然函数保证模型参数的收敛,整个过程是一个状态转移过程。如图中,x_i 表示学习到的隐状态,m_0 和 P_0 是模型的初始参数(均值和斜方差)。最终要学到的参数是 A、C、Q、R、μ_1^x、Σ_1^x,分别对应状态转移中的权重、均值和协方差的分布,其中 Σ_1^x 是协方差矩阵,包含方差信息和指标之间的相关性,可以很好地表征多指标的信息。

AnoSVGD 方法是我们在 CIKM 2023 年会议上发表的一篇论文。其核心思想是通过映射变换,用已知数据的概率密度函数(Probability Density Function,PDF),多次迭代估计未知数据的概率密度函数(PDF)。通过观察右侧的图可以看到,在多次迭代之后,模型能够有效地表征未知数据的分布。每次迭代时,基于前一次的结果,加上一个小的步长和下降方向 θ,通过梯度下降找到最快的下降方向,从而进行迭代。这样,我们能够快速地找到未知数据的分布,并在达到目标后停止迭代。

Autoformer 算法的核心在于采用了时序分解的思想,类似于 Transformer 中的self-attention 机制:

以上三种方法在完成训练之后,检测阶段分别需要处理的操作是:

上述内容为我们在 CIKM 会议上发表的AnoSVGD 方法与其他方法例如 Autoformer、KDE 等方法在公开数据集上的对比结果,我们的 AnoSVGD 取得了非常出色的效果。

在多指标异常检测之后,仍然需要了解每个指标对当前异常的贡献度,这就要结合之前提到的归因诊断能力。例如,在一台机器上发生了多个指标的异常,发现平均响应时间(RT)和失败率是主要贡献异常的核心指标。通过归因诊断,就可以得出结论:在请求量正常的情况下,平均响应时间和失败率上升,明显属于超时类异常。这种异常一般与部署发布版本更新相关,因此建议 SRE(运维同学)执行发布回滚操作。

在实际应用中,我们已经实现了一些常规操作的自动执行,例如回滚操作。一旦检测到异常并关联到归因结论后,可以通过自动化手段自动回滚机器,恢复到正常状态。

整体的异常检测和归因诊断的过程总结如下:

再次强调,当前我们的系统:

除了之前提到的内容,异常检测和归因诊断不仅可以应用于单个业务或机器的异常,还可以应用于整个集群。我们可以通过历史告警信息,挖掘告警之间的因果关系图,并结合服务调用图,当某台服务器发生告警时,就可以通过异常检测、归因诊断和因果发现来分析整个服务器集群链路,快速定位整个服务集群中的问题链路,确定核心原因和根因。

三、问题与挑战

最后,总结一下我们所面对的问题和挑战:

来源:DataFunTalk内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯