

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

# 模式分析
<a name="CWL_AnalyzeLogData_Patterns"></a>

CloudWatch 当您查询日志时，Logs Insights 使用机器学习算法来查找*模式*。模式是在日志字段中重复出现的共有的文本结构。查看查询结果时，可以选择 “**模式**” 选项卡，查看 CloudWatch Logs 根据结果样本找到的模式。或者，您可以将 `pattern` 命令附加到查询，以分析整组匹配日志事件中的模式。

模式对于分析大型日志集很有用，因为大量日志事件通常可压缩成几个模式。

考虑以下三个日志事件示例。

```
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
```

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

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

模式内的字段称为*令牌*。模式内变化的字段（如请求 ID 或时间戳）是*动态令牌*。每个动态令牌都用 `<string-number>` 表示。*string*是对令牌所代表的数据类型的描述。*number*显示了与其他动态代币相比，该代币在模式中的显示位置。

动态令牌的常见示例包括错误代码、时间戳和请求 IDs。*令牌值*代表动态令牌的特定值。例如，如果动态令牌表示 HTTP 错误代码，则令牌值可能是 `501`。

模式检测还用于 CloudWatch 日志异常检测器和比较功能。有关更多信息，请参阅[日志异常检测](LogsAnomalyDetection.md)和[与之前的时间范围进行比较（差异）](CWL_AnalyzeLogData_Compare.md)。

## 开始使用模式分析
<a name="CWL_AnalyzeLogData_Patterns-GetStarted"></a>

模式检测将在任何 Logs Insight CloudWatch s 查询中自动执行。不包含 `pattern` 命令的查询会同时在结果中获取日志事件和模式。

如果在查询中包含 `pattern` 命令，则会对整个匹配的日志事件集执行模式分析。这会为您提供更准确的模式结果，但是当您使用 `pattern` 命令时不会返回原始日志事件。当查询不包括 `pattern` 时，模式结果将基于返回的前 1000 个日志事件，或者基于您在查询中使用的限制值。如果查询中包括 `pattern`，则**模式**选项卡中显示的结果将来自查询匹配的所有日志事件。

**要开始在 Log CloudWatch s Insights 中进行模式分析**

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，依次选择**日志**、**Logs Insights**。

   在 **Logs Insights**（日志洞察）页面，查询编辑器包含一个默认查询，它将返回 20 个最近的日志事件。

1. 删除查询框中的 `| limit 20` 行，使得查询如下所示：

   ```
   fields @timestamp, @message, @logStream, @log
   | sort @timestamp desc
   ```

1. 在**选择日志组**下拉菜单中，选择要查询的一个或多个日志组。

1. （可选）使用时间间隔选择器选择要查询的时间段。

   您可以选择 5 分钟到 30 分钟的间隔；1 小时、3 小时和 12 小时间隔；或者自定义时间范围。

1. 选择**运行查询**以启动查询。

   查询运行完毕后，**日志**选项卡将显示查询返回的日志事件表。表上方会显示一条关于有多少条记录与查询匹配的消息，类似于**显示匹配的 10,000 条记录，共 71,101 条**。

1. 选择**模式**选项卡。

1. 该表现在会显示在查询中发现的模式。由于查询不包括 `pattern` 命令，因此此选项卡仅显示在**日志**选项卡的表中显示的 10,000 个日志事件中发现的模式。

   对于每个模式，将显示下面的信息：
   + **模式**，每个动态令牌显示为 `<string-number>`。*string*是对令牌所代表的数据类型的描述。*number*显示了与其他动态代币相比，该代币在模式中的显示位置。
   + **事件计数**，这是该模式在查询的日志事件中出现的次数。选择**事件计数**列标题可按频率对模式进行排序。
   + **事件比率**，即查询的日志事件中包含此模式的百分比。
   + **严重性类型**，将是以下项之一：
     + 如果模式包含**错误**一词，则为 **ERROR**。
     + 如果模式包含**警告**一词，但不包含**错误**，则为 **WARN**。
     + 如果模式不包含**警告**或**错误**，则为 **INFO**。

     选择**严重性信息**列标题可按严重性对模式进行排序。

1. 现在更改查询。将查询中的 `| sort @timestamp desc` 行替换为 `| pattern @message`，以便完整查询如下：

   ```
   fields @timestamp, @message, @logStream, @log
   | pattern @message
   ```

1. 选择**运行查询**。

   查询完成后，**日志**选项卡中没有结果。但是，**模式**选项卡可能会列出更多模式，具体取决于查询的日志事件总数。

1. 无论您是否在查询中包括 `pattern`，都可以进一步检查查询返回的模式。为此，请在**检查**列中选择其中一个模式的图标。

   将出现**模式检查**窗格并显示以下内容：
   + **模式**。选择模式内的一个令牌来分析该令牌的值。
   + 直方图，显示查询的时间范围内模式的出现次数。这可以帮助您识别有趣的趋势，例如某种模式的出现突然增加。
   + **日志示例**选项卡显示一些与所选模式匹配的日志事件。
   + 如果您已选择动态令牌，则**令牌值**选项卡会显示所选动态令牌的值。
**注意**  
每个令牌最多可捕获 10 个令牌值。代币数量可能不精确。 CloudWatch 日志使用概率计数器来生成代币数量，而不是绝对值。
   + **相关模式**选项卡显示与您正在检查的模式几乎同时频繁出现的其他模式。例如，如果 `ERROR` 消息的模式通常伴随另一个标记为 `INFO` 并带有附加详细信息的日志事件，则此处显示该模式。

## 有关 pattern 命令的详细信息
<a name="CWL_AnalyzeLogData_Patterns-Details"></a>

本节包含有关 `pattern` 命令及其用途的更多详细信息。
+ 在上一个教程中，我们在添加 `pattern` 时删除了 `sort` 命令，因为如果查询在 `sort` 命令之后包含 `pattern` 命令，则查询无效。在 `sort` 排序之前包含 `pattern` 是有效的。

   有关 `pattern` 语法的更多详细信息，请参阅 [模式](CWL_QuerySyntax-Pattern.md)。
+ 当在查询中使用 `pattern` 时，`@message` 必须是 `pattern` 命令中选择的字段之一。
+ 可以在 `pattern` 命令之前包含 `filter` 命令，以便仅将筛选后的日志事件集用作模式分析的输入。
+ 要查看特定字段（例如从 `parse` 命令派生的字段）的模式结果，请使用 `pattern @fieldname`。
+ 具有非日志输出的查询（例如使用 `stats` 命令的查询）不会返回模式结果。

