覆盖数10万指标!去哪儿智能预警系统落地实践

Qunar技术沙龙 2024-12-17 10:43:47
分享概要

一、前言

二、价值分析

    1、背景

    2、搭建雷达系统目标

三、去哪儿机票智能预警系统-雷达系统

    1、雷达系统难点分析

    2、雷达系统架构

四、效果&未来计划

    1、去哪儿机票智能预警系统-雷达系统:效果

    2、去哪儿机票智能预警系统-雷达系统:未来计划

 

作者介绍

宋璐,去哪儿旅行QA,目前在机票QA团队工作,主要负责机票质量保障和效能提升的相关工作。

 

一、前言

 

本文将从以下三个方向展开:

 

首先,我们将进行价值分析,探讨为什么需要智能预警系统,以及搭建去哪儿机票智能预警系统-雷达系统(之后简称雷达系统)所面临的挑战。

 

其次,我们将详细介绍去哪儿机票雷达系统的架构,包括其核心组成部分和运作机制。

 

最后,在大模型时代的背景下,我们将讨论雷达系统的未来规划和发展方向,以应对日益复杂的数据分析和监控需求。

 

二、价值分析

 

 

1、背景

 

在数字化时代,互联网团队面临的挑战前所未有。不仅要确保系统的高可用性和高性能,还需迅速发现并解决故障,以减轻对业务的影响。然而,快速响应异常也面临着巨大的挑战。以机票业务为例,随着业务的持续更新和迭代,监控指标呈指数级增长,我们管理着数十万的业务指标和百万级的系统指标。依赖人工监测这些指标的异常情况不仅耗时费力,而且几乎不可能实现。

 

1)故障发现方式

 

在引入智能检测监控系统之前,去哪儿的监控指标主要依赖人工添加报警进行运维管理。鉴于监控指标的数量庞大,人工全面维护这些指标几乎是一项不可能完成的任务,导致大量指标异常因缺乏报警而未被及时发现,进而累积成系统性故障。以2022年机票业务故障数据为例,通过监控报警发现的故障占比38%,而存在监控但未触发报警的情况同样占比38%,这表明我们面临着高达50%的报警丢失率。综上所述,构建一套智能检测指标系统显得尤为迫切和必要。

 

 

 

2、搭建雷达系统目标

 

在探索指标异常监测的过程中,我们进行了一系列尝试,其中包括被称为老雷达系统的尝试。尽管老雷达系统未能取得预期的成效,但它提供了宝贵的经验和教训。在构建去哪儿机票雷达系统之前,我们首先深入分析了老雷达系统未能成功的原因,以明确雷达系统的方向和目标。

 

我们围绕三个关键维度进行了深入分析:覆盖范围、系统准确度的量化评估,以及降低人力成本并实现可持续运维。

 

1)覆盖范围:

 

老雷达系统采取了对所有指标进行异常检测的全面模式,但这种方法产生了大量无效的报警,其中大部分对业务线来说并不具实质性意义。由于许多指标本身的重要性不足,频繁的报警并未引起开发人员的足够重视。

 

在雷达系统中,我们重新定义了分析指标的范畴,筛选出了经过研发、产品和测试人员严格挑选的核心指标,即黄金指标。这些指标中的大多数与主业务流程紧密相关,覆盖了电商交易系统的各个阶段,如前端搜索、报价,中台订单提交、支付,以及后端履约服务。我们还增加了一些通用指标,例如异常日志监控、中间件接口监控和机器监控,这些指标能够间接反映系统的运行状况,对故障预测具有广泛的意义。这些新增的指标在老雷达系统中是未被覆盖的,或者可以说,新系统的关注重点与旧系统有了显著的不同。

 

2)系统准确度的量化评估:在时序波形的异常检测领域,业界已经进行了多种尝试。从模型构建到业务线的实际应用,异常检测的准确度往往依赖于主观判断。虽然这种主观判断对于评估单一指标是有帮助的,但当面对大量的报警数据时,其有效性便大打折扣。因此,我们有必要构建一个测量系统,以实现对雷达模型准确度的定量分析。通过对问题波形进行针对性解决,我们可以提高检测的准确性。老雷达模型由于缺乏持续量化模型准确度的功能,使得后续的持续运维面临诸多挑战。

 

3)降低人力成本与实现可持续运维:雷达系统必须具备可持续运维的能力,旨在减少人工监控指标和运维雷达平台所投入的人力成本,从而确保系统的长期稳定运行。

 

