筛选条件和p阿特恩syntax - Amazon CloudWatch Logs
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

筛选条件和p阿特恩syntax

您可以使用指标筛选条件在日志事件中搜索和匹配字词、短语或值。当指标筛选器在日志事件中找到其中一个字词、短语或值时,您可以累加 CloudWatch 指标的值。例如,您可以创建一个指标筛选条件以在日志事件中搜索 ERROR 并对这个词的出现次数进行计数。

您还可以选择为量度指定维度和单位。例如,如果您的指标计数错误在日志事件中,您还可以设置ErrorCode作为维度,以便您不仅可以查看包含错误但也可以看到报告错误代码的过滤数据。

注意

如果指定单位,请确保在创建筛选条件时指定正确的单位。稍后更改筛选条件的单位将不起作用。

指标筛选条件还将从空格分隔的日志事件中提取数字值,例如 Web 请求的延迟。在这些示例中,您可以按照从日志中提取的实际数字值来累加指标值。

您可以使用条件运算符和通配符创建精确匹配。在创建指标筛选条件之前,您可以在 CloudWatch 控制台中测试搜索模式。以下各个部分更为详细地描述了指标筛选条件语法。

匹配t中的 ERMSlOGevents

要搜索日志事件中的字词,可将该字词用作指标筛选条件模式。您可以在指标筛选条件模式中指定多个字词,但所有字词都必须出现在日志事件中才算是匹配。指标筛选条件区分大小写。

包括字母数字或下划线之外其他字符的指标筛选条件字词必须放在双引号 ("") 内。

要排除某个字词,可在该字词前使用减号 (-)。

示例 1:匹配所有内容

筛选模式 "" 与所有日志事件匹配。

示例 2:单项术语

“ERROR”筛选条件模式匹配包含此字词的日志事件消息,例如以下内容:

  • [ERROR] A fatal exception has occurred

  • 退出时出现的错误代码:–1

示例 3:包括一个字词,同时排除一个字词

在上面的示例中,如果您将筛选条件模式更改为“ERROR”-“Exiting”,将会排除日志事件消息“Exiting with ERRORCODE: -1”。

示例 4:多项术语

“ERROR Exception”筛选条件模式匹配同时包含这两个字词的日志事件消息,例如以下内容:

  • [ERROR] Caught IllegalArgumentException

  • [ERROR] Unhandled Exception

“Failed to process the request”筛选条件模式匹配包含所有这些字词的日志事件消息,例如以下内容:

  • [WARN] Failed to process the request

  • [错误] 无法继续:无法处理请求

或者p阿特恩matching

您可以使用 OR 模式匹配在基于文本的筛选条件中匹配术语。OR 用问号表示,例如 ?term

观察下面的三个日志事件示例。ERROR 与示例 1 和 2 匹配。?ERROR ?WARN 与示例 1、2 和 3 匹配,因为它们都包含单词 ERROR 或单词 WARN。ERROR WARN 仅与示例 1 匹配,因为它是唯一一个同时包含这两个单词的示例。ERROR -WARN 与示例 2 匹配,因为它与一个包含 ERROR 但不包含 WARN 的字符串匹配。

  1. ERROR WARN message

  2. ERROR message

  3. WARN message

您可以在以空格分隔的筛选条件中使用 OR 模式匹配来匹配术语。使用空格分隔的筛选条件,w1 表示日志事件中的第一个单词,w2 表示第二个单词,依此类推。对于以下示例模式,[W1= Error, w2] 匹配模式 1 和 2,因为错误是第一个字词,[W1= 错误 || W1= 警告,w2] 匹配模式 1、2 和 3。 [W1! = 错误 (&W1)! = 警告, w2] 不匹配任何行,因为它们都包含错误或警告。

  1. ERROR WARN 消息

  2. ERROR 消息

  3. WARN 消息

您可以在 JSON 筛选条件中使用 OR 模式匹配来匹配术语。对于下面的示例模式,{$.foo = bar} 与模式 1 匹配,{$.foo = baz } 与模式 2 匹配,{$.foo = bar || $.foo = baz } 与模式 1 和 2 匹配。

  1. {"foo": "bar"}

  2. {"foo": "baz"}

匹配tJSON 中的 ERRlOGevents

您可以从 JSON 日志事件中提取值。要从 JSON 日志事件中提取值,您需要创建基于字符串的指标筛选条件。不支持包含科学表示法的字符串。JSON 日志事件数据中的项目必须与指标筛选条件完全匹配。您可能要在 JSON 日志事件中创建指标筛选条件以便指示以下情况:

  • 特定事件发生。例如 eventName 是“UpdateTrail”。

  • IP 处于已知子网外部。例如,sourceIPAddress 不在某个已知子网范围内。

  • 满足两个或更多其他条件的组合。例如,eventName 是 "UpdateTrail",并且 recipientAccountId 是 123456789012。

