

# 使用 Contributor Insights 分析高基数数据


您可以使用 Contributor Insights 分析日志数据，并创建显示贡献者数据的时间序列。您可以查看有关前 N 个贡献者、独特贡献者总数及其使用情况的指标。这有助于您找到排名靠前的说话者，并了解影响系统性能的人员或内容。例如，您可以查找无效主机，确定最多的网络用户或查找产生最多错误的 URL。

您可以从 Scratch 构建规则，并且在使用 AWS 管理控制台 时，还可以使用 AWS 已创建的示例规则。规则定义要用于定义贡献者的日志字段，例如 `IpAddress`。还可以筛选日志数据来查找和分析各个贡献者的行为。

CloudWatch 还提供了内置规则，可用于分析来自其他 AWS 服务的指标。

所有规则都将实时分析传入数据。

如果您登录的账户在 CloudWatch 跨账户可观测性中设置为监控账户，则您可以在该监控账户中创建 Contributor Insights 规则，以分析源账户和该监控账户中的日志组。您还可以创建单个规则来分析多个账户中的日志组。有关更多信息，请参阅 [CloudWatch 跨账户可观测性](CloudWatch-Unified-Cross-Account.md)。

使用 Contributor Insights，需要为每个与规则匹配的日志事件付费。有关更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

**注意**  
只有当规则引用的数字值介于 -1e9 和 1e9 之间时，Contributor Insights 才会匹配日志条目。如果日志条目中的值超出此范围，Contributor Insights 会跳过该日志条目。

**Topics**
+ [

# 在 CloudWatch 中创建 Contributor Insights 规则
](ContributorInsights-CreateRule.md)
+ [

# CloudWatch 中的 Contributor Insights 规则语法
](ContributorInsights-RuleSyntax.md)
+ [

# CloudWatch Contributor Insights 规则示例
](ContributorInsights-Rule-Examples.md)
+ [

# 在 CloudWatch 中查看 Contributor Insights 报告
](ContributorInsights-ViewReports.md)
+ [

# 绘制 CloudWatch 中规则生成的指标的图表
](ContributorInsights-GraphReportData.md)
+ [

# 在 CloudWatch 中使用 Contributor Insights 内置规则
](ContributorInsights-BuiltInRules.md)

# 在 CloudWatch 中创建 Contributor Insights 规则


您可创建规则以分析日志数据。可以评估任何采用 JSON 或常用日志格式 (CLF) 的日志。这包括遵循这些格式之一的自定义日志以及来自 AWS 服务的日志，例如 Amazon VPC 流日志、Amazon Route 53 DNS 查询日志、Amazon ECS 容器日志以及来自 AWS CloudTrail、Amazon SageMaker AI、Amazon RDS、AWS AppSync 和 API Gateway 的日志。

在规则中指定字段名称或值时，所有匹配都区分大小写。

在创建规则时，您可以使用内置示例规则，也可以从 Scratch 创建自己的规则。Contributor Insights 包括以下日志类型的示例规则：
+ Amazon API Gateway 日志
+ Amazon Route 53 公有 DNS 查询日志
+ Amazon Route 53 resolver 查询日志
+ CloudWatch Container Insights 日志
+ VPC 流日志

如果您登录的账户在 CloudWatch 跨账户可观测性中设置为监控账户，则除了为该监控账户中的日志组创建规则外，您可以为与该监控账户关联的源账户中的日志组创建 Contributor Insights 规则。您还可以设置单个规则来监控不同账户中的日志组。有关更多信息，请参阅 [CloudWatch 跨账户可观测性](CloudWatch-Unified-Cross-Account.md)。

**重要**  
当您向用户授予 `cloudwatch:PutInsightRule` 权限时，默认情况下，该用户可以创建一个规则来评估 CloudWatch Logs 中的任何日志组。您可以添加 IAM 策略条件，以限制用户的这些权限，使其包含和排除特定的日志组。有关更多信息，请参阅 [使用条件键限制 Contributor Insights 用户对日志组的访问](iam-cw-condition-keys-contributor.md)。

**要使用内置示例规则创建规则，请执行以下操作：**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择**日志**、**Contributor Insights**。

1. 选择 **Create rule**（创建规则）。

   