综上所述,雷达系统的目标是打造一个全面覆盖超过5万个机票核心面板指标和全量核心appcode错误指标,且准确率超过75%的可持续运维智能预警平台。通过实现这一目标,我们能够实现对业务系统的智能化预警,显著提升系统的稳定性和可靠性,同时大幅缩短故障和线上问题的发现时间。

 

 

三、去哪儿机票智能预警系统-雷达系统

 

 

1、雷达系统难点分析

 

在构建雷达系统之前,我们调研了业界其他公司的时序波形智能预警方案,发现它们的架构设计大致相似,我们的老雷达模型也采用了相同的架构。这表明架构本身并无根本性问题。老雷达模型准确度不足的原因必然隐藏在其中的某些处理环节上,这些问题也必将成为雷达模型需要克服的挑战。因此,我们对老雷达模型的每个模块进行了全面而深入的分析,以确保新系统能够在这些问题上取得突破。

 

1)老雷达系统分析

 

老雷达系统旨在通过一套算法分析所有指标,模拟watcher的报警机制,采用nsigma算法结合规则,以动态绘制报警线的方式来实现预警。

 

 

特征值计算:对指标历史7天数据进行数据统计分析,计算指标最大值、最小值、标准差、方差、期望等;来衡量指标的离散程度、周期性等相关特性,用于后续指标分析。

 

指标分析:利用指标特征值对指标进行分类,确定指标进入哪种异常检测算法。

 

异常检测:针对不同指标分类,进行不同模式的异常分析,有针对性的解决问题。

 

2)老雷达模型各个模块问题

 

对老雷达模型的各个模块进行分析,总结问题如下:

 

模块

问题

数据拉取

只支持watcher原始指标,不支持核心面板的复合指标(率、差、和)

特征值计算

指标特征值计算少,只有maxminavg、周期

周期计算不准:计算了top20个点,时间间距最大的两个点作为周期的起始点

未降噪:异常点干扰未排除

指标分析

离散和连续分类模糊:每分钟都有数据并且QPS>5是连续的; 剩下的是离散的

业务分类简单:只有counttime

异常检测

只有3sigma算法

 

举个例子,如:老雷达特征值计算模块,故障期间老雷达模型计算的特征值与真实值出入很大,特征值计算不准确,直接影响后续的指标分类和异常检测的准确度。

 

指标正常波形:

 

 

故障期间波形:

 

 

 

 

2、雷达系统架构

 

经过先前的分析,我们确立了雷达模型的结构,该结构同样分为五个核心模块:数据拉取、特征值计算、指标分析、异常检测和报警触发,并辅以一个准确度验证模块。雷达模型的具体架构如图所示。接下来,我们将详细阐述雷达模型如何针对老雷达模型存在的问题提供解决方案。

 

 

1)特征值模块

 

老雷达模型在指标的数据挖掘上未能深入,导致指标分类过于粗略,无法实施针对性的异常检测算法,从而导致了频繁的误报。为了解决这一问题,雷达模型采用了多种数据预处理方法,对原始指标进行了全面而细致的特征值分析,并将这些特征值有效地应用于指标分类过程中。

 

思路:深入挖掘曲线本身的特征,并将这些特征值与后续的分析模块紧密关联,以实现更精细化的指标分类和处理。这种方法不仅提高了异常检测的准确性,还显著降低了误报率,从而提升了整体的预警效能。

 

 

2) 指标分类

 

我们的调研发现,时序波形异常检测在业务应用中效果不佳的主要原因有两个方面:一是对时序指标本身的物理特性挖掘不充分,二是指标的业务特性分类过于简单,这导致后续的异常检测难以进行,并引发了大量的误报问题。

 

为了解决这些问题,我们首先利用特征值计算模块对指标进行了深度数据挖掘,计算出多种特征值,并将这些特征值应用于指标分类过程中。同时,结合业务知识积累,我们对指标进行了五种业务分类和波形分析,为后续异常检测算法的实现提供了精确的指导和便利。

 

①指标特征分类

 

常见波形分析:平稳型、周期型、微量型、离散型、抖动型

 

 

 

 

最终分类:

 

 

②指标业务分类

 

