本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
筛选
使用 filter
获取与一个或多个条件匹配的日志事件。
示例:使用一个条件筛选日志事件
该代码片段显示了一个查询示例,其将返回 range
的值大于 3000 的所有日志事件。该查询将结果限制为 20 个日志事件,并按 @timestamp
和降序对日志事件进行排序。
fields @timestamp, @message | filter (range>3000) | sort @timestamp desc | limit 20
示例:使用多个条件筛选日志事件
您可以使用关键字 and
和 or
组合多个条件。
该代码片段显示了一个查询示例,其将返回 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 =
或value
filter requestId IN [
将尝试跳过处理已知不包含索引字段的日志事件。通过尝试仅扫描已知包含该索引字段的日志事件,可以减少扫描量并加快查询速度。value
, value
, ...]
有关字段索引及其创建方法的更多信息,请参阅创建字段索引以提高查询性能并减少扫描量。
重要
只有带有filter
和的查询fieldName
=...filter
才能受益于字段索引的改进。带有的查询fieldName
IN...filter
不使用索引,并且始终扫描所选日志组中的所有日志事件。fieldName
like
示例:使用索引查找与特定请求 ID 相关的日志事件
此示例假设您已在上创建了字段索引requestId
。对于使用此字段索引的日志组,该查询将利用字段索引尝试扫描最少量的日志事件,以查找值为的事件 requestId
123456
fields @timestamp, @message | filter requestId = "1234656" | limit 20
筛选命令中的匹配项和正则表达式
筛选条件支持使用正则表达式。您可以使用以下比较运算符(=
、!=
、<
、<=
、>
、>=
)和布尔运算符(and
、or
和 not
)。
您可以使用关键字 in
来测试集合成员资格并检查数组中的元素。要检查数组中的元素,请将该数组放在 in
之后。您可以将布尔运算符 not
与 in
配合使用。您可以创建查询,它们使用 in
返回字段是字符串匹配项的录入事件。这些字段必须是完整字符串。例如,下面的代码片段显示了一个查询,它使用 in
返回字段 logGroup
是完整字符串 example_group
的录入事件。
fields @timestamp, @message | filter logGroup in ["example_group"]
您可以使用关键字短语 like
和 not like
以匹配子字符串。您可以使用正则表达式运算符 =~
以匹配子字符串。要使用 like
和 not like
匹配子字符串,请将您要匹配的子字符串括在单引号或双引号中。您可以将正则表达式模式与 like
和 not 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
包含单词 Exception 或 exception 的多个录入事件。
fields f1, f2, f3 | filter f1 like /(?i)Exception/