1.  对于 **Select log group(s)**（选择日志组），请选择您希望您的规则监控的日志组。您可以选择多达 20 个日志组。如果您登录的账户是为 CloudWatch 跨账户可观测性设置的监控账户，则可以选择源账户中的日志组，也可以设置单个规则来分析不同账户中的日志组。

   1.  （可选）要选择名称以特定字符串开头的所有日志组，请选择 **Select by prefix match**（按前缀匹配选择）下拉菜单，然后输入前缀。如果这是监控账户，则可以选择要在其中进行搜索的账户，否则将选择所有账户。
**注意**  
 您需要为与您的规则匹配的每个日志事件支付费用。如果您选择 **Select by prefix match**（按前缀匹配选择）下拉菜单，请注意前缀可以匹配多少个日志组。如果您搜索了超出预期数量的日志组，可能会产生意外费用。有关更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing)。

1. 对于 **Rule type**（规则类型），选择 **Sample rule**（示例规则）。然后选择 **Select sample rule**（选择示例规则），并选择相应的规则。

1. 对于**日志格式**，请选择规则会评估的日志格式。

1. 对于**转换器**，请选择**启用转换器 Contributor Insights**，以便在经 [CloudWatch Logs 日志转换](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html.html)处理后，让规则对日志事件进行评估。如果选择启用此功能：
   + 如果规则会评估任何具有转换器的日志组，则该规则将应用于日志的转换版本。
   + 如果该规则会评估任何没有转换器的日志组，则该规则将应用于日志的原始版本。

   如果不选择此选项，则将对所有日志组中的原始日志事件进行评估，包括经日志转换功能转换的日志事件。
**注意**  
如果日志组具有转换器且某些日志事件转换失败，Contributor Insights 则不会评估这些日志事件。有关调查日志转换失败的信息，请参阅 [Transformation metrics and errors](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Transformation-Errors-Metrics.html)。

1.  所选示例规则已填写**日志格式**、**贡献**、**筛选条件**和**聚合**字段。您可以根据需要对这些值进行调整。

1. 选择**下一步**。

1. 为 **Rule name (规则名称)** 输入一个名称。有效字符包括 A-Z、a-z、0-9、（连字符）、（下划线）和（半角句点）。

1. 选择是创建处于已禁用状态还是已启用状态的规则。如果您选择启用规则，它将立即开始对您的数据进行分析。运行启用的规则时，您需要支付费用。有关更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

   Contributor Insights 仅在创建规则后分析新的日志事件。规则无法处理之前已由 CloudWatch Logs 处理的日志事件。

1. （可选）对于 **Tags**（标签），请添加一个或多个键/值对作为此规则的标签。标签可帮助您识别和组织 AWS 资源并跟踪 AWS 成本。有关更多信息，请参阅 [标记 Amazon CloudWatch 资源](CloudWatch-Tagging.md)。

1. 选择**创建**。

**要从 Scratch 创建规则，请执行以下操作：**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择**日志**、**Contributor Insights**。

1. 选择 **Create rule**（创建规则）。

   

1.  对于 **Select log group(s)**（选择日志组），请选择您希望您的规则监控的日志组。您可以选择多达 20 个日志组。如果您登录的账户是为 CloudWatch 跨账户可观测性设置的监控账户，则可以选择源账户中的日志组，也可以设置单个规则来分析不同账户中的日志组。

   1.  （可选）要选择名称以特定字符串开头的所有日志组，请选择 **Select by prefix match**（按前缀匹配选择）下拉菜单，然后输入前缀。
**注意**  
 您需要为与您的规则匹配的每个日志事件支付费用。如果您选择 **Select by prefix match**（按前缀匹配选择）下拉菜单，请注意前缀可以匹配多少个日志组。如果您搜索了超出预期数量的日志组，可能会产生意外费用。有关更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing)。

1. 对于 **Rule type**（规则类型），请选择 **Custom rule**（自定义规则）。

1. 对于 **Log format (日志格式)**，请选择 **JSON** 或 **CLF**。

1. 对于**转换器**，请选择**启用转换器 Contributor Insights**，以便在经 [CloudWatch Logs 日志转换](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html.html)处理后，让规则对日志事件进行评估。如果选择启用此功能：
   + 如果规则会评估任何具有转换器的日志组，则该规则将应用于日志的转换版本。
   + 如果该规则会评估任何没有转换器的日志组，则该规则将应用于日志的原始版本。

   如果不选择此选项，则将对所有日志组中的原始日志事件进行评估，包括经日志转换功能转换的日志事件。
