

# CloudWatch Contributor Insights for DynamoDB：工作原理
<a name="contributorinsights_HowItWorks"></a>

Amazon DynamoDB 与 [CloudWatch Contributor Insights](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/ContributorInsights.html) 集成，来提供表或全局二级索引中访问次数最多和最常受限制的项目的相关信息。DynamoDB 通过 CloudWatch Contributor Insights [规则](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/ContributorInsights-RuleSyntax.html)、[报告](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/ContributorInsights-ViewReports.html)和[报告数据的图表](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/ContributorInsights-GraphReportData.html)提供这些信息。

适用于 DynamoDB 的 CloudWatch Contributor Insights 设计为对 DynamoDB 表的性能没有任何影响。

有关 CloudWatch Contributor Insights 的更多信息，请参阅《Amazon CloudWatch 用户指南》**中的[使用 Contributor Insights 分析高基数数据](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/ContributorInsights.html)。

 以下各节介绍 CloudWatch Contributor Insights for DynamoDB 的核心概念和行为。

**Topics**
+ [CloudWatch Contributor Insights for DynamoDB 模式](#contributorinsights_HowItWorks.Modes)
+ [CloudWatch Contributor Insights for DynamoDB 规则](#contributorinsights_HowItWorks.Rules)
+ [了解 CloudWatch Contributor Insights for DynamoDB 图表](#contributorinsights_HowItWorks.Graphs)
+ [与其他 DynamoDB 功能的交互](#contributorinsights_HowItWorks.OtherFeatures)
+ [CloudWatch Contributor Insights for DynamoDB 计费](#contributorinsights_HowItWorks.Billing)

## CloudWatch Contributor Insights for DynamoDB 模式
<a name="contributorinsights_HowItWorks.Modes"></a>

CloudWatch Contributor Insights for DynamoDB 提供了两种不同的模式，用于满足不同的监控需求。

### 受限的键模式
<a name="contributorinsights_HowItWorks.Modes.ThrottledOnly"></a>

此模式仅关注受限制的请求，仅在出现节流问题时处理事件。此模式提供有关性能问题的见解，而不会产生跟踪所有访问模式的开销。在此模式下，DynamoDB 仅跟踪：
+ **最受限的项目**：出现了最多节流事件的项目。

此模式非常适合以下情况：
+ 您主要关注的是识别和解决节流问题
+ 您想保持启用 Contributor Insights 来检测实时节流情况
+ 您希望采用成本优化的方法来监控节流问题

**注意**  
*受限的键模式*仅在发生节流情况时处理事件，实现了经济高效的持续监控。通过这种针对性的方法，您可以保持该功能长期启用并尽可能减少成本影响，同时仍能在出现节流问题时立即发现这些问题。

如果表没有遇到节流情况，则您在 Contributor Insights 图表中不会看到任何数据，这表明运行正常。检测到节流情况时，您可以通过生成的图表来识别导致性能问题的具体访问模式。这些信息可以帮助您实施策略来应对不均匀的访问模式。

对于全面监控策略，您可以将对这些节流情况的见解与其他 CloudWatch 指标集成，来创建统一的控制面板，将节流事件与表的整体性能关联起来。

### 访问的键和受限的键模式
<a name="contributorinsights_HowItWorks.Modes.AccessedAndThrottled"></a>

此模式针对访问的项目和受限制的项目提供全面监控。在此模式下，DynamoDB 会跟踪：
+ **最常访问的项目**：消耗了最多读取和写入容量的项目
+ **最受限的项目**：出现了最多节流事件的项目。

当您需要全面监测表的访问模式，而且希望了解高流量项目和节流问题时，此模式非常适用。

### 切换模式
<a name="contributorinsights_HowItWorks.Modes.Switching"></a>

您可以使用 DynamoDB 控制台、Amazon CLI 或 API，随时在模式之间切换。切换模式时会出现以下情况：
+ 更新现有 CloudWatch 规则来匹配新模式
+ 被节流的键 CloudWatch 规则保持不变，从而维护连续的节流指标历史数据：
  + 当您从*受限的键*模式切换到*访问的键和受限的键*模式时，将保留现有的受限的键规则，还会创建新的访问的键规则
  + 当您从*访问的键和受限的键*模式切换到*受限的键*模式时，将只保留受限的键规则，访问的键规则将被移除。
+ 账单会立即调整以反映新模式下的事件处理

## CloudWatch Contributor Insights for DynamoDB 规则
<a name="contributorinsights_HowItWorks.Rules"></a>

在表或全局二级索引上启用 CloudWatch Contributor Insights for DynamoDB 后，DynamoDB 根据选定的模式，代表您创建[规则](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/ContributorInsights-RuleSyntax.html)。

**注意**  
如果您在 DynamoDB 表上启用 Contributor Insights，则会受到 Contributor Insights 规则的限制。有关更多信息，请参阅 [CloudWatch 服务配额](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html)。

### 适用于访问的键和受限的键模式的规则
<a name="contributorinsights_HowItWorks.Rules.AccessedAndThrottled"></a>

在*访问的键和受限的键*模式下，DynamoDB 创建以下规则：
+ **最常访问的项目（分区键）**：标识表或全局二级索引中最常访问的项目的分区键。

  CloudWatch 规则名称格式：`DynamoDBContributorInsights-PKC-[resource_name]-[creationtimestamp]`
+ **最受限制的项目（分区键）**：标识表或全局二级索引中受节流最多的项目的分区键。

  CloudWatch 规则名称格式：`DynamoDBContributorInsights-PKT-[resource_name]-[creationtimestamp]`

如果表或全局二级索引具有排序键，DynamoDB 还将创建特定于排序键的以下规则：
+ **最常访问的键（分区键和排序键）** — 标识表或全局二级索引中最常访问的项目的分区键和排序键。

  CloudWatch 规则名称格式：`DynamoDBContributorInsights-SKC-[resource_name]-[creationtimestamp]`
+ **最受限制的键（分区键和排序键）** — 标识表或全局二级索引中最受限制的项目的分区键和排序键。

  CloudWatch 规则名称格式：`DynamoDBContributorInsights-SKT-[resource_name]-[creationtimestamp]`

### 受限的键模式的规则
<a name="contributorinsights_HowItWorks.Rules.ThrottledOnly"></a>

在*受限的键*模式下，DynamoDB 仅创建与节流相关的规则：
+ **最受限制的项目（分区键）** — 标识表或全局二级索引中最受限制的项目的分区键。

  CloudWatch 规则名称格式：`DynamoDBContributorInsights-PKT-[resource_name]-[creationtimestamp]`

如果表或全局二级索引具有排序键，DynamoDB 还会创建：
+ **最受限制的键（分区键和排序键）** — 标识表或全局二级索引中最受限制的项目的分区键和排序键。

  CloudWatch 规则名称格式：`DynamoDBContributorInsights-SKT-[resource_name]-[creationtimestamp]`

这种针对性方法可以减少活动规则的数量并减少所处理事件的数量，从而更好地诊断节流事件。

**注意**  
使用 CloudWatch 控制台或 API 来查看 CloudWatch Contributor Insights for DynamoDB 时，您只能查看与所选模式对应的规则。
无法使用 CloudWatch 控制台或 API 直接修改或删除通过 CloudWatch Contributor Insights for DynamoDB 创建的规则。在表或全局二级索引上禁用 CloudWatch Contributor Insights for DynamoDB 会自动删除为该表或全局二级索引创建的规则。
如果将 [GetInsightRuleReport](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_GetInsightRuleReport.html) 操作与 DynamoDB 创建的 CloudWatch Contributor Insights 规则一起使用，则只有 `MaxContributorValue` 和 `Maximum` 返回有用的统计信息。此列表中的其他统计信息不返回有意义的值。
适用于 DynamoDB 的 CloudWatch Contributor Insights 有 25 个贡献者的限制。请求超过 25 个贡献者将返回错误。

可以使用 CloudWatch Contributor Insights for DynamoDB [规则](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/ContributorInsights-RuleSyntax.html)创建 CloudWatch 告警。如果任何项目超过或达到特定的 `ConsumedThroughputUnits` 或 `ThrottleCount` 阈值，您将收到通知。有关更多信息，请参阅[为 Contributor Insights 指标数据设置告警](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/ContributorInsights-GraphReportData.html#ContributorInsights-GraphReportData-Alarm)。

## 了解 CloudWatch Contributor Insights for DynamoDB 图表
<a name="contributorinsights_HowItWorks.Graphs"></a>

CloudWatch Contributor Insights for DynamoDB 会根据所选模式，在 DynamoDB 控制台和 CloudWatch 控制台中显示不同类型的图表。

### 按模式列出的图表可用性
<a name="contributorinsights_HowItWorks.Graphs.ModeComparison"></a>

所显示的图表取决于您选择的 Contributor Insights 模式。
+ **访问的键和受限的键模式**同时显示*最常访问的项目*和*最受限的项目*图表
+ **受限的键模式**仅显示*最受限的项目*图表

### 最常访问的项目
<a name="contributorinsights_HowItWorks.Graphs.most-accessed"></a>

此图表仅在访问的键和受限的键模式下可用。使用此图可以确定表或全局二级索引中最常访问的项目。此图的 y 轴显示 `ConsumedThroughputUnits`，x 轴显示时间。前 N 个键中的每个键都以自己的颜色显示，图例显示在 X 轴下方。

DynamoDB 通过使用 `ConsumedThroughputUnits` 测量键访问频率，可以测量读写组合流量。`ConsumedThroughputUnits` 定义如下：
+ 预置 —*（3 倍占用的写入容量单位）\$1 占用的读取容量单位*
+ 按需 —*（3 倍写入请求单位）\$1 读取请求单位*

在 DynamoDB 控制台中，图中的每个数据点代表一分钟内的最大 `ConsumedThroughputUnits`。例如，图形值 180000 `ConsumedThroughputUnits` 表示：在一分钟的时间段内（3000 x 60 秒）持续访问项目，60 秒内每个项目的最大吞吐为 1000 个写入请求单位或 3000 个读取请求单位。换句话说，图表值表示每个一分钟周期内的最高流量分钟。可以在 CloudWatch 控制台中更改 `ConsumedThroughputUnits` 指标的时间粒度（例如，查看 5 分钟指标而不是 1 分钟）。

如果看到几条紧密聚集的线条而没有明显的离群值，则表明在给定的时间范围内，各个项目的工作负载相对平衡。如果在图中看到孤立的点，而不是连接的线条，则表明短时间内频繁访问项目。

如果表或全局二级索引具有排序键，DynamoDB 将创建两个图表：一个用于访问最多的分区键，另一个用于访问最多的分区键 \$1 排序键对。您可以在仅分区键图表中查看分区键级别的流量。您可以在分区 \$1 排序键图表中查看项目级别的流量。

### 最受节流的项目
<a name="contributorinsights_HowItWorks.Graphs.most-throttled"></a>

此图表在两种模式下均可用。使用此图可以确定表或全局二级索引中最受限制的项目。此图的 y 轴显示 `ThrottleCount`，x 轴显示时间。前 *N* 个键中的每个键都以自己的颜色显示，图例显示在 X 轴下方。

DynamoDB 使用 `ThrottleCount`（这是 `ProvisionedThroughputExceededException`、`ThrottlingException` 和 `RequestLimitExceeded` 错误的计数）测量限制频率。

不测量全局二级索引的写入容量不足导致的写入限制。可以使用全局二级索引的*最常访问的项目*图表，识别导致写入限制的不平衡访问模式。有关更多信息，请参阅[全局二级索引的预调配吞吐量注意事项](https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/GSI.html#GSI.ThroughputConsiderations)。

在 DynamoDB 控制台中，图中的每个数据点代表一分钟内的限制事件计数。

如果在此图中看不到任何数据，说明请求没有受到限制。如果在图表中看到孤立的点，而不是连接的线条，说明短时间内频繁限制项目。

如果表或全局二级索引具有排序键，则 DynamoDB 将创建两个图表：一个用于受节流最多的分区键，另一个用于受节流最多的分区键 \$1 排序键对。您可以在仅分区键图表中查看分区键级别的节流计数，在分区键 \$1 排序键图表中查看项目级别的节流计数。

**注意**  
在*受限的键*模式下，您只能看到此图表类型。如果这些图表中没有数据，则表明表的性能良好，没有出现节流情况。

### 报告示例
<a name="contributorinsights_HowItWorks.Graphs.examples"></a>

以下是当分区键和排序键均处于*访问的键和受限的键*模式时生成的报告示例。在*受限的键*模式下，您只能看到此报告中与节流相关的部分。

![\[4 个不同的 Contributor Insights 报告，显示最常访问的项目和最受限制的项目。\]](http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/images/CI_Graphs_Example.png)


## 与其他 DynamoDB 功能的交互
<a name="contributorinsights_HowItWorks.OtherFeatures"></a>

以下章节介绍 CloudWatch Contributor Insights for DynamoDB 的行为方式，以及如何与 DynamoDB 中的一些其他功能进行交互。除非另行指定，否则这些行为适用于两种模式。

### 全局表
<a name="contributorinsights_HowItWorks.OtherFeatures.GlobalTables"></a>

CloudWatch Contributor Insights for DynamoDB 将全局表副本作为不同表进行监控。一个 Amazon 区域中副本的 Contributor Insights 图表可能不会显示与另一个区域相同的模式。这是因为写数据在全局表的所有副本之间复制，但每个副本都可以提供区域绑定的读取流量。

每个副本可以独立配置为不同的 Contributor Insights 模式。例如，您可以在主区域中使用*访问的键和受限的键*模式进行全面监控，而在辅助区域使用*受限的键*模式来保持监测性能问题。

### DynamoDB Accelerator (DAX)
<a name="contributorinsights_HowItWorks.OtherFeatures.DAX"></a>

CloudWatch Contributor Insights for DynamoDB 不显示 DAX 缓存响应，只显示对访问表或全局二级索引的响应。

**注意**  
DynamoDB CloudWatch Contributor Insights 不支持 PartiQL 请求。

### 静态加密
<a name="contributorinsights_HowItWorks.OtherFeatures.Encryption"></a>

CloudWatch Contributor Insights for DynamoDB 不影响 DynamoDB 中的加密工作方式。CloudWatch 中发布的主键数据使用 Amazon 拥有的密钥 加密。但是，DynamoDB 还支持 Amazon 托管式密钥 和客户托管密钥。

适用于 DynamoDB 的 CloudWatch Contributor Insights 显示经常访问项目和经常受限制项目的分区键和排序键（如适用）。虽然 CloudWatch Contributor Insights 可以处理加密的 DynamoDB 表，但值得注意的是，它使用其自己的 Amazon 拥有的加密上下文，该上下文与表的已配置加密是分开的。

如果 DynamoDB 表的主键包含敏感信息，并且贵组织的安全策略要求对加密过程进行完全控制，则启用 CloudWatch Contributor Insights 可能不合适。

### 访问权限的精细控制
<a name="contributorinsights_HowItWorks.OtherFeatures.FGAC"></a>

对于具有精细访问控制 (FGAC) 的表，CloudWatch Contributor Insights for DynamoDB 的功能没有什么不同。换句话说，任何具有相应 CloudWatch 权限的用户都可以在 CloudWatch Contributor Insights 图中查看受 FGAC 保护的主键。

如果表的主键包含不想发布到 CloudWatch 的受 FGAC 保护的数据，则不应为该表启用 CloudWatch Contributor Insights for DynamoDB。

### 访问控制
<a name="contributorinsights_HowItWorks.OtherFeatures.AccessControl"></a>

可以使用 Amazon Identity and Access Management (IAM) 限制 DynamoDB 控制层面权限和 CloudWatch 数据层面权限，控制对 CloudWatch Contributor Insights for DynamoDB 的访问。有关更多信息，请参见[将 IAM 与 CloudWatch Contributor Insights for DynamoDB 一起使用](https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/Contributor_Insights_IAM.html)。

## CloudWatch Contributor Insights for DynamoDB 计费
<a name="contributorinsights_HowItWorks.Billing"></a>

CloudWatch Contributor Insights for DynamoDB 费用显示在每月账单的 [CloudWatch](https://www.amazonaws.cn/cloudwatch/pricing/) 部分。这些费用根据所处理的 DynamoDB 事件数以及选定的模式计算。

### 按模式计费
<a name="contributorinsights_HowItWorks.Billing.ModeComparison"></a>

两种 Contributor Insights 模式具有不同的计费特性。
+ **访问的键和受限的键模式计费**：在此模式下，无论请求成功还是受限，通过[数据面板](https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/HowItWorks.API.html#HowItWorks.API.DataPlane)操作写入或读取的每个项目都表示一个事件。如果表或全局二级索引包含排序键，则读取或写入的每个项目代表两个事件。这是因为 DynamoDB 从不同时间序列识别最大的贡献因素：一个仅用于分区键，另一个用于分区和排序键对。
+ **受限的键模式计费**：此模式下，只有受限的请求才生成可计费的事件。只有当请求导致 `ProvisionedThroughputExceededException`、`ThrottlingException` 或 `RequestLimitExceeded` 错误时，才会生成事件。如果表或全局二级索引包含排序键，则每个被节流的项目表示两个事件（分区键跟踪以及分区键 \$1 排序键跟踪）。

### 计费示例
<a name="contributorinsights_HowItWorks.Billing.Examples"></a>

例如，假设应用程序执行以下 DynamoDB 操作：一个 `GetItem`、一个 `PutItem` 和一个 `BatchWriteItem`，放置了五个项目。此外还假设 `PutItem` 操作受限制，但所有其他操作都成功。
+ **访问的键和受限的键模式**
  + 如果表或全局二级索引只有一个分区键，则将产生 7 个事件（对于 `GetItem` 为 1 个事件，对于 `PutItem` 为 1 个事件，对于 `BatchWriteItem` 为 5 个事件）。
  + 如果表或全局二级索引有一个分区和一个排序键，则将产生 14 个事件（对于 `GetItem` 为 2 个事件，对于 `PutItem` 为 2 个事件，对于 `BatchWriteItem` 为 10 个事件）。
+ **受限的键模式**
  + 如果表或全局二级索引只有一个分区键，则将产生 1 个事件（仅为被节流的 `PutItem` 生成）。
  + 如果表或全局二级索引有一个分区键和一个排序键，则将产生 2 个事件（为被节流的 `PutItem` 生成 2 个事件）。

  在受限的键模式下，成功的 `GetItem` 和 `BatchWriteItem` 操作不生成任何事件。

### 常见计费因素
<a name="contributorinsights_HowItWorks.Billing.CommonFactors"></a>

无论采用什么模式或者返回的项目数量有多少，一个 `Query` 操作始终产生 1 个事件。

与其他 DynamoDB 功能不同，CloudWatch Contributor Insights for DynamoDB 计费*不会*因以下因素而有所不同：
+ [容量模式](capacity-mode.md)（预置与按需）
+ 执行读取请求还是写入请求
+ 读取或写入的项目大小 (KB)