使用m电子f以便e弯曲v来自 JSON 的 alueslOGevents

您可以使用指标筛选条件从 JSON 日志事件中提取值。指标筛选条件检查传入日志,并在筛选条件找到日志数据中的匹配时修改数字值。创建指标筛选条件时,您可以每次在日志中找到匹配文本时累加计数,或者可以从日志中提取数值并使用这些值来累加指标值。

匹配的 JSONtErmsu唱m电子filters

JSON 日志事件的指标筛选语法使用以下格式:

{ SELECTOR EQUALITY_OPERATOR STRING }

指标筛选条件必须包含在大括号 { } 内,以指示这是 JSON 表达式。指标筛选条件包含以下部分:

SELECTOR

指定要检查的 JSON 属性。属性选择器始终以美元符号 ($) 开头,这表示 JSON 的根。属性选择器是字母数字字符串,它还支持“-”和“_”字符。数组元素通过 [NUMBER] 语法表示,必须跟在属性之后。示例:$.eventId、$.users[0]、$.users[0].id、$.requestParameters.instanceId。

EQUALITY_OPERATOR

可以是 = 或 !=。

STRING

带或不带引号的字符串。您可以在搜索词中、之前或之后使用星号“*”通配符来匹配任何文本。例如,*Event 将与 PutEventGetEvent 匹配。Event* 将与 EventIdEventName 匹配。Ev*ent 只与实际字符串 Ev*ent 匹配。完全由字母数字字符组成的字符串无需引号。包含 unicode 和其他字符(如“@”、“$”、“\”等)的字符串必须包含在双引号内才有效。

JSONm电子f伊尔特examples

以下是一个 JSON 示例:

{ "eventType": "UpdateTrail", "sourceIPAddress": "111.111.111.111", "arrayKey": [ "value", "another value" ], "objectList": [ { "name": "a", "id": 1 }, { "name": "b", "id": 2 } ], "SomeObject": null, "ThisFlag": true }

以下筛选条件将匹配:

{ $.eventType = "UpdateTrail" }

针对事件类型是 UpdateTrail 的筛选条件。

{ $.sourceIPAddress != 123.123.* }

针对处于子网 123.123 前缀之外的 IP 地址的筛选条件。

{ $.arrayKey[0] = "value" }

针对 arrayKey 中的第一个条目是“value”的筛选条件。如果 arrayKey 不是数组,则为 false。

{ $.objectList[1].id = 2 }

针对 objectList 中的第二个条目的 id 属性 = 2 的筛选条件。如果 objectList 不是数组,则为 false。如果 objectList 中的项目不是对象或者没有 id 属性,则为 false。

{ $.SomeObject IS NULL }

针对 SomeObject 设置为 null 的筛选条件。仅当指定的对象为 null 时,此条件才成立。

{ $.SomeOtherObject NOT EXISTS }

针对 SomeOtherObject 不存在的筛选条件。仅当指定的对象在日志数据中不存在时,此条件才成立。

{ $.ThisFlag IS TRUE }

针对 ThisFlag 为 TRUE 的筛选条件。这也适用于看检查是否有 FALSE 值的布尔筛选条件。

JSONc欧磅conditions

您可以使用 OR (||) 和 AND (&&) 将多个条件合并为复合表达式。允许使用圆括号,语法遵循标准操作顺序 () > && > ||。

{ "user": { "id": 1, "email": "John.Stiles@example.com" }, "users": [ { "id": 2, "email": "John.Doe@example.com" }, { "id": 3, "email": "Jane.Doe@example.com" } ], "actions": [ "GET", "PUT", "DELETE" ], "coordinates": [ [0, 1, 2], [4, 5, 6], [7, 8, 9] ] }
Examples
{ ($.user.id = 1) && ($.users[0].email = "John.Doe@example.com") }

与以上 JSON 匹配。

{ ($.user.id = 2 && $.users[0].email = "nonmatch") || $.actions[2] = "GET" }

与以上 JSON 不匹配。

{ $.user.email = "John.Stiles@example.com" || $.coordinates[0][1] = nonmatch && $.actions[2] = nomatch }

与以上 JSON 匹配。

{ ($.user.email = "John.Stiles@example.com" || $.coordinates[0][1] = nonmatch) && $.actions[2] = nomatch }

与以上 JSON 不匹配。

JSONs特殊considerations

SELECTOR 必须指向 JSON 中的一个值节点 (字符串或数字)。如果它指向数组或对象,则不会应用筛选条件,因为日志格式与筛选条件不匹配。例如,{$.users = 1} 和 {$.users! = 1} 都无法与其中用户是数组的日志事件匹配:

{ "users": [1, 2, 3] }
数值comparisons