**注意**  
如果日志组具有转换器且某些日志事件转换失败，Contributor Insights 则不会评估这些日志事件。有关调查日志转换失败的信息，请参阅 [Transformation metrics and errors](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Transformation-Errors-Metrics.html)。

1. 您可以通过以下方式完成规则的创建过程：使用向导，或选择 **Syntax (语法)** 选项卡并手动指定规则语法。

   要继续使用此向导，请执行以下操作：

   1. 对于 **Contribution (贡献)**、**Key (键)**，请输入要报告的贡献者类型。此报告将显示该贡献者类型的前 N 个值。

      有效条目为任何具有值的日志字段。示例包括 **requestId**、**sourceIPaddress** 和 **containerID**。

      有关查找特定日志组中日志的日志字段名称的信息，请参阅[查找日志字段](#finding_log_fields)。

      大于 1 KB 的键将被截断至 1KB。

   1. （可选）选择 **Add new key**（添加新键）以添加更多键。可以在规则中包含最多四个键。如果输入多个键，则报告中的贡献者将由键的唯一值组合定义。例如，如果您指定三个键，则三个键的每个唯一值组合将被计为一个独特贡献者。

   1. （可选）如果要添加筛选条件以缩小结果范围，请选择 **Add filter**（添加筛选条件）。对于 **Match**（匹配），输入要作为筛选条件的日志字段的名称。对于 **Condition**（条件），选择比较运算符，并输入要作为筛选条件的值。

      您可以在规则中最多添加 4 个筛选条件。多个筛选条件通过 AND 逻辑联接，因此，仅返回与所有筛选条件都匹配的日志事件。
**注意**  
遵循比较运算符的数组（例如 `In`、`NotIn` 或者 `StartsWith`）可以包含最多 10 个字符串值。有关 Contributor Insights 规则语法的更多信息，请参阅 [CloudWatch 中的 Contributor Insights 规则语法](ContributorInsights-RuleSyntax.md)。

   1. 对于 **Aggregate on（聚合）**，选择 **Count（计数）**或 **Sum（总计）**。选择 **Count（计数）**会使贡献者排名基于出现次数。选择 **Sum（总计）**会使排名基于您为 **Contribution（贡献）**、**Value（值）**指定的字段值的总和。

1. 要输入规则作为 JSON 对象而不是使用此向导，请执行以下操作：

   1. 选择 **Syntax (语法)** 选项卡。

   1. 在 **Rule body (规则正文)** 中，输入规则的 JSON 对象。有关规则语法的信息，请参阅 [CloudWatch 中的 Contributor Insights 规则语法](ContributorInsights-RuleSyntax.md)。

1. 选择**下一步**。

1. 为 **Rule name (规则名称)** 输入一个名称。有效字符为 A-Z、a-z、0-9、“-”、“\$1”和“.”。

1. 选择是创建处于已禁用状态还是已启用状态的规则。如果您选择启用规则，它将立即开始对您的数据进行分析。运行启用的规则时，您需要支付费用。有关更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

   Contributor Insights 仅在创建规则后分析新的日志事件。规则无法处理之前已由 CloudWatch Logs 处理的日志事件。

1. （可选）对于 **Tags**（标签），请添加一个或多个键/值对作为此规则的标签。标签可帮助您识别和组织 AWS 资源并跟踪 AWS 成本。有关更多信息，请参阅 [标记 Amazon CloudWatch 资源](CloudWatch-Tagging.md)。

1. 选择**下一步**。

1. 确认您输入的设置，然后选择 **Create rule**（创建规则）。

可以禁用、启用或删除已创建的规则。

**在 Contributor Insights 中启用、禁用或删除规则**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择**日志**、**Contributor Insights**。

1. 在规则列表中，选中单个规则旁边的复选框。

   内置规则由 AWS 服务创建，无法编辑、禁用或删除这些规则。

1. 选择 **Actions (操作)**，然后选择所需选项。<a name="finding_log_fields"></a>

**查找日志字段**

创建规则时，您需要知道日志组的日志条目中的字段名称。

**查找日志组中的日志字段**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中的 **Logs (日志)** 下，选择 **Insights (见解)**。

1. 在查询编辑器上方，选择要查询的一个或多个日志组。

   当您选择日志组时，CloudWatch Logs Insights 会自动检测日志组数据中的字段，并将其显示在右侧窗格中的 **Discovered fields（发现的字段）**中。

# CloudWatch 中的 Contributor Insights 规则语法


此部分说明了 Contributor Insights 规则的语法。仅当您通过输入 JSON 块来创建规则时使用此语法。如果您使用此向导创建规则，则无需知道语法。有关使用此向导创建规则的更多信息，请参阅 [在 CloudWatch 中创建 Contributor Insights 规则](ContributorInsights-CreateRule.md)。

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

以下示例说明了 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 定价](https://aws.amazon.com/cloudwatch/pricing)。

LogGroupARN  
如果您在 CloudWatch 跨账户可观测性监控账户中创建此规则，则可以使用 `LogGroupARNs` 在与该监控账户关联的源账户中指定日志组，然后指定该监控账户本身的日志组。您必须在规则中指定 `LogGroupNames` 或 `LogGroupARNs`，但不能同时指定两者。  
 `LogGroupARNs` 是一个字符串数组。对于该数组中的每个元素，在某些情况下可以选择使用 `*` 作为通配符。例如，您可以指定 `arn:aws:logs:us-west-1:*:log-group/MyLogGroupName2`，以便在美国西部（北加利福尼亚）地区的所有源账户和该监控账户中指定名为 `MyLogGroupName2` 的日志组。您还可以指定 `arn:aws:logs:us-west-1:111122223333:log-group/GroupNamePrefix*`，以便在 111122223333 中指定美国西部（北加利福尼亚）所有名称以 `GroupNamePrefix` 开头的日志组。  
您不能将部分 AWS 账户 ID 指定为带通配符的前缀。  
将通配符用于日志组 ARN 时要小心。您需要为与规则匹配的每个日志事件支付费用。如果不小心搜索了超出预期数量的日志组，可能会产生意外费用。有关更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing)。

