Contributor Insights 规则语法 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Contributor Insights 规则语法

此部分说明了 Contributor Insights 规则的语法。仅当您通过输入 JSON 块来创建规则时使用此语法。如果您使用此向导创建规则,则无需知道语法。有关使用此向导创建规则的更多信息,请参阅 创建 Contributor Insights 规则

日志事件字段名称和值的所有规则匹配都区分大小写。

以下示例说明了 JSON 日志的语法。

{ "Schema": { "Name": "CloudWatchLogRule", "Version": 1 }, "LogGroupNames": [ "API-Gateway-Access-Logs*", "Log-group-name2" ], "LogFormat": "JSON", "Contribution": { "Keys": [ "$.ip" ], "ValueOf": "$.requestBytes", "Filters": [ { "Match": "$.httpMethod", "In": [ "PUT" ] } ] }, "AggregateOn": "Sum" }
Contributor Insights 规则中的字段
架构

用于分析 CloudWatch Logs 数据 Schema 的规则的值必须始终为 {"Name": "CloudWatchLogRule", "Version": 1}

LogGroupNames

字符串数组。对于数组中的每个元素,您可以选择在字符串末尾使用 * 以包含名称以该前缀开头的所有日志组。

将通配符用于日志组名称时要小心。您需要为与规则匹配的每个日志事件支付费用。如果不小心搜索了超出预期数量的日志组,可能会产生意外费用。有关更多信息,请参阅 Amazon CloudWatch 定价

LogGroupARN

如果您在 CloudWatch 跨账户可观测性监控账户中创建此规则,则可以使用 LogGroupARNs 在与该监控账户关联的源账户中指定日志组,然后指定该监控账户本身的日志组。您必须在规则中指定 LogGroupNamesLogGroupARNs,但不能同时指定两者。

LogGroupARNs 是一个字符串数组。对于该数组中的每个元素,在某些情况下可以选择使用 * 作为通配符。例如,您可以指定 arn:aws:logs:us-west-1:*:log-group/MyLogGroupName2,以便在美国西部(北加利福尼亚)地区的所有源账户和该监控账户中指定名为 MyLogGroupName2 的日志组。您还可以指定 arn:aws:logs:us-west-1:111122223333:log-group/GroupNamePrefix*,以便在 111122223333 中指定美国西部(北加利福尼亚)所有名称以 GroupNamePrefix 开头的日志组。

您不能将部分 Amazon 账户 ID 指定为带通配符的前缀。

将通配符用于日志组 ARN 时要小心。您需要为与规则匹配的每个日志事件支付费用。如果不小心搜索了超出预期数量的日志组,可能会产生意外费用。有关更多信息,请参阅 Amazon CloudWatch 定价

LogFormat

有效值为 JSONCLF

贡献

此对象包含一个具有最多个四个成员的 Keys 数组、(可选)一个 ValueOf、(可选)一个具有最多四个 Filters 的数组。

一个最多具有四个日志字段的数组,这些字段用作维度以对贡献者进行分类。如果您输入多个键,则这些键的每个唯一值组合将被计为一个独特贡献者。必须使用 JSON 属性格式表示法指定字段。

ValueOf

(可选)仅当您指定 Sum 作为 AggregateOn 的值时指定此选项。ValueOf 指定具有数值的日志字段。在此类规则中,贡献者按其在此字段中的值的和来进行排名,而不是按其在日志条目中的出现次数进行排名。例如,如果您希望按贡献者在一段时间内的 BytesSent 总数对其进行排名,则需要将 ValueOf 设置为 BytesSent,并为 AggregateOn 指定 Sum

筛选条件

(可选)指定具有最多四个筛选条件的数组可缩小报告中包含的日志事件的范围。如果您指定多个筛选条件,则 Contributor Insights 会使用逻辑 AND 运算符对它们进行评估。您可以使用此选项来筛掉搜索中不相关的日志事件,也可以使用它选择单个贡献者来分析其行为。

数组中的每个成员必须包含一个 Match 字段和一个指示要使用的匹配运算符类型的字段。

Match 字段指定要在筛选条件中评估的日志字段。使用 JSON 属性格式表示法指定日志字段。

匹配的运算符字段必须是下列项目之一:InNotInStartsWithGreaterThanLessThanEqualToNotEqualToIsPresent。如果运算符字段为 InNotInStartsWith,则它后跟一个要检查的字符串值数组。Contributor Insights 使用 OR 运算符评估字符串值的数组。该数组可以包含最多 10 个字符串值。

如果运算符字段为 GreaterThanLessThanEqualToNotEqualTo,则它后跟要比较的单个数值。

如果运算符字段为 IsPresent,则它后跟 truefalse。此运算符将根据日志事件中是否存在指定的日志字段来匹配日志事件。isPresent 仅使用 JSON 属性的叶节点中的值。例如,查找 c-count 的匹配项的筛选条件不会返回具有值 details.c-count.c1 的日志事件。

有关四个筛选条件示例,请参阅以下内容:

{"Match": "$.httpMethod", "In": [ "PUT", ] } {"Match": "$.StatusCode", "EqualTo": 200 } {"Match": "$.BytesReceived", "GreaterThan": 10000} {"Match": "$.eventSource", "StartsWith": [ "ec2", "ecs" ] }
AggregateOn

有效值为 CountSum。指定是基于出现次数,还是基于 ValueOf 字段中指定的字段值的总和来聚合报告。

JSON 属性格式表示法

KeysValueOfMatch 字段遵循带点符号的 JSON 属性格式,其中 $ 表示 JSON 对象的根。这之后是句点,然后是带子属性名称的字母数字字符串。支持多个属性级别。

字符串的第一个字符只能是 A-Z 或 a-z。字符串的后续字符可以是 A-Z、a-z 或 0-9。

以下列表显示了 JSON 属性格式的有效示例:

$.userAgent $.endpoints[0] $.users[1].name $.requestParameters.instanceId

CLF 日志规则中的其他字段

常用日志格式 (CLF) 日志事件不像 JSON 那样具有字段的名称。要提供用于 Contributor Insights 规则的字段,CLF 日志事件可被视为具有从 1 开始的索引的数组。您可以将第一个字段指定为 "1",将第二个字段指定为 "2",以此类推。

要使 CLF 日志的规则更易于读取,可以使用 Fields。这可让您为 CLF 字段位置提供命名别名。例如,您可以指定位置“4”为 IP 地址。指定后,IpAddress 可用作规则中的 KeysValueOfFilters 中的属性。

以下是使用 Fields 字段的 CLF 日志规则的示例。

{ "Schema": { "Name": "CloudWatchLogRule", "Version": 1 }, "LogGroupNames": [ "API-Gateway-Access-Logs*" ], "LogFormat": "CLF", "Fields": { "4": "IpAddress", "7": "StatusCode" }, "Contribution": { "Keys": [ "IpAddress" ], "Filters": [ { "Match": "StatusCode", "EqualTo": 200 } ] }, "AggregateOn": "Count" }