指标筛选条件语法支持数字比较的精确匹配。支持以下数字比较:<、>、>=、<=、=、!=

数字筛选条件的语法为

{ SELECTOR NUMERIC_OPERATOR NUMBER }

指标筛选条件必须包含在大括号 { } 内,以指示这是 JSON 表达式。指标筛选条件包含以下部分:

SELECTOR

指定要检查的 JSON 属性。属性选择器始终以美元符号 ($) 开头,这表示 JSON 的根。属性选择器是字母数字字符串,它还支持“-”和“_”字符。数组元素通过 [NUMBER] 语法表示,必须跟在属性之后。示例:$.latency、$.numbers[0]、$.errorCode、$.processes[4].averageRuntime。

NUMERIC_OPERATOR

可能是以下值之一:=、!=、<、>、<= 或 >=。

NUMBER

带可选 + 或 - 符号的整数、带可选 + 或 - 符号的小数或采用科学表示法的数字 (带可选 + 或 - 符号的整数或小数,后跟“e”,后跟带可选 + 或 - 符号的整数)。

示例:

{ $.latency >= 500 } { $.numbers[0] < 10e3 } { $.numbers[0] < 10e-3 } { $.processes[4].averageRuntime <= 55.5 } { $.errorCode = 400 } { $.errorCode != 500 } { $.latency > +1000 }

使用m电子f以便e弯曲v来自的 aluess起搏-d有限lOGevents

您可以使用指标筛选条件从空格分隔的日志事件中提取值。将一对方括号 [] 或两个双引号 ("") 之间的字符视为单个字段。例如:

127.0.0.1 - frank [10/Oct/2000:13:25:15 -0700] "GET /apache_pb.gif HTTP/1.0" 200 1534 127.0.0.1 - frank [10/Oct/2000:13:35:22 -0700] "GET /apache_pb.gif HTTP/1.0" 500 5324 127.0.0.1 - frank [10/Oct/2000:13:50:35 -0700] "GET /apache_pb.gif HTTP/1.0" 200 4355

要指定解析空格分隔的事件的指标筛选条件模式,指标筛选条件模式必须使用名称指定字段,以逗号隔开,且整个模式包括在方括号中。例如:[ip, user, username, timestamp, request, status_code, bytes]。

如果您不知道字段数,可以使用省略号 (…) 进行快速输入。例如:

[..., status_code, bytes] [ip, user, ..., status_code, bytes] [ip, user, ...]

您还可以对您的字段添加条件,以使只有满足所有条件的日志事件才能与筛选条件匹配。例如:

[ip, user, username, timestamp, request, status_code, bytes > 1000] [ip, user, username, timestamp, request, status_code = 200, bytes] [ip, user, username, timestamp, request, status_code = 4*, bytes] [ip, user, username, timestamp, request = *html*, status_code = 4*, bytes]

您可以使用 && 作为逻辑 AND 运算符,使用 || 作为逻辑 OR 运算符,如下例中所示。

[ip, user, username, timestamp, request, status_code = 4* && bytes > 1000] [ip, user, username, timestamp, request, status_code = 403 || status_code = 404, bytes]

CloudWatch Logs 支持字符串和数字条件字段。对于字符串字段,您可以将 = 或 != 运算符和星号 (*) 一起使用。

对于数字字段,您可以使用 >、<、>=、<=、= 和 != 运算符。

如果您使用的是以空格分隔的筛选条件,提取的域将映射到以空格分隔的域的名称 (如筛选条件中所示),再映射到所有这些域的值。如果您使用的不是以空间分隔的筛选条件,这将为空。

示例筛选条件:

[..., request=*.html*, status_code=4*,]

筛选条件的示例日志事件:

127.0.0.1 - frank [10/Oct/2000:13:25:15 -0700] \"GET /index.html HTTP/1.0\" 404 1534

日志事件和筛选条件模式的提取的域:

{ "$status_code": "404", "$request": "GET /products/index.html HTTP/1.0", "$7": "1534", "$4": "10/Oct/2000:13:25:15 -0700", "$3": "frank", "$2": "-", "$1": "127.0.0.1" }

设置h其中m电子v阿鲁c绞线w母鸡m自动翻译arefound

指标筛选器在日志事件中找到一个匹配字词、短语或值时,它会按照您为 “Metric Value” 指定的数量累加 CloudWatch 指标中的计数。指标值每分钟汇总并报告。

如果在 1 分钟时间段内提取日志,但未找到任何匹配项,则报告为 Default Value 指定的值 (如果有)。不过,如果在 1 分钟时间段内未提取日志事件,则不会报告任何值。

指定 Default Value (即使该值为 0) 可帮助确保更频繁地报告数据,从而在未找到匹配项时帮助防止断点指标。

