异常检测入门
编辑异常检测入门
编辑准备好试用一下异常检测了吗?请按照本教程进行操作:
- 试用 数据可视化工具
- 为 Kibana 示例数据创建异常检测作业
- 使用结果识别数据中可能的异常
在本教程结束时,您应该对机器学习是什么有一个很好的了解,并且希望受到启发,在您自己的数据中使用它来检测异常。
需要更多背景信息?请查看 Elasticsearch 简介,了解术语并理解 Elasticsearch 的基本工作原理。
试用
编辑-
在您使用机器学习功能之前,必须安装 Elasticsearch 和 Kibana。Elasticsearch 存储数据和分析结果。Kibana 提供了一个有用的用户界面,用于创建和查看作业。
您可以在自己的硬件上运行 Elasticsearch 和 Kibana,或者使用我们在 Elastic Cloud 上的 托管 Elasticsearch 服务。Elasticsearch 服务在 AWS 和 GCP 上均可用。 免费试用 Elasticsearch 服务。
- 验证您的环境是否已正确设置以使用机器学习功能。如果启用了 Elasticsearch 安全功能,要完成本教程,您需要一个具有管理异常检测作业权限的用户。请参阅 设置和安全。
-
- 在 Kibana 主页上,单击 试用示例数据,然后打开 其他示例数据集 部分。
- 选择一个数据集。在本教程中,您将使用 示例 Web 日志。在这里,您可以随意单击所有可用示例数据集上的 添加数据。
这些数据集现在可以在 Kibana 的机器学习作业中进行分析。
在 Kibana 中浏览数据
编辑要从机器学习分析中获得最佳结果,您必须了解您的数据。您必须知道其数据类型以及值的范围和分布。“数据可视化工具”使您能够浏览数据中的字段
-
在您的 Web 浏览器中打开 Kibana。如果您在本地运行 Kibana,请转到
https://127.0.0.1:5601/
。Kibana 机器学习功能使用弹出窗口。您必须配置您的 Web 浏览器,使其不阻止弹出窗口或为您的 Kibana URL 创建例外。
- 在 Kibana 主菜单中,单击 机器学习。
- 选择 数据可视化工具 选项卡。
- 单击 选择数据视图 并选择
kibana_sample_data_logs
数据视图。 - 使用时间过滤器选择您感兴趣浏览的时间段。或者,单击 使用完整数据 以查看完整的数据时间范围。
- 可选:您可以更改随机抽样行为,这会影响“数据可视化工具”中使用的每个分片的文档数量。您可以使用平衡准确性和速度的自动随机抽样,您可以选择抽样百分比的手动抽样,或者您可以关闭该功能以使用完整数据集。Kibana 示例数据中的文档数量相对较少,因此您可以关闭随机抽样。对于较大的数据集,请记住,使用较大的样本量会增加查询运行时间,并增加群集上的负载。
-
浏览“数据可视化工具”中的字段。
您可以按字段名称或 字段类型 过滤列表。“数据可视化工具”会指示在所选时间段的样本中,有多少文档包含每个字段。
特别是,查看
clientip
、response.keyword
和url.keyword
字段,因为我们将在异常检测作业中使用它们。对于这些字段,“数据可视化工具”提供不同值的数量、前几个值的列表以及包含该字段的文档的数量和百分比。例如对于数值字段,“数据可视化工具”提供有关最小值、中位数、最大值和前几个值、不同值的数量及其分布的信息。您可以使用分布图来更好地了解数据中值的聚类方式。例如
记下
@timestamp
字段中的日期范围。它们与您添加示例数据的时间相关,您将在本教程的后面部分需要该信息。
现在您已经熟悉了 kibana_sample_data_logs
索引中的数据,您可以创建一些异常检测作业来分析它。
您可以在异常检测向导中查看可选字段的统计信息。浮出显示中的字段统计信息提供了更有意义的上下文,以帮助您选择相关字段。
在 Kibana 中创建示例异常检测作业
编辑此页面上的结果可能与您使用示例数据集时获得的实际值不同。这种行为是预期的,因为数据集中的数据点可能会随着时间的推移而变化。
Kibana 示例数据集包含一些预配置的异常检测作业供您试用。您可以使用以下任一方法添加作业
- 在 Kibana 主页上加载示例 Web 日志数据集后,单击 查看数据 > ML 作业。
- 在“机器学习”应用程序中,当您在 数据可视化工具 或 异常检测 作业向导中选择
kibana_sample_data_logs
数据视图时,它会建议您使用其已知配置创建作业。选择 Kibana 示例数据 Web 日志 配置。 - 接受默认值,然后单击 创建作业。
该向导将创建三个作业和三个数据源。
如果您想查看您的作业和数据源的所有配置详细信息,您可以在 机器学习 > 异常检测 > 作业 页面上查看。或者,您可以在 GitHub 中查看配置文件。但是,对于本教程的目的,这里是对每个作业目标的快速概述
-
low_request_rate
使用low_count
函数查找异常低的请求速率 -
response_code_rates
使用count
函数,并按response.keyword
值对分析进行分区,以查找按 HTTP 响应代码的异常事件速率 -
url_scanning
使用high_distinct_count
函数,并对clientip
字段执行人口分析,以查找访问异常高数量的不同 URL 的客户端 IP
下一步是查看结果,并了解这些作业生成了哪些类型的见解!
查看异常检测结果
编辑在数据源启动并且异常检测作业处理了一些数据后,您可以在 Kibana 中查看结果。
根据您机器的容量,您可能需要等待几秒钟,机器学习分析才能生成初始结果。
机器学习功能分析输入数据流,对其行为进行建模,并根据每个作业中的检测器执行分析。当事件发生在模型之外时,该事件会被识别为异常。您可以立即看到所有三个作业都发现了异常,这在每个作业的泳道中用红色块表示。
在 Kibana 中,有两个工具可用于检查异常检测作业的结果:异常资源管理器 和 单指标查看器。您可以通过单击左上角的图标在这些工具之间切换。您还可以编辑作业选择以检查不同的异常检测作业子集。
单指标作业结果
编辑其中一个示例作业 (low_request_rate
) 是一个单指标异常检测作业。它只有一个使用 low_count
函数和有限作业属性的检测器。如果您想确定何时您网站上的请求速率显着下降,您可以使用这样的作业。
让我们首先在 单指标查看器 中查看这个简单的作业
- 在 机器学习 中,选择 异常检测 选项卡以查看您的异常检测作业列表。
- 单击
low_request_rate
作业的 操作 列中的图表图标,以在 单指标查看器 中查看其结果。 - 使用日期选择器的相对模式选择过去一周的开始日期和未来一个月的结束日期,以覆盖大多数分析的数据点。
此视图包含一个图表,显示了实际值和预期值随时间的变化。只有在作业启用了 model_plot_config
时才可用。它只能显示单个时间序列。
图表中的蓝色线代表实际数据值。阴影蓝色区域代表预期值的边界。上下边界之间的区域是模型的最有可能的值,置信水平为 95%。也就是说,实际值有 95% 的可能性落在这些边界内。如果某个值超出此区域,则通常会被识别为异常。
如果您将时间选择器从数据的开始滑动到结束,您可以看到模型随着处理更多数据而如何改进。在开始时,预期值的范围相当广泛,模型没有捕获数据中的周期性。但它会很快学习并开始反映您数据中的模式。
将时间选择器滑动到包含红色异常数据点的时间序列部分。如果将鼠标悬停在该点上,您可以看到更多信息。
您可能会注意到时间序列中有一个很高的峰值。但是,由于此作业只查找低计数,因此它不会被突出显示为异常。
对于每个异常,您可以在查看器的 异常 部分看到关键详细信息,例如时间、实际值和预期值(“典型”值)及其概率。例如
在 操作 列中,还有其他选项,例如 原始数据,它会在 Discover 中生成相关文档的查询。您可以选择使用 自定义 URL 在操作菜单中添加更多链接。
默认情况下,该表包含时间轴所选部分中严重性为“警告”或更高的所有异常。例如,如果您只对严重异常感兴趣,则可以更改此表的严重性阈值。
异常解释 部分为您提供有关每个异常的更多见解,例如其类型和影响,以便更容易解释作业结果。
您可以通过在 单指标查看器 中拖动选择一段时间并添加描述来选择性地注释您的作业结果。注释是指特定时间段内事件的注释。它们可以由用户创建,也可以由异常检测作业自动生成,以反映模型更改和值得注意的事件。
在识别出异常后,通常下一步是尝试确定这些情况的上下文。例如,是否有其他因素导致了问题?异常是否仅限于特定应用程序或服务器?您可以通过叠加其他作业或创建多指标作业来开始排除这些情况。
高级或多指标作业结果
编辑从概念上讲,您可以将多指标异常检测作业视为运行多个独立的单指标作业。但是,通过将它们捆绑到多指标作业中,您可以看到作业中所有指标和所有实体的总体得分和共享影响因素。因此,多指标作业比拥有许多独立的单指标作业更具可扩展性。当您有跨检测器共享的影响因素时,它们也能提供更好的结果。
您还可以配置您的异常检测作业,以基于分类字段将单个时间序列拆分为多个时间序列。例如,response_code_rates
作业有一个单独的检测器,该检测器基于 response.keyword
拆分数据,然后使用 count
函数来确定事件数量何时异常。如果您想查看按响应代码分区的请求率高低,则可以使用这样的作业。
让我们从查看 异常资源管理器 中的 response_code_rates
作业开始
- 在 机器学习 中,选择 异常检测 选项卡以查看您的异常检测作业列表。
- 在异常资源管理器中打开
response_code_rates
作业,以通过单击作业行中的相应图标来查看其结果。
对于此特定作业,您可以选择查看每个客户端 IP 或响应代码的单独泳道。例如
由于作业使用 response.keyword
作为其分区字段,因此分析被分段,以便您可以为该字段的每个不同值提供完全不同的基线。通过按实体查看时间模式,您可能会发现原本隐藏在汇总视图中的内容。
在异常时间轴下方,有一个包含注释的部分。您可以使用 注释 部分右侧的选择器来筛选事件的类型。
在 异常资源管理器 的左侧,有一个列表,其中列出了同一时间段内所有检测到的异常的顶级影响因素。该列表包括最大异常分数,在本例中,这些分数针对每个检测器的每个存储桶、每个影响因素进行聚合。还有每个影响因素的异常分数的总和。您可以使用此列表来帮助您缩小影响因素的范围,并专注于最异常的实体。
单击泳道中的一个部分以获取有关该时间段内异常的更多信息。例如,单击 response.keyword
值为 404
的泳道中的红色部分
您可以看到异常发生的准确时间。如果作业中有多个检测器或指标,您可以看到哪个检测器捕获了异常。您还可以通过单击 操作 菜单中的 查看系列 按钮,切换到在 单指标查看器 中查看此时间序列。
在图表下方,有一个表格提供了更多信息,例如典型值和实际值以及导致异常的影响因素。例如
如果您的作业有多个检测器,则该表会聚合异常以显示每个检测器和实体的最高严重性异常,该异常是在 发现于 列中显示的字段值。要查看所有异常而不进行任何聚合,请将 间隔 设置为 显示所有
。
在此示例数据中,404 响应代码的峰值受特定客户端的影响。这种情况可能表明客户端正在访问不寻常的页面或扫描您的网站以查看是否可以访问不寻常的 URL。这种异常行为值得进一步调查。
您在 异常资源管理器 的每个部分中看到的异常分数可能略有不同。之所以会出现这种差异,是因为对于每个作业,都有存储桶结果、影响因素结果和记录结果。为每种类型的结果生成异常分数。异常时间轴使用存储桶级别的异常分数。顶级影响因素列表使用影响因素级别的异常分数。异常列表使用记录级别的异常分数。
群体作业结果
编辑最后一个示例作业 (url_scanning
) 是一个群体异常检测作业。正如我们在 response_code_rates
作业结果中看到的那样,某些客户端似乎正在访问异常大量的 URL。 url_scanning
示例作业提供了另一种调查此类问题的方法。它有一个单独的检测器,该检测器在 url.keyword
上使用 high_distinct_count
函数来检测该字段中异常数量的不同值。然后,它分析该行为是否与 clientip
字段定义的客户端群体不同。
如果您在 异常资源管理器 中检查 url_scanning
异常检测作业的结果,您会注意到它的图表格式不同。例如
在这种情况下,每个客户端 IP 的指标是相对于每个存储桶中的其他客户端 IP 进行分析的,我们可以再次看到 30.156.16.164
客户端 IP 的行为异常。
如果您想使用另一个群体异常检测作业示例,请添加示例电子商务订单数据集。它的 high_sum_total_sales
作业确定哪些客户在每个时间段内相对于其他客户购买了异常数量的商品。在此示例中,为两个客户发现了异常事件
创建预测
编辑除了检测数据中的异常行为外,您还可以使用机器学习功能来预测未来的行为。
要在 Kibana 中创建预测
- 在 单指标查看器 中查看您的作业结果(例如,
low_request_rate
作业)。要找到该视图,请单击 异常检测 页面上的 操作 列中的 查看系列 按钮。 -
单击 预测。
-
为您的预测指定持续时间。此值指示要推断超出处理的最后一条记录的距离。您必须使用 时间单位。在此示例中,持续时间为一周 (
1w
) -
在 单指标查看器 中查看预测
图表中的黄色线代表预测的数据值。阴影黄色区域代表预测值的边界,这也指示了预测的置信度。请注意,边界通常会随着时间的推移而增加(也就是说,置信水平会降低),因为您正在进一步预测未来。最终,如果置信水平太低,预测将停止。
-
可选:将预测结果与实际数据进行比较。
随着作业处理更多数据,您可以再次单击预测按钮,并选择查看叠加在实际数据上的预测结果之一。此时,图表会包含实际数据值、预期值的界限、异常值、预测数据值以及预测值的界限。这种实际数据和预测数据的结合可以指示机器学习功能在多大程度上能够推断出数据的未来行为。
如果您想查看 Kibana 示例数据的这种类型比较(示例数据具有有限数量的文档),您可以重置作业,并在创建预测之前仅分析数据的一个子集。例如,从 Kibana 中的作业管理页面重置您的一个异常检测作业,或者使用 重置异常检测作业 API。当您为此作业重新启动数据馈送时,请选择示例数据中途的某个日期作为搜索结束日期。默认情况下,当数据馈送到达该日期时,会停止并且异常检测作业会关闭。创建预测。然后,您可以重新启动数据馈送以处理剩余数据,并生成此处显示的结果类型。
Kibana 示例数据集的时间戳是相对于您添加数据集的时间而言的。但是,其中一些日期是未来的。因此,出于本教程的目的,当您重新启动数据馈送时,请不要使用无结束时间(实时搜索)选项。请指定适当的结束日期,以便立即处理所有数据。
现在您已经了解了使用示例数据创建预测有多么容易,请考虑您可能希望在自己的数据中预测哪种类型的事件。有关更多信息和想法,请参阅预测未来行为。
后续步骤
编辑通过完成本教程,您学习了如何在一组简单的示例数据中检测异常行为。您在 Kibana 中创建了异常检测作业,该作业会在后台为您打开作业并创建和启动数据馈送。您在 Kibana 中的单指标查看器和异常浏览器中检查了机器学习分析的结果。您还通过创建预测来推断作业的未来行为。
如果您现在正在考虑异常检测对您自己的数据影响最大的地方,则有三件事需要考虑:
- 必须是时间序列数据。
- 应该是包含业务或系统运行状况、安全或成功关键绩效指标的信息。您越了解数据,就能越快地创建生成有用见解的作业。
- 理想情况下,数据位于 Elasticsearch 中,因此您可以创建实时检索数据的数据馈送。如果您的数据位于 Elasticsearch 之外,则无法使用 Kibana 创建作业,也无法使用数据馈送。
一般来说,最好从针对关键绩效指标的单指标异常检测作业开始。在检查这些简单的分析结果之后,您将更好地了解可能的影响因素。您可以根据需要创建多指标作业并拆分数据或创建更复杂的分析功能。有关更复杂配置选项的示例,请参阅示例。
如果您想查找更多示例作业,请参阅提供的配置。特别是,有Apache 和 Nginx 的示例作业,它们与本教程中的示例非常相似。
如果您遇到问题,我们随时提供帮助。如果您是具有支持合同的现有 Elastic 客户,请在 Elastic 支持门户中创建工单。或在 Elastic 论坛中发帖。