模式分析 - 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

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

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

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

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

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

模式分析入门

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

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

开始在 Log CloudWatch s Insights 中进行模式分析
  1. 打开 CloudWatch 控制台,网址为 https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,选择日志、日志、见解

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

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

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

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

    您可以在 5 分钟和 30 分钟间隔、1 小时、3 小时和 12 小时间隔或自定义时间范围之间进行选择。

  6. 选择 “运行查询” 以开始查询。

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

  7. 选择 “图” 选项卡。

  8. 现在,该表显示了在查询中找到的模式。由于查询中不包含该pattern命令,因此此选项卡仅显示在 “日志” 选项卡的表中显示的 1000 个日志事件中发现的模式。

    对于每种模式,都会显示以下信息:

    • 模式,每个动态令牌都显示为<*>

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

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

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

      • 如果模式中包含 “错误” 一词,则出错

      • 如果模式包含 “” 一词但不包含错误,则发出警告。

      • 如果模式不包含 “警告” 或 “错误”,则为@@ 信息

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

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

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

    查询完成后,“日志” 选项卡中没有任何结果。但是,根据查询的日志事件总数,“模式” 选项卡列出的模式数量可能更多。

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

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

    • 模式。在模式中选择一个代币来分析该代币的值。

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

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

    • 标记值选项卡会显示所选动态令牌的值(如果您选择了动态标记)。

      注意

      每个令牌最多捕获 10 个令牌值。代币数量可能不精确。 CloudWatch 日志使用概率计数器来生成代币数量,而不是绝对值。

    • 相关模式” 选项卡显示经常出现的其他模式,这些模式与您正在检查的模式几乎同时发生。例如,如果一条ERROR消息的模式通常伴随着另一个标记为其他详细信息的日志事件,则此处会显示该模式。INFO

有关模式命令的详细信息

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

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

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

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

  • 可以在filter命令前添加该pattern命令,以便仅将经过筛选的日志事件集用作模式分析的输入。

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

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