

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

# 日志异常检测
<a name="LogsAnomalyDetection"></a>

您可以通过两种方式检测日志数据中的异常：创建用于持续监控的*日志异常检测器*，或者使用 Logs Insights 查询中的[`anomaly detection`](CWL_QuerySyntax-Anomaly.md) CloudWatch 命令进行按需分析。

日志异常检测器会扫描摄取到日志组中的日志事件，并自动查找日志数据中的异常。异常检测使用机器学习和模式识别来建立典型日志内容的基准。要进行按需分析，您可以使用 Logs Insigh CloudWatch ts 查询中的`anomaly detection`命令来识别时间序列数据中的异常模式。有关基于查询的异常检测的更多信息，请参阅[在 “ CloudWatch 日志见解” 中使用异常检测](LogsAnomalyDetection-Insights.md)。

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

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

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

```
2023-01-01 19:00:01 [INFO] Calling DynamoDB to store for ResourceID: 12342342k124-12345
2023-01-01 19:00:02 [INFO] Calling DynamoDB to store for ResourceID: 324892398123-1234R
2023-01-01 19:00:03 [INFO] Calling DynamoDB to store for ResourceID: 3ff231242342-12345
```

在上面的示例中，所有三个日志事件都遵循一种模式：

```
<Date-1> <Time-2> [INFO] Calling DynamoDB to store for resource id <ResourceID-3>
```

模式内的字段称为*令牌*。模式内变化的字段（如请求 ID 或时间戳）称为*动态令牌*。为动态令牌找到的每个不同值称为*令牌值*。

如果 CloudWatch Logs 可以推断出动态令牌所代表的数据类型，则它会将该令牌显示为`<string-number>`。*string*是对令牌所代表的数据类型的描述。*number*显示了与其他动态代币相比，该代币在模式中的显示位置。

CloudWatch Logs 根据对包含该名称的日志事件内容的分析来分配名称的字符串部分。

如果 CloudWatch Logs 无法推断出动态令牌所代表的数据类型，则它会将该令牌显示为 <Token-*number* >，并*number*指明与其他动态令牌相比，该令牌在模式中的显示位置。

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

日志异常检测使用这些模式来查找异常。异常检测器模型训练期结束后，将根据已知趋势对日志进行评估。异常检测器将显著的波动标记为异常。

本章介绍了如何启用异常检测、查看异常、为日志异常检测器创建警报以及日志异常检测器发布的指标。它还描述了如何对异常检测器及其结果进行 Amazon Key Management Service加密。

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

## 异常和模式的严重性和优先级
<a name="LogsAnomalyDetection-Severity-Priority"></a>

日志异常检测器发现的每个异常都分配有*优先级*。发现的每种模式都分配有*严重性*。
+ *优先级*是自动计算的，它基于模式的严重性级别以及与预期值的偏差量。例如，如果某个令牌值突然增加 500%，则即使异常的严重性为 `NONE`，也可能会被指定为 `HIGH` 优先级。
+ *严重性*仅基于模式中找到的关键字，例如 `FATAL`、`ERROR` 和 `WARN`。如果未找到这些关键字，则模式的严重性将标记为 `NONE`。

## 异常可见性时间
<a name="LogsAnomalyDetection-Visibility"></a>

创建异常检测器时，请为其指定最长异常可见性期限。这是异常在控制台中显示并由 [ListAnomalies](https://docs.amazonaws.cn/AmazonCloudWatchLogs/latest/APIReference/API_ListAnomalies.html)API 操作返回的天数。在异常经过此时间段后，如果异常继续发生，则会自动接受为正常行为，并且异常检测器模型会停止将其标记为异常。

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

## 抑制异常
<a name="LogsAnomalyDetection-Suppress"></a>

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

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

## 常见问题
<a name="LogsAnomalyDetection-FAQ"></a>

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

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

 **哪些类型的日志事件适合进行异常检测？** 

**日志异常检测适用于：**应用程序日志和其他类型的日志，其中大多数日志条目符合典型模式。事件包含日志级别或严重性关键字（如 **INFO**、**ERROR** 和 **DEBUG**）的日志组尤其适合日志异常检测。

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

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

为了帮助您确定异常检测器是否适用于某个日志组，请使用 CloudWatch 日志模式分析来查找该组中日志事件中的模式数量。如果模式的数量不超过 300 个，则异常检测可能会效果良好。有关模式分析的更多信息，请参阅 [模式分析](CWL_AnalyzeLogData_Patterns.md)。

 **什么会被标记为异常？** 

以下情况可能会导致日志事件被标记为异常：
+ 具有日志组中以前未见过的模式的日志事件。
+ 已知模式的显著变化。
+ 具有一组离散的常用值的动态令牌的新值。
+ 动态令牌的值出现次数的大幅变化。

虽然上述所有项都可能被标记为异常，但它们并不一定意味着应用程序性能不佳。例如， higher-than-usual许多`200`成功值可能会被标记为异常。在这种情况下，您可以考虑抑制这些不表示问题的异常。

 **被屏蔽的敏感数据会发生什么情况？** 

日志事件中被屏蔽为敏感数据的任何部分都不会进行异常扫描。有关屏蔽敏感数据的更多信息，请参阅[通过屏蔽帮助保护敏感的日志数据](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/mask-sensitive-log-data.html)。