我们正在升级FutureStack的注册,仅到4月30日。条款和条件适用。 现在注册

我们如何找到动态基线警报的最佳算法

读了5分钟

当我们开始开发新的遗物背后的算法时动态基线警报(它使用预测分析让New Relic的客户定义动态的,而不是静态的警告阈值),我们自然想尝试不同的方法来确定最有效的方法。然而,很快地,这迫使我们提出了一个问题:“我们怎么知道什么更好?”

为了回答这一点,我们做出了两个重要的决定:我们将在帮助客户的背景下定义“更好”,我们不会仅依靠人类或机器得分 - 我们将使用两者。

定义“更好”:平均绝对比例误差

基本上,基线警报中的基线旨在预测未来。也就是说,基线建立了我们预期的公制值,并且我们的警报系统将预测值与实际值的比较,以查看它是否应该生成警报。

考虑到这个目标,我们不想为了精确的预测而过度优化。相反,我们希望能够识别出与正常行为的显著偏差。过于精确的预测实际上可能会预测值的突然变化,因而不会创建警报——这将违背动态基线警报的全部目的。我们也知道我们的方法必须适用于广泛的数据尺度。

我们评估了各种统计数据误差估计并扔出那些在不同尺度上不起作用的人。我们的动态基线警报与各种指标一起工作,从吞吐量到响应时间,这可以表现出非常不同的尺度。我们还抛出了一些流行的公式,这些公式遭受了严重惩罚异常值。我们预计异常值,因此他们不会有助于评估我们的基线警报算法。

我们解决的方法是一个平均绝对缩放错误,通过两个面向基线的调整。

首先,我们不是评估预测和实际值之间的差异,而是根据预测来评估异常抑制的观察。由于我们希望为Alerts找到最佳算法,所以我们希望我们的预测更多地侧重于典型行为,而不是绝对精度。例如,当系统的吞吐量突然下降到零时,我们不希望快速地将基线更改为预测零。相反,我们希望基线保持“预测”系统的正常状态,至少几个小时,这样我们就可以向New Relic用户显示他们的系统处于异常状态。

我们对典型平均绝对缩放错误计算的另一个调整是将护栏放在特定的边缘箱周围。相当恒定,易于预测的系列可以显示一个非常大的平均绝对缩放错误,仅仅因为等式中的分母变得非常小。由于这些可预测系列的结果实际上非常适合警报,因此我们给出那些结果“1”的固定错误。

这个调整后的估计器让我们比较不同的算法,看看它们与现实世界的时间序列数据的表现如何。下面的图表显示了我们正在评估的一个特定算法的错误分布:

平均绝对缩放错误图表

桶测试:精确度、召回率和F1分数

平均绝对缩放错误方法让我们分析我们的回归错误;也就是说,我们如何预测时间序列中的下一个点。但我们也想知道我们的分类错误:我们是否将数据放在右侧桶中并正确将正常行为与事件分开?

在机器学习领域,我们提取了两个有用的概念:精确回忆。精度是一种度量假阳性- 我们经常触发警报,以便真正存在问题吗?回忆是一种衡量标准假阴性 -实际发生的事件发生多久我们没有捕获一次?

要分析这些概念,我们使用F1的分数,它取精度和召回率的调和平均值来给我们的算法打分。下面是一种算法在数千个实际度量时间序列中的精度、召回率和F1分数分布的示例。

精密召回F1分数图表

人类的联系

我们使用了最后一个测试来看看我们的警报在真实系统中有多有用:我们在混合中添加了人来评估其用途。但作为数据呆子,New Relic给我们的人类测试人员提供了一个量化评分系统,这代表了我们的最终质量目标。此标题旨在评估New Relic客户信心十足地设置基线警报的能力。例如,如果我们发现无法配置警报以捕捉明显事件的场景,我们将从该算法中停靠点。通过在一组一致的评分者和基线上重复这些测试,随着时间的推移,我们会对我们当前的质量与过去相比有一种感觉,测量改进,并检测回归问题。

动态基线警报目前处于有限的版本中,并计划在今年晚些时候均提供。通过循环模式提醒度量标准是一个很好的选择,旨在帮助新的遗物用户回答“我的系统是什么正常的?”

在这里,在新的遗物中,我们正在开心在幕后做数学,以使其成为所有工作。我们将继续使用这样的技术,因为我们努力将预测分析带入其他部分新Relic数字智能平台