LogFormat  
 有效值为 `JSON` 和 `CLF`。

贡献  
 此对象包含一个具有最多个四个成员的 `Keys` 数组、（可选）一个 `ValueOf`、（可选）一个具有最多四个 `Filters` 的数组。

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

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

筛选条件  
 指定具有最多四个筛选条件的数组可缩小报告中包含的日志事件的范围。如果您指定多个筛选条件，则 Contributor Insights 会使用逻辑 AND 运算符对它们进行评估。您可以使用此选项来筛掉搜索中不相关的日志事件，也可以使用它选择单个贡献者来分析其行为。  
数组中的每个成员必须包含一个 `Match` 字段和一个指示要使用的匹配运算符类型的字段。  
`Match` 字段指定要在筛选条件中评估的日志字段。使用 JSON 属性格式表示法指定日志字段。  
匹配的运算符字段必须是下列项目之一：`In`、`NotIn`、`StartsWith`、`GreaterThan`、`LessThan`、`EqualTo`、`NotEqualTo` 或 `IsPresent`。如果运算符字段为 `In`、`NotIn` 或 `StartsWith`，则它后跟一个要检查的字符串值数组。Contributor Insights 使用 OR 运算符评估字符串值的数组。该数组可以包含最多 10 个字符串值。  
如果运算符字段为 `GreaterThan`、`LessThan`、`EqualTo` 或 `NotEqualTo`，则它后跟要比较的单个数值。  
如果运算符字段为 `IsPresent`，则它后跟 `true` 或 `false`。此运算符将根据日志事件中是否存在指定的日志字段来匹配日志事件。`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  
 有效值为 `Count` 和 `Sum`。指定是基于出现次数，还是基于 `ValueOf` 字段中指定的字段值的总和来聚合报告。

**JSON 属性格式表示法**

`Keys`、`ValueOf` 和 `Match` 字段遵循带点符号的 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` 可用作规则中的 `Keys`、`ValueOf` 和 `Filters` 中的属性。

以下是使用 `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"
}
```

# CloudWatch Contributor Insights 规则示例
示例规则

此部分包含的示例说明了 Contributor Insights 规则的使用案例。