例如,假设有一个日志组,每分钟发布两条记录,并且“Metric Value”为 1,“Default Value”为 0。如果在第一分钟内的两个日志记录中均找到了匹配项,则该分钟的指标值为 2。如果第二分钟内发布的日志记录中没有匹配项,则为两个日志记录均使用“Default Value”(即 0),该分钟的指标值为 0。

如果您未指定“Default Value”,则对于未找到模式匹配的任意时间段,不报告任何数据。

如果将维度分配给由指标筛选器创建的指标,则无法为该指标分配默认值。

发布n数字valuesf在lOGentries

您也可以使用指标筛选条件根据在日志中找到的数值来发布值,而不是计算在日志中找到的匹配项的数目。以下步骤介绍了如何使用在 JSON 请求 metricFilter: { $.latency = * } metricValue: $.latency 中发现的延迟发布指标。

使用 JSON 请求中的延迟发布指标

  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,选择 Log groups (日志组)

  3. 选择 ActionsCreate metric filter (创建指标筛选条件)

  4. 对于 Filter Pattern (筛选条件模式),键入 { $.latency = * },然后选择 Next (下一步)

  5. Metric Name 键入 myMetric

  6. 对于 Metric Value (指标值),输入 $.latency

  7. 对于 Default Value (默认值),输入 0,然后选择 Next (下一步)。指定默认值可确保即使在没有日志事件与筛选条件匹配的时段内也会报告数据。这样可以防止当日志被提取但与筛选条件不匹配时出现错误或丢失指标。

  8. 选择 Create metric filter (创建指标筛选条件)

以下日志事件会在过滤器创建之后将值 50 发布到指标 myMetric

{ "latency": 50, "requestType": "GET" }

使用您的指标发布维度

当您发布从 JSON 日志事件或空格分隔的日志事件中找到的值生成的指标时,还可以使用该指标发布维度。您最多可以使用指标筛选器生成的量度发布三个维度。有关维度的更多信息,请参阅维度.

警告

从日志事件提取的指标按自定义指标收费。要防止意外的高费用,请不要指定高基数字段,例如IPAddress或者requestID作为维度。为维度找到的每个不同值都被视为单独的指标,并将费用作为单独的自定义量度进行计算。

为了帮助防止意外高额费用,如果指标筛选器为您在一定时间内指定的维度生成 1000 个不同的名称/值对,亚马逊可能会禁用指标筛选器。

您也可以设置账单警报,以在费用高于预期时提醒您。有关更多信息,请参阅 。创建账单警报以监控估计的Amazon收费.

使用 JSON 日志事件中的指标发布维度

要了解如何为 JSON 日志事件指定指标过滤器的维度,我们首先查看过滤器的示例过滤器和示例日志事件。

示例筛选条件:

{ $.eventType = "*" && $.sourceIPAddress != 123.123.*}

日志事件示例:

{"eventType": "UpdateTrail", "sourceIPAddress": "111.111.111.111", "arrayKey": [ "value", "another value" ], "objectList": [ {"name": "a", "id": 1 }, {"name": "b", "id": 2 } ], "SomeObject": null, "ThisFlag": true }

每当日志事件包含筛选器中列出的任一字段时,此示例筛选器都会递增量度。

[ $.eventType, $.sourceIPAddress ]

创建指标筛选器时,可以将筛选器中的任何字段指定为维度。例如,要将事件类型设置为维度,请在设置指标筛选器时将以下内容指定为维度。

"EventType" : $.eventType

此指标具有名为EventType,并且维度的值是在日志事件中找到的事件类型,例如UpdateTrail在此示例日志事件中。

使用空格分隔的日志事件中的指标发布维度

要了解如何为以空格分隔的日志事件指定衡量指标筛选器的维度,我们首先查看筛选器的示例过滤器和示例日志事件。

示例筛选条件:

[ip, server, username, timestamp, request, status_code, bytes > 1000]

日志事件示例:

127.0.0.1 Prod frank [10/Oct/2000:13:25:15 -0700] \"GET /index.html HTTP/1.0\" 404 1534

每当日志事件包含筛选器中列出的任何字段时,此示例筛选器都会递增量度。对于以前显示的示例日志事件,筛选器会找到以下字段和值。

{ "$status_code": "404", "$request": "GET /products/index.html HTTP/1.0", "$bytes": "1534", "$timestamp": "10/Oct/2000:13:25:15 -0700", "$username": "frank", "$server": "Prod", "$ip": "127.0.0.1" }

创建指标筛选器时,您可以将这些字段中的任何一个指定为维度。例如,要将服务器名称设置为维度,您需要在设置指标筛选器时指定以下维度。

"Server" : $server

此指标具有名为Server,并且维度的值是在日志事件中找到的服务器名称,例如Prod在此示例日志事件中。