筛选 - Amazon CloudWatch Logs

筛选

使用 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

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

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