故障排除和常见问题解答
Elastic Stack Serverless
使用本节中的信息来排查常见问题并查找常见问题的答案。
如果异常检测作业失败,请尝试按照以下步骤重启作业。如果重启后的作业按预期运行,则导致作业失败的问题是暂时的,无需进一步调查。如果作业在重启后很快失败,则问题是持续性的,需要进一步调查。在这种情况下,请通过查看 Kibana 中作业管理窗格上的作业状态来找出失败作业运行的节点。然后获取该节点的日志,查找消息中包含异常检测作业 ID 的异常和错误,以便更好地了解问题。
如果异常检测作业失败,请执行以下操作以从 failed 状态恢复
使用 Stop datafeed API,并将
force参数设置为true,来*强制*停止相应的数据feed。例如,以下请求强制停止my_datafeed数据feed。POST _ml/datafeeds/my_datafeed/_stop{ "force": "true" }使用 Close anomaly detection job API,并将
force参数设置为true,来*强制*关闭异常检测作业。例如,以下请求强制关闭my_job异常检测作业POST _ml/anomaly_detectors/my_job/_close?force=true在 Kibana 的作业管理窗格中重启异常检测作业。
有关详细信息,请参阅 Thomas Veasey 和 Stephen Dodson 的论文 Anomaly Detection in Application Performance Monitoring Data,以及我们在 The Math behind Elastic Machine Learning 和 Machine Learning and Statistical Methods for Time Series Analysis 上的网络研讨会。
C++ 代码中引用的进一步论文
所有输入特征都由用户指定,例如,使用 各种统计函数(如计数或均值)对感兴趣的数据进行计算。
是的。仅使用异常检测作业配置中指定的数据进行检测。
集成模型生成一个概率值,然后将其映射到 0 到 100 之间的异常严重性分数。观察数据的概率越低,严重性分数越高。有关详细信息,请参阅这篇 高级概念文档。校准(也称为标准化)发生在两个级别
- 在同一指标/分区内,分数会在
renormalization_window_days参数指定的窗口内“回溯”重新标准化。例如,这就是为什么存在record_score和initial_record_score。 - 在多个分区之间,分数会按照 这篇博文 中所述的方式重新标准化。
它是一个在线模型,并且会持续更新。模型的旧部分会根据 model_prune_window 参数(通常为 30 天)被修剪掉。
有一套基准用于监控异常检测算法的性能,并确保随着方法的不断开发和完善,不会出现回归。它们被称为“数据场景”,包含 3 个部分
- 一个数据集(存储为 Elasticsearch 快照),
- 一个机器学习配置(异常检测、dfanalysis、transform 或 inference),
- 一组任意的静态断言(桶计数、异常分数、准确率等)。
性能指标会从每次场景运行中收集,并持久化到 Elastic Cloud 集群中。然后,这些信息用于跟踪不同构建的性能随时间的变化,主要是为了检测性能(结果质量和计算时间)的任何回归。
在客户方面,情况有所不同。没有常规方法来监控模型性能,因为它属于无监督。通常,模型输出的实际应用包括以下一个或多个步骤
- 根据特定的异常分数,为影响因素、桶或记录创建警报。
- 使用预测功能来预测未来感兴趣指标的发展情况。
- 使用一个或多个异常检测作业的组合来识别重要的异常影响因素。
对于给定时间序列中的每条记录,异常检测模型都会提供一个异常严重性分数、95% 的置信区间和一个实际值。这些数据存储在索引中,可以使用 Get Records API 检索。利用这些信息,您可以使用标准度量来评估预测准确性、区间校准等。可以使用 Elasticsearch 聚合来计算这些统计数据。
异常检测的目的是对发生异常的时期进行最佳排序。评估此目的的一种实用方法是跟踪实际事件,并查看它们与异常检测预测的相关程度。
Elasticsearch 的异常检测模型会持续学习并适应时间序列的变化。这些变化可能表现为缓慢的漂移以及突然的跳跃。因此,我们会非常小心地管理对不断变化的数据特征的适应。在拟合异常时期(过拟合)和不学习新的正常行为之间总是存在细微的权衡。以下是 Elastic 用来管理这种权衡的主要方法
- 通过测量预测中的偏差和误差分布的矩来学习最佳衰减率。
- 允许周期性模式中存在连续的小漂移。这是通过相对于一个小的有界时间偏移,持续最小化最后一个迭代中的平均预测误差来实现的。
- 如果预测在很长一段时间内显著错误,算法会测试时间序列是否发生了突然变化。假设检验用于测试不同类型的变化,例如值缩放、值偏移以及周期性模式(如夏令时)中的大幅时间偏移。
- 在不同长度的时间窗口上运行连续的假设检验,以测试是否存在新的或已更改的周期性模式的显著证据,并在拒绝不变特征的原假设时更新模型。
- 累积日历天的误差统计数据,并持续测试是否需要将预测日历特征添加到模型中或从模型中移除。
Elastic 机器学习需要最少的数据量才能为异常检测构建有效的模型。
- 对于诸如
mean、min、max和median等采样指标,最小数据量是八个非空桶跨度或两小时,以较大者为准。 - 对于所有其他非零/非空指标和基于计数的数量,是四个非空桶跨度或两小时,以较大者为准。
- 对于
count和sum函数,空桶很重要,因此它与采样指标相同——八个桶或两小时。 - 对于
rare函数,通常需要大约 20 个桶跨度。对于总体模型,它可能更快,但这取决于每个桶的互动人数。
经验法则
- 周期性数据超过三周,或非周期性数据有几百个桶
- 至少与您想要预测的数据量一样多
Elastic 机器学习算法被编程为处理缺失和嘈杂的数据,并利用基于学习到的统计属性的去噪和数据信誉技术。