**VPC 流日志：按源和目标 IP 地址进行的字节传输**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "4": "srcaddr",
        "5": "dstaddr",
        "10": "bytes"
    },
    "Contribution": {
        "Keys": [
            "srcaddr",
            "dstaddr"
        ],
        "ValueOf": "bytes",
        "Filters": []
    },
    "AggregateOn": "Sum"
}
```

**VPC 流日志：最大 HTTPS 请求数**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "5": "destination address",
        "7": "destination port",
        "9": "packet count"
    },
    "Contribution": {
        "Keys": [
            "destination address"
        ],
        "ValueOf": "packet count",
        "Filters": [
            {
                "Match": "destination port",
                "EqualTo": 443
            }
        ]
    },
    "AggregateOn": "Sum"
}
```

**VPC 流日志：被拒绝的 TCP 连接数**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "3": "interfaceID",
        "4": "sourceAddress",
        "8": "protocol",
        "13": "action"
    },
    "Contribution": {
        "Keys": [
            "interfaceID",
            "sourceAddress"
        ],
        "Filters": [
            {
                "Match": "protocol",
                "EqualTo": 6
            },
            {
                "Match": "action",
                "In": [
                    "REJECT"
                ]
            }
        ]
    },
    "AggregateOn": "Sum"
}
```

**Route 53 NXDomain 按源地址响应**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Count",
    "Contribution": {
        "Filters": [
            {
                "Match": "$.rcode",
                "StartsWith": [
                    "NXDOMAIN"
                ]
            }
        ],
        "Keys": [
            "$.srcaddr"
        ]
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "<loggroupname>"
    ]
}
```

**Route 53 Resolver 按域名查询**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Count",
    "Contribution": {
        "Filters": [],
        "Keys": [
            "$.query_name"
        ]
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "<loggroupname>"
    ]
}
```

**Route 53 Resolver 按查询类型和源地址查询**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Count",
    "Contribution": {
        "Filters": [],
        "Keys": [
            "$.query_type",
            "$.srcaddr"
        ]
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "<loggroupname>"
    ]
}
```

# 在 CloudWatch 中查看 Contributor Insights 报告


要查看报告数据的图表和您的规则找到的贡献者排名列表，请执行以下步骤。

**查看规则报告**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择**日志**、**Contributor Insights**。

   

1. 在该规则列表中，选择规则的名称。

   图表显示了过去三小时内的规则结果。图表下方的表显示了前 10 名贡献者。

1. 要更改表中显示的贡献者数，请选择图表顶部的 **Top 10 contributors (前 10 名贡献者)**。

1. 要筛选图表以仅显示单个贡献者的结果，请在表图例中选择该贡献者。要再次显示所有贡献者，请在图例中再次选择同一个贡献者。

1. 要更改报告中显示的时间范围，请选择图表顶部的 **15m**（15 分钟）、**30m**（30 分钟）、**1h**（1 小时）、**2h**（2 小时）、**3h**（3 小时）或 **custom**（自定义）。

   报告的最大时间范围为 24 小时，但您可以选择最多 15 天前发生的 24 小时时段。要选择过去的时段，请选择 **custom (自定义)**、**absolute (绝对)**，然后指定您的时段。

1. 要更改用于聚合和贡献者排名的时段的长度，请选择图表顶部的 **period (周期)**。查看较长的时段通常会显示更平滑的报告，其中包含的峰值很少。选择较短的时段更有可能显示峰值。

1. 要将此图表添加到 CloudWatch 控制面板，请选择 **Add to dashboard（添加到控制面板）**。

1. 要打开 CloudWatch Logs Insights 查询窗口（此报告中的日志组已加载到查询框中），请选择 **View logs（查看日志）**。

1. 要将报告数据导出到剪贴板或 CSV 文件，请选择 **Export (导出)**。

# 绘制 CloudWatch 中规则生成的指标的图表


Contributor Insights 提供了一个指标数学函数，即 `INSIGHT_RULE_METRIC`。您可以使用此函数将 Contributor Insights 报告中的数据添加到 CloudWatch 控制台的 **Metrics（指标）**选项卡中的图表。您也可以根据此数学函数来设置警报。有关指标数学函数的更多信息，请参阅 [将数学表达式与 CloudWatch 指标结合使用](using-metric-math.md)。