通过对故障数据的深入分析,我们对核心面板的指标进行了细致的分类,最终确定了五类关键指标作为覆盖范围:error(异常量)、rate_fail(异常率)、success(成功量)、rate_success(成功率)和count(业务量)。在指标分类工作完成后,我们随即展开了指标异常检测的下一步工作。

 

指标分类

常见波形

关注点

error

离散、连续周期型

上升

rate_fail

离散、连续周期型、平稳型

上升

success

离散、连续周期型、平稳型

下降

rate_success

离散、平稳型(0-1,0-100

下降

count

离散、连续周期型、平稳型、抖动

上升、下降

 

3)准确度量化模型

 

在开展异常检测工作之前,我们优先构建了一个准确度量化模型,旨在评估算法的精确度。该模型的功能主要分为两个部分:1)测试数据的选择;2)测试数据的验证。

 

①测试数据的选择

 

我们深知测试集的选择对算法的有效性有着直接的影响,因此选取合适的测试集至关重要。为了确保测试集的有效性和代表性,我们将测试集的选择分为两个部分:(1)故障测试集;(2)IVR报警测试集。

 

故障测试集:由于数据量较少且波形特征明显,我们期望能够达到100%的报警准确率。

 

IVR报警测试集:我们将机票业务划分为12个不同的业务线,全面收集每条业务线的核心面板和核心应用的报警数据。通过抽样不同日期的报警数据,并由人工确认报警准确的指标,我们将其导入数据集。这样的做法可以确保测试集的全面性和准确性。

 

②测试数据验证

 

测试数据集持久化:鉴于系统指标的数据量巨大,watcher平台上的指标数据超过一个月后会被聚合,这可能影响到验证的准确性。因此,我们将问题波形时间窗口内的指标数据进行了持久化处理。

 

测试数据集验证:我们将这些持久化的测试数据替换为当前的真实数据,以触发测试验证过程。这样的验证方法能够确保算法在实际应用中的表现与预期相符,从而提高整体的预警准确性和系统的可靠性。

 

 

4)异常检测算法

 

通过对老雷达模型的分析,我们认识到基于规则和简单统计学算法的异常检测方法覆盖范围有限,并且缺乏良好的泛化能力。同时,使用单一算法对全量指标进行异常检测也未能取得理想的效果。

 

为此,雷达模型针对不同的波形分类采用了多种异常检测算法,以期获得更准确的预测结果。

 

对于连续波形,我们通过实验分析选择了boxplot和KDE来处理具有周期性和平稳性的指标。

 

对于离散波形,我们采用了异常密度检验算法来解决小流量问题。

 

最后,我们运用同环比陡增/陡降模型来对检测范围进行补充,以确保覆盖更全面。

 

这样的多角度、多算法的策略有助于雷达模型更有效地识别和预测各种异常情况。

 

①连续波形异常检测算法

 

整体思路:针对业界常用连续波形异常检测算法实验,最终选择了4种数据预处理方式+2种异常检测算法。

 

方法类别

方法名称

优劣势分析

基于分布

3Sigma

报警数量过多,非基于正态分布图,干扰大

BoxPlot

连续周期型波形,异常检测,效果好

Z-score

和3sigma 类似的算法

Grubbs

这种算法和3sigma类似没有多大实际意义

基于距离

KNN

缺点是仅可以找出全局异常点,无法找到局部异常点

基于密度

LOF

对于局部的异常点发现比较敏感,但是从计算距离的维度去判断有些时候还是失准。

KDE

连续平稳型波形,异常检测,效果好

基于树

isolation Forest

这种存在切分不好导致的异常判断,无法解释

基于分类

One-Class SVM

这种异常检测也很少在实际中使用。

基于机器学习

PCA

降维度后存在失真和偏差无法解释

基于模型预测

ARIMA

STL 分解后的残差预测通过ARIMA 预测不准确,基本没什么意义。

Prophet

不准确

Hotwinter

基于趋势的指数平滑预测模型,不准确

STL

这种算法更多适合去做特征提取而不是实时的分解数据做预测。

基于深度学习和神经网络

LSTM

接入算法组模型验证,效果不理想

 

② 离散波形异常检测算法

 

整体思路:分析小流量问题的难点,归纳小流量常见的问题波形,针对性解决。

 

难点:指标离散,发现周期长,容易累计成故障。

 

 

 

eg:densitySTD:0.16;连续直线,国内机票搜索成功率的std:0.007; densityAVG:0.14;连续直线,国内机票搜索成功率的avg:0.99。

 

第二步:正态分布算法结合测试数据,找出最优参数。

 

判断公式

持续时间

测试集准确率

densityStd*1+densityAvg<当前密度,记异常

5

60%

densityStd*3+densityAvg<当前密度,记异常

5

75%

densityStd*5+densityAvg<当前密度,记异常

5

90%

 

第三步:使用参数三真实运维雷达报警,观测误报,调整参数。

 

判断公式

持续时间

测试集准确率

干扰率

densityStd*5+densityAvg

8

80%

18%

 

效果:雷达增量发现的线上问题中,65%是小流量问题,平均发现时长15min;无小流量故障。

 

③异常检测-陡增/陡降波形

 

整体思路:连续波形异常校验,需要一定的持续时间,对于短时间暴涨/暴降的指标进行兜底覆盖。

 

 

 

第一步:首先,根据指标的业务类型,确定是需要监测上升还是下降趋势。例如,对于success(成功量)和rate_success(成功率)这类指标,我们主要关注其下降趋势。

 

第二步:接着,判断指标数据是否连续。如果指标数据显示出连续下降的趋势,我们采用波形陡降模型;若是离散数据,则采用密度下降模型。

 

第三步:在波形陡降模型中,我们对连续的数据进行同比分析,比较当前时间点与前N分钟的数据,计算出7天内的平均QPS(每秒查询数),并找出这段时间内的最低QPS值。

 

第四步:根据测试集和问题期间QPS的下降幅度,我们配置测试梯度参数。例如,可以设定参数为1:0.2(表示QPS<1时,下降80%,触达阈值);5:0.2;50:0.3;1000:0.5;10000:0.8等。

 

第五步:最后,根据这些参数计算阈值,用以判断是否存在异常点。

 

5)自动调参

 

众所周知,算法模型的参数选择和调优是至关重要的一环。为了克服这个难题,我们主要实施了两个方面的动作:1)测试集的构建;2)自动调参功能。

 

上文我们已经介绍了如何构建测试集,接下来简要介绍下如何进行参数调整,已连续波形异常检测算法的参数选择为例:

 

第一步:首先,我们确定参数的范围和步长,并自动生成参数集,为后续的测试做好准备。

 

第二步:根据不同的指标类型,为每个参数ID触发一次对应的测试集验证,确保每个参数都在实际场景中得到检验。

 

第三步:从验证结果中找出每个指标类型中报警准确率最高的参数集,这些参数集将被用于实际的运维监控。

 

第四步:使用这些优选参数集进行雷达的实际报警操作,同时密切观察误报情况,并根据观察结果调整参数,以优化报警系统的性能。

 

最终参数调整效果如下:

 

指标分类

常见波形

故障测试集初始准确度

故障测试集调整后准确度

error

连续周期型

20%

100%

rate_fail

连续周期型/平稳型

28%

90%

success

连续周期型/平稳型

0%

85%

rate_success

平稳型(0-1,0-100

35%

100%

count

连续周期型/平稳型

0%

80%

 

四、效果&未来计划

 

 

1、去哪儿机票智能预警系统-雷达系统:效果

 

结合2024年前三个月的机票雷达运维数据,雷达准确率均值87%,平均每周发现线上问题数:10个,无新增的小流量故障。

 

 

 

 

 

2、去哪儿机票智能预警系统-雷达系统:未来计划

 

当前的雷达模型采用了数据驱动的方法,而在大数据时代,引入大型模型(大模型)能够在指标分类、降噪、报警抑制等多个方面提供更强大的支持,从而提升雷达模型的精确度和效能。大模型的应用可以有效地提高数据分析的深度和广度,使雷达模型在处理复杂问题和海量数据时更加得心应手,进一步优化预警系统的整体性能。

 

总结:我们构建了一套智能检测系统,旨在帮助我们监测指标异常,实现快速且准确的问题发现,为后续的问题解决提供了关键的前提条件,从而最大限度地减少了问题对业务的负面影响。通过去哪儿机票雷达系统的实施和实践,我们充分考虑了业务的特定需求和时序波形的特点,构建了一个采用多种算法的异常检测模型。通过构建测试数据集并量化模型的准确度,我们成功实现对数十万指标的有效覆盖,确保了算法的高准确率,及时有效地识别和解决问题,有效预防了故障的发生。


 
作者丨宋璐
来源丨公众号:Qunar技术沙龙(ID:QunarTL)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告