筛选 - Amazon CloudWatch 日志

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

筛选

使用 filter 获取与一个或多个条件匹配的日志事件。

示例:使用一个条件筛选日志事件

该代码片段显示了一个查询示例,其将返回 range 的值大于 3000 的所有日志事件。该查询将结果限制为 20 个日志事件,并按 @timestamp 和降序对日志事件进行排序。

fields @timestamp, @message | filter (range>3000) | sort @timestamp desc | limit 20

示例:使用多个条件筛选日志事件

您可以使用关键字 andor 组合多个条件。

该代码片段显示了一个查询示例,其将返回 range 的值大于 3000 以及 accountId 的值等于 123456789012 的日志事件。该查询将结果限制为 20 个日志事件,并按 @timestamp 和降序对日志事件进行排序。

fields @timestamp, @message | filter (range>3000 and accountId=123456789012) | sort @timestamp desc | limit 20

索引字段和筛选器命令

如果您为日志组创建了字段索引,则可以利用这些字段索引来提高filter查询效率并减少扫描量。例如,假设您已经为创建了字段索引requestId。然后,针对该日志组的任何 CloudWatch Logs Insights 查询,如果这些查询包含filter requestId = valuefilter requestId IN [value, value, ...]将尝试跳过处理已知不包含索引字段的日志事件。通过尝试仅扫描已知包含该索引字段的日志事件,可以减少扫描量并加快查询速度。

有关字段索引及其创建方法的更多信息,请参阅创建字段索引以提高查询性能并减少扫描量

重要

只有带有filter fieldName =...和的查询filter fieldName IN...才能受益于字段索引的改进。带有的查询filter fieldName like不使用索引,并且始终扫描所选日志组中的所有日志事件。

示例:使用索引查找与特定请求 ID 相关的日志事件

此示例假设您已在上创建了字段索引requestId。对于使用此字段索引的日志组,该查询将利用字段索引尝试扫描最少量的日志事件,以查找值为的事件 requestId 123456

fields @timestamp, @message | filter requestId = "1234656" | limit 20

筛选命令中的匹配项和正则表达式

筛选条件支持使用正则表达式。您可以使用以下比较运算符(=!=<<=>>=)和布尔运算符(andornot)。

您可以使用关键字 in 来测试集合成员资格并检查数组中的元素。要检查数组中的元素,请将该数组放在 in 之后。您可以将布尔运算符 notin 配合使用。您可以创建查询,它们使用 in 返回字段是字符串匹配项的录入事件。这些字段必须是完整字符串。例如,下面的代码片段显示了一个查询,它使用 in 返回字段 logGroup 是完整字符串 example_group 的录入事件。

fields @timestamp, @message | filter logGroup in ["example_group"]

您可以使用关键字短语 likenot like 以匹配子字符串。您可以使用正则表达式运算符 =~ 以匹配子字符串。要使用 likenot like 匹配子字符串,请将您要匹配的子字符串括在单引号或双引号中。您可以将正则表达式模式与 likenot like 配合使用。要使用正则表达式运算符匹配子字符串,请将您要匹配的子字符串括在正斜杠中。下面的示例包含多个代码片段,它们展示您如何能够使用 filter 命令匹配子字符串。

示例:匹配子字符串

以下示例将返回 f1 包含单词 Exception 的录入事件。所有三个示例都区分大小写。

第一个示例使用 like 匹配子字符串。

fields f1, f2, f3 | filter f1 like "Exception"

第二个示例使用 like 和正则表达式模式匹配子字符串。

fields f1, f2, f3 | filter f1 like /Exception/

第三个示例使用正则表达式匹配子字符串。

fields f1, f2, f3 | filter f1 =~ /Exception/

示例:使用通配符匹配子字符串

您可以使用句点符号 (.) 作为正则表达式中的通配符来匹配子字符串。在以下示例中,查询返回 f1 的值以字符串 ServiceLog 开头的匹配项。

fields f1, f2, f3 | filter f1 like /ServiceLog./

您可以在句点符号 (.*) 之后放置星号,以创建一个返回尽可能多的匹配项的贪婪量词。例如,以下查询将返回 f1 的值不仅以字符串 ServiceLog 开头并且还包括字符串 ServiceLog 的匹配项。

fields f1, f2, f3 | filter f1 like /ServiceLog.*/

可能的匹配项可以采用以下格式:

  • ServiceLogSampleApiLogGroup

  • SampleApiLogGroupServiceLog

示例:从匹配项中排除子字符串

下面的示例将显示一个查询,它将返回 f1 不包含单词 Exception 的多个录入事件。此示例区分大小写。

fields f1, f2, f3 | filter f1 not like "Exception"

示例:使用不区分大小写的模式匹配子字符串

您可以使用 like 和正则表达式匹配不区分大小写的子字符串。在您要匹配的子字符串前放置以下参数 (?i)。下面的示例将显示一个查询,它将返回 f1 包含单词 Exceptionexception 的多个录入事件。

fields f1, f2, f3 | filter f1 like /(?i)Exception/