要使用此指标数学函数，您必须登录到同时具有 `cloudwatch:GetMetricData` 和 `cloudwatch:GetInsightRuleReport` 权限的账户。



语法为 `INSIGHT_RULE_METRIC(ruleName, metricName)`。*ruleName* 是 Contributor Insights 规则的名称，*metricName* 是以下列表中的值之一。*metricName* 的值决定了数学函数返回的数据类型。
+ `UniqueContributors` – 每个数据点的独特贡献者数。
+ `MaxContributorValue` – 每个数据点的顶级贡献者的值。对于图表中的每个数据点，确定的贡献者可能会变化。

  如果此规则按 `Count` 进行聚合，则每个数据点的顶级贡献者是该时段内出现次数最多的贡献者。如果此规则按 `Sum` 进行聚合，则排在最前面的贡献者是此时段内具有该规则的 `Value` 指定的日志字段中最大总和的贡献者。
+ `SampleCount` – 规则匹配的数据点数。
+ `Sum` – 该数据点表示的时段内来自所有贡献者的值的总和。
+ `Minimum` – 该数据点所表示的时段内单个观察结果中的最小值。
+ `Maximum` – 该数据点所表示的时段内单个观察结果中的最大值。
+ `Average` – 该数据点表示的时段内来自所有贡献者的平均值。

## 为 Contributor Insights 指标数据设置告警


您可以使用函数 `INSIGHT_RULE_METRIC` 对 Contributor Insights 生成的指标设置告警。例如，您可以根据已被拒绝的传输控制协议（TCP）连接的百分比来创建告警。要开始使用这种类型的告警，您可以创建类似以下两个示例中所示的规则:

**示例规则: "RejectedConnectionsRule"**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "3": "interfaceID",
        "4": "sourceAddress",
        "8": "protocol",
        "13": "action"
    },
    "Contribution": {
        "Keys": [
            "interfaceID",
            "sourceAddress"
        ],
        "Filters": [
            {
                "Match": "protocol",
                "EqualTo": 6
            },
            {
                "Match": "action",
                "In": [
                    "REJECT"
                ]
            }
        ]
    },
    "AggregateOn": "Sum"
}
```

**示例规则: "TotalConnectionsRule"**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "3": "interfaceID",
        "4": "sourceAddress",
        "8": "protocol",
        "13": "action"
    },
    "Contribution": {
        "Keys": [
            "interfaceID",
            "sourceAddress"
        ],
        "Filters": [{
            "Match": "protocol",
            "EqualTo": 6
        }],
        "AggregateOn": "Sum"
    }
}
```

创建规则后，您可以选择 CloudWatch 控制台中的 **Metrics**（指标）选项卡，在其中使用以下示例指标数学表达式来绘制 Contributor Insights 报告的数据的图表:

**示例: 指标数学表达式**

```
e1 INSIGHT_RULE_METRIC("RejectedConnectionsRule", "Sum")
e2 INSIGHT_RULE_METRIC("TotalConnectionsRule", "Sum")
e3 (e1/e2)*100
```

在该示例中，指标数学表达式 `e3` 返回所有已被拒绝的 TCP 连接。如果您想要在已被拒绝的 TCP 连接达到 20% 时收到通知，则可以修改表达式，将阈值从 `100` 更改为 `20`。

**注意**  
在 **Metrics**（指标）部分中，您可以对您监控的指标设置告警。在 **Graphed metrics**（绘制的指标）选项卡中，您可以选择 **Actions**（操作）列下的 **Create alarm**（创建告警）。**Create alarm**（创建告警）图标看起来像个铃铛。

有关绘制指标的图表和使用指标数学函数的更多信息，请参阅以下部分: [向 CloudWatch 图表中添加数学表达式](using-metric-math.md#adding-metrics-expression-console)。

# 在 CloudWatch 中使用 Contributor Insights 内置规则


您可以使用 Contributor Insights 内置规则来分析其他 AWS 服务的指标。以下服务支持内置规则：
+ *Amazon DynamoDB 开发人员指南*中的 [Amazon DynamoDB 的 Contributor Insights](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/contributorinsights.html)。
+ *AWS PrivateLink 指南*中的[使用内置的 Contributor Insights 规则](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-cloudwatch-metrics.html#privatelink-contributor-insights)。