日志异常检测 - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

日志异常检测

您可以为每个日志组创建日志异常检测器。异常检测器会扫描提取到日志组中的日志事件,并在日志数据中查找异常。异常检测使用机器学习和模式识别来建立典型日志内容的基准。

为日志组创建异常检测器后,它会使用日志组中过去两周的日志事件进行训练,进行训练。训练时间最长可能需要 15 分钟。训练完成后,它开始分析传入的日志以识别异常,异常将显示在 CloudWatch 日志控制台中供您检查。

CloudWatch 日志模式识别通过识别日志中的静态和动态内容来提取日志模式。模式对于分析大型日志集很有用,因为大量日志事件通常可以压缩成几个模式。

例如,请参阅以下三个日志事件的示例。

2023-01-01 19:00:01 [INFO] Calling DynamoDB to store for resource id 12342342k124-12345 2023-01-01 19:00:02 [INFO] Calling DynamoDB to store for resource id 324892398123-12345 2023-01-01 19:00:03 [INFO] Calling DynamoDB to store for resource id 3ff231242342-12345

在前面的示例中,所有三个日志事件都遵循一种模式:

<*> <*> [INFO] Calling DynamoDB to store for resource id <*>

模式中的字段称为标记。模式中不同的字段(例如请求 ID 或时间戳)被称为动态标记。动态令牌由 CloudWatch Logs <*> 何时显示模式表示。为动态令牌找到的每个不同值都称为令牌值

动态令牌的常见示例包括错误代码、时间戳和请求 ID。

日志异常检测使用这些模式来查找异常。异常检测器模型训练期结束后,将根据已知趋势评估日志。异常检测器将重大波动标记为异常。

创建日志异常检测器不会产生费用。

异常和模式的严重性和优先级

日志异常检测器发现的每个异常都被分配一个优先级。找到的每种模式都被分配了严重性

  • 优先级是自动计算的,它基于模式的严重性级别和与预期值的偏差量。例如,如果某个令牌值突然增加 500%,则即使该异常的严重性为,也可能被指定为HIGH优先级。NONE

  • 严重性仅基于模式中的关键字FATAL,例如ERROR、和WARN。如果未找到这些关键字,则模式的严重性将标记为NONE

异常可见时间

创建异常检测器时,需要为其指定最长异常可见期。这是异常在控制台中显示并由 ListAnomaliesAPI 操作返回的天数。异常经过这段时间后,如果异常继续发生,则该异常会被自动接受为常规行为,异常检测器模型将停止将其标记为异常。

如果您在创建异常检测器时不调整可见时间,则默认使用 21 天。

抑制异常

发现异常后,您可以选择暂时或永久抑制该异常。抑制异常会使异常检测器在您指定的时间内停止将此事件标记为异常。隐藏异常时,可以选择仅隐藏该特定异常,或者隐藏与发现该异常的模式相关的所有异常。

您仍然可以在控制台中查看被抑制的异常。您也可以选择停止抑制它们。

常见问题

是否 Amazon 使用我的数据来训练机器学习算法以供其他客户 Amazon 使用或供其他客户使用?

不是。 训练创建的异常检测模型基于日志组中的日志事件,并且仅在该日志组和该 Amazon 账户中使用。

哪些类型的日志事件适用于异常检测?

日志异常检测非常适合:应用程序日志和其他类型的日志,其中大多数日志条目都符合典型模式。包含日志级别或严重性关键字(例如 INFOERRORDEBUG)的事件的日志组特别适合记录异常检测。

日志异常检测不适合:记录具有极长 JSON 结构的事件,例如 CloudTrail 日志。模式分析最多只能分析日志行的前 1500 个字符,因此任何超出该限制的字符都将被跳过。

审计或访问日志(例如 VPC 流日志)在异常检测方面的成功率也会降低。异常检测旨在发现应用程序问题,因此它可能不太适合网络或访问异常。

为了帮助您确定异常检测器是否适用于某个日志组,请使用 CloudWatch 日志模式分析来查找该组中日志事件中的模式数量。如果模式的数量不超过 300 个左右,则异常检测可能效果很好。有关模式分析的更多信息,请参见模式分析

什么会被标记为异常?

以下情况可能会导致日志事件被标记为异常:

  • 一种日志事件,其模式在日志组中以前从未见过。

  • 与已知模式的显著差异。

  • 动态代币的新值,具有一组离散的常用值。

  • 动态令牌的值出现次数变化很大。

虽然前面的所有项目都可能被标记为异常,但它们并不都意味着应用程序的性能很差。例如, higher-than-usual许多200成功值可能会被标记为异常。在这种情况下,你可以考虑抑制这些不表示问题的异常。

被屏蔽的敏感数据会怎样?

不会对被屏蔽为敏感数据的日志事件的任何部分进行异常扫描。有关屏蔽敏感数据的更多信息,请参阅使用屏蔽帮助保护敏感日志数据