当前位置: 首页 > 科技观察

基于AI算法的数据库异常监测系统的设计与实现

时间:2023-03-14 15:29:37 科技观察

基于AI算法的数据库异常监控系统设计与实现提供基于AI算法的数据库异常检测服务。1、后台数据库广泛应用于美团核心业务场景,对稳定性要求高,异常容忍度极低。因此,快速的数据库异常发现、定位和止损变得越来越重要。针对异常监控问题,传统的固定阈值告警方式需要依靠专家经验进行规则配置,无法根据不同的业务场景灵活动态调整阈值,容易把小问题演变成大故障。基于AI的数据库异常检测能力,可根据数据库历史性能对关键指标进行7*24小时巡检,在异常萌芽状态发现风险,及早发现异常,在问题恶化前协助研发人员定位和止损。基于以上考虑,美团数据库平台研发团队决定开发数据库异常检测服务系统。接下来,本文将从特征分析、算法选择、模型训练和实时检测等几个维度来阐述我们的一些思考和实践。2.特征分析2.1找出数据的变化规律在开发编码之前,有一个很重要的工作就是从现有的历史监测指标中找出时间序列数据的变化规律,从而根据需要选择合适的数据。数据分布的特点。算法。以下是我们从历史数据中选取的一些有代表性的指标分布图:图1数据库指标表从上图可以看出,数据的规律主要呈现三种状态:循环、漂移和稳定[1]。因此,我们可以在前期对这些共同特征的样本进行建模,可以覆盖大部分场景。接下来我们从周期性、漂移性和稳定性三个角度进行分析,讨论算法设计的过程。2.1.1周期性变化在很多业务场景中,指标会因为早晚高峰或者一些定时任务的原因,出现规律性的波动。我们认为这属于数据固有的规律性波动,模型应该具有识别周期性成分和检测上下文异常的能力。对于没有长期趋势成分的时间序列指标,当指标有周期成分时,T代表时间序列的周期跨度。可以计算出自相关图,即计算出t取不同值时的值,然后通过分析自相关峰的区间来确定周期性。主要过程包括以下步骤:提取趋势分量和分离残差序列。用移动平均法提取长期趋势项,与原序列做差分得到残差序列(这里的周期分析与趋势无关,如果不分离趋势成分,自相关会受到很大影响,而且很难确定周期)。计算残差的循环自相关(RollingCorrelation)系列。将残差序列循环移动后,与残差序列进行向量点乘运算,计算自相关序列(循环自相关可以避免延迟衰减)。周期T由自相关序列的峰值坐标确定。提取自相关序列的一系列局部峰值,以横坐标的区间为周期(如果周期点对应的自相关值小于给定的阈值,则认为不存在显着的周期性)。具体过程如下:图2周期性提取过程示意图2.1.2漂移变化对于要建模的序列,通常要求没有明显的长期趋势或全局漂移,否则生成的模型通常不能很好地适应该指标的最新趋势[2]。我们指的是均值随时间发生显着变化或存在全局突变点的时间序列,统称为漂移场景。为了准确捕捉时间序列的最新趋势,我们需要在建模前期判断历史数据是否存在漂移。全局漂移和周期性序列均值漂移,如下例所示:图3数据漂移说明数据库指标受业务活动等复杂因素的影响,很多数据都会有非周期性的变化,建模需要容忍这些变化.因此,不同于经典的变点检测问题,在异常检测场景下,我们只需要检测数据在历史上稳定后发生漂移的情况。综合算法性能和实际性能,我们采用基于中值滤波的漂移检测方法,主要过程包括以下步骤:1.中值平滑a.根据给定窗口的大小,提取窗口数中的中位数,得到时间序列的趋势分量。b.窗口需要足够大,以避免周期性因素的影响,进行滤波器延迟校正。C。之所以使用中位数而不是均值平滑是为了避免异常样本的影响。2.确定平滑后的序列是增加还是减少a。对于中值平滑后的序列数据,如果每个点都大于(小于)前一个点,则该序列为递增(递减)序列。b.如果序列本质上是严格递增或递减的,则指标明显具有长期趋势,此时可以提前终止。3、遍历光滑序列,用下面两条规则判断是否有漂移现象当前样本点左侧序列的最大值小于当前样本点右侧序列的最小值,则出现突然增加的漂移(上升趋势)。b.如果当前样本点左侧序列的最小值大于当前样本点右侧序列的最大值,则存在突然下降漂移(下降趋势)。2.1.3平稳变化对于一个时间序列指标,如果它的属性在任何时刻都不随观测时间发生变化,我们就认为这个时间序列是平稳的。因此,对于具有长期趋势成分或周期成分的时间序列来说,它们不是平稳的。具体例子如下图所示:图4表明数据稳定针对这种情况,我们可以使用单位根检验(AugmentedDickey-FullerTest)[3]来判断给定的时间序列是否稳定.具体来说,对于一个指标在给定时间范围内的历史数据,我们认为同时满足以下条件时时间序列是稳定的:最近一天的时间序列数据通过adfuller检验得到的p值小于0.05。对最近7天的时间序列数据进行adfuller检验得到的p值小于0.05。3.算法选择3.1分布规律与算法选择通过了解业内一些知名公司发布的关于时间序列数据异常检测的产品介绍,加上我们的历史积累根据一些线上实际指标的经验和抽样分析,他们的概率密度函数符合以下分布:图5显示了分布偏斜,绝对中值差和极值理论作为最终的异常检测算法。下面是常用时间序列数据检测的算法对比表:我们没有选择3Sigma的主要原因是它对异常的容忍度较低,绝对中位数差在理论上对异常的容忍度比较好,所以当数据呈现分布高度对称时,用绝对中值差(MAD)代替3Sigma来检测。我们针对不同数据的分布采用不同的检测算法(不同算法的原理请参考文末附录,这里不再过多阐述):低偏度和高对称分布:中等绝对中位数差分(MAD)偏态分布:箱线图(Boxplot)高偏态分布:极值理论(EVT)通过以上分析,我们可以得出模型根据样本输出的具体过程:图6算法建模过程总体算法构建如上图所示,建模过程主要包括以下几个分支:时序漂移检测、时序平稳性分析、时序周期性分析、偏度计算。下面分别介绍:TimingdriftDetection。如果检测到有漂移的场景,需要根据检测得到的漂移点t对输入时序进行切割,并将漂移点之后的时序样本作为后续建模过程的输入,记为S={Si},其中i>t。时间序列平稳性分析。如果输入的时间序列S满足平稳性检验,可以直接通过箱线图(默认)或者绝对中位数差来建模。时间序列周期性分析。在周期性的情况下,记录周期跨度为T,将输入序列S按照跨度T进行切割,对每个时间索引j∈{0,1,?,T?组成的数据桶进行建模过程1}。在没有周期性的情况下,对所有输入时间序列S作为数据桶执行建模过程。案例:给定一个时间序列ts={t0,t1,?,tn},假设它具有周期性,周期跨度为T,对于时间索引j,j∈{0,1,?,T?1},其建模所需的样本点由区间[tj?kT?m,tj?kT+m]组成,其中m为表示窗口大小的参数,k为整数,j?kT?m≥0,j?kT+m≤n。例如,假设给定时间为2022/03/0100:00:00至2022/03/0800:00:00,给定窗口大小为5,周期跨度为1天,则对于时间index30和也就是说,其建模所需的样本点将来自以下时间段:[03/0100:25:00,03/0100:35:00][03/0200:25:00,03/0200:35:00]...[03/0700:25:00,03/0700:35:00]偏度计算。将时序指标转化为概率分布图,计算分布的偏度。如果偏度的绝对值超过阈值,则通过极值理论对阈值进行建模输出。如果偏度的绝对值小于阈值,则通过箱线图或绝对中值差对阈值进行建模和输出。3.2案例样本建模这里选取一个案例来展示数据分析和建模的过程,以便更清楚地理解上述过程。其中,图(a)为原始序列,图(b)为按天的跨度折叠的序列,图(c)为图(b)中样本在一定时间指标区间内的放大趋势表现),图片(d)是对应于(c)中的时间索引的下阈值。下面是对某个时间序列的历史样本进行建模的案例:图7.上面建模案例(c)区域的样本分布直方图和阈值(已剔除部分异常样本)。在分布式场景下,EVT算法计算的阈值更加合理。图8偏斜分布阈值对比4.模型训练与实时检测4.1数据流转流程为了实时检测大规模秒级数据,我们以基于Flink的实时流处理为出发点,设计技术方案如下:实时检测部分:基于Flink的实时流处理,消费Mafka(美团内部消息队列组件)消息进行在线检测,结果存储在Elasticsearch(以下简称ES)中,异常记录生成。离线训练部分:使用Squirrel(美团内部KV数据库)作为任务队列,从MOD(美团内部运维数据仓库)中读取训练数据,从配置表中读取参数,训练模型,保存在ES中,支持自动和手动触发训练,通过定时读取模型库加载和更新模型。下面是具体的离线训练和在线检测技术设计:图9离线训练和在线检测技术设计4.2异常检测过程异常检测算法整体采用分而治之的思想。检测算法。分为离线训练和在线检测两部分。离线主要根据历史条件进行数据预处理、时间序列分类和时间序列建模。Online主要加载并使用离线训练好的模型进行在线实时异常检测。具体设计如下图所示:图10异常检测流程5.乘积运算为了提高优化迭代算法的效率并继续运算以提高精度和召回率,我们使用Horae(一种可扩展的时间序列数据美团内部异常检测系统)案例回溯能力实现在线检测、案例入库、分析优化、结果评估、发布的闭环。图11运行过程目前异常检测算法的指标如下:准确率:随机抽取一部分检测到异常的案例,人工验证确实异常的比例为81%。召回率:根据故障来源、告警等,回顾对应实例的指标异常情况,根据监控结果计算召回率,为82%。F1-score:准确率和召回率的调和平均值为81%。六、未来展望目前,美团数据库的异常监控能力已经基本完成,未来我们将继续对产品进行优化和扩展。具体方向包括:具备异常类型识别能力。可检测均值变化、波动变化、尖峰等异常类型,支持按异常类型订阅告警,并作为特征输入后续诊断系统,完善数据库自治生态[4]。构建人在环路环境。支持基于反馈标注的自动学习,保证模型的持续优化[5]。支持各种数据库场景。异常检测能力平台化,支持更多数据库场景,如DB端到端报错、节点网络监控等。7.附录7.1AbsoluteMedianDeviation中值绝对偏差(MAD),是样本偏差的稳健度量单变量数值数据[6],通常由以下公式计算:其中,先验为正态分布时,一般C取1.4826,k取3。MAD假设中间50%的样本为正态样本,异常样本落在两侧的50%。当样本服从正态分布时,MAD指标比标准差更适合数据集中的异常值。对于标准偏差,使用数据与平均值之间的距离的平方。偏差越大,权重越大,异常值对结果的影响不容忽视。对于MAD,少量异常值不会影响实验结果。MAD算法对数据的正态性要求很高。7.2箱线图箱线图主要用几个统计量来描述样本分布的分散程度和对称性,包括:Q0:最小值(Minimum)Q1:下四分位数(LowerQuartile)Q2:中位数(Median)Q3:上四分位数(UpperQuartile)Q4:Maximum(最大值)图12箱线图将Q1和Q3之间的距离称为IQR,当样本偏离上四分位数的IQR的1.5倍(或者是下四分位数IQR的1.5倍)),样本被认为是异常值。与基于正态假设的三个标准差不同,一般来说,箱线图对样本的潜在数据分布没有任何假设,能够描述样本的离散情况,并且大概率包含潜在的异常样本在样本中。宽容。对于有偏差的数据,箱线图的校准和建模更符合数据分布[7]。7.3极值理论现实世界的数据很难用已知的分布来概括。例如,对于一些极端事件(异常),概率模型(如高斯分布)往往给出的概率为0。极值理论[8]是在没有任何分布假设的情况下,推断我们可能观察到的极端事件的分布原始数据,即极值分布(EVD)。其数学表达式如下(互补累积分布函数公式):其中t表示样本的经验阈值,可以针对不同的场景设置不同的值,是广义帕累托分布中的形状参数和尺度参数,分别。在超过人为设定的经验阈值t的情况下,随机变量X-t服从广义帕累托分布。通过最大似然估计法,我们可以计算出参数估计值和,并利用下式求出模型阈值:上式中,q代表风险参数,n为所有样本的个数,Nt为个数满足x-t??>0的样本。由于经验阈值t的估计通常没有先验信息,因此可以用样本经验分位数代替数值t,经验分位数的取值可根据实际情况选择。8.参考资料[1]Ren,H.,Xu,B.,Wang,Y.,Yi,C.,Huang,C.,Kou,X.,...&Zhang,Q.(2019,July).微软的时间序列异常检测服务。第25届ACMSIGKDD知识发现与数据挖掘国际会议论文集(第3009-3017页)[2]Lu,J.、Liu,A.、Dong,F.、Gu,F.、Gama,J.和Zhang,G.(2018)。概念漂移下的学习:回顾。IEEE知识与数据工程汇刊,31(12),2346-2363.[3]Mushtaq,R.(2011)。增强的dickeyfuller测试。[4]Ma,M.,Yin,Z.,Zhang,S.,Wang,S.,Zheng,C.,Jiang,X.,...&Pei,D.(2020)。诊断云数据库中间歇性缓慢查询的根本原因。VLDB捐赠会论文集,13(8),1176-1189.[5]A.霍尔辛格(2016)。用于健康信息学的交互式机器学习:我们什么时候需要人在回路中?。脑信息学,3(2),119-131.[6]Leys,C.、Ley,C.、Klein,O.、Bernard,P.和Licata,L.(2013年)。检测出来谎言:不要使用均值附近的标准偏差,而使用中位数附近的绝对偏差。实验社会心理学杂志,49(4),764-766.[7]Hubert,M.,&Vandervieren,E.(2008)。针对偏态分布调整后的箱线图。计算统计与数据分析,52(12),5186-5201.[8]Siffer,A.、Fouque,P.A.、Termier,A.和Largouet,C.(2017年8月)。用极值理论在流中进行异常检测。在第23届ACMSIGKDD知识发现和数据挖掘国际会议论文集(第1067-1075页)中。