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

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

模式分析

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 Logs 异常检测器和比较功能。有关更多信息,请参阅日志异常检测与之前的时间范围进行比较(差异)

开始使用模式分析

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

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

开始使用 Lo CloudWatch gs 中的模式分析
  1. 打开 CloudWatch 控制台,网址为https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,依次选择日志Logs Insights

    Logs Insights(日志洞察)页面,查询编辑器包含一个默认查询,它将返回 20 个最近的日志事件。

  3. 删除查询框中的 | limit 20 行,使得查询如下所示:

    fields @timestamp, @message, @logStream, @log | sort @timestamp desc
  4. 选择日志组下拉菜单中,选择要查询的一个或多个日志组。

  5. (可选)使用时间间隔选择器选择要查询的时间段。

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

  6. 选择运行查询以启动查询。

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

  7. 选择模式选项卡。

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

    对于每个模式,将显示下面的信息:

    • 模式,每个动态令牌显示为 <string-number>string是令牌所代表的数据类型的描述。number显示了与其他动态令牌相比,此令牌在模式中的出现位置。

    • 事件计数,这是该模式在查询的日志事件中出现的次数。选择事件计数列标题可按频率对模式进行排序。

    • 事件比率,即查询的日志事件中包含此模式的百分比。

    • 严重性类型,将是以下项之一:

      • 如果模式包含错误一词,则为 ERROR

      • 如果模式包含警告一词,但不包含错误,则为 WARN

      • 如果模式不包含警告错误,则为 INFO

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

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

    fields @timestamp, @message, @logStream, @log | pattern @message
  10. 选择运行查询

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

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

    将出现模式检查窗格并显示以下内容:

    • 模式。选择模式内的一个令牌来分析该令牌的值。

    • 直方图,显示查询的时间范围内模式的出现次数。这可以帮助您识别有趣的趋势,例如某种模式的出现突然增加。

    • 日志示例选项卡显示一些与所选模式匹配的日志事件。

    • 如果您已选择动态令牌,则令牌值选项卡会显示所选动态令牌的值。

      注意

      每个令牌最多可捕获 10 个令牌值。令牌计数可能不准确。 CloudWatch Logs 使用概率计数器来生成令牌计数,而不是绝对值。

    • 相关模式选项卡显示与您正在检查的模式几乎同时频繁出现的其他模式。例如,如果 ERROR 消息的模式通常伴随另一个标记为 INFO 并带有附加详细信息的日志事件,则此处显示该模式。

有关 pattern 命令的详细信息

本节包含有关 pattern 命令及其用途的更多详细信息。

  • 在上一个教程中,我们在添加 pattern 时删除了 sort 命令,因为如果查询在 sort 命令之后包含 pattern 命令,则查询无效。在 sort 排序之前包含 pattern 是有效的。

    有关 pattern 语法的更多详细信息,请参阅 模式

  • 当在查询中使用 pattern 时,@message 必须是 pattern 命令中选择的字段之一。

  • 可以在 pattern 命令之前包含 filter 命令,以便仅将筛选后的日志事件集用作模式分析的输入。

  • 要查看特定字段(例如从 parse 命令派生的字段)的模式结果,请使用 pattern @fieldname

  • 具有非日志输出的查询(例如使用 stats 命令的查询)不会返回模式结果。