

# CloudWatch Contributor Insights for DynamoDB: 仕組み
<a name="contributorinsights_HowItWorks"></a>

Amazon DynamoDB は、[Amazon CloudWatch Contributor Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights.html) との統合により、テーブルやグローバルセカンダリインデックスでアクセスとスロットリングが最も多い項目に関する情報を提供します。DynamoDB は、CloudWatch Contributor Insights の[ルール](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights-RuleSyntax.html)、[レポート](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights-ViewReports.html)、[レポートデータのグラフ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights-GraphReportData.html)を通じて、この情報を提供します。

CloudWatch Contributor Insights for DynamoDB は、DynamoDB テーブルのパフォーマンスに影響を与えないように設計されています。

詳細については、「Amazon CloudWatch ユーザーガイド」の「[Contributor Insights を使用して高カーディナリティデータを分析する](https://docs.aws.amazon.com/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 には、さまざまなモニタリングニーズを満たす 2 つの異なるモードが用意されています。

### スロットリングされたキーモード
<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 コンソール、AWS CLI、または API を使用して、いつでもモードを切り替えることができます。モードを切り替える場合:
+ 既存の CloudWatch ルールが新しいモードに合わせて更新されます
+ スロットリングされたキー CloudWatch ルールはそのまま残り、スロットリングメトリクスの継続的な履歴データを維持します。
  + *スロットリングされたキー*モードから*アクセスおよびスロットリングされたキー*モードに切り替えると、既存のスロットリングされたキールールが保持され、新しいアクセスキールールが作成されます。
  + *アクセスおよびスロットリングされたキー*モードから*スロットリングされたキー*モードに切り替えると、スロットリングされたキールールのみが保持され、アクセスキールールは削除されます。
+ 請求は、新しいモードのイベント処理を反映するようにすぐに調整されます。

## CloudWatch Contributor Insights for DynamoDB のルール
<a name="contributorinsights_HowItWorks.Rules"></a>

テーブルまたはグローバルセカンダリインデックスで DynamoDB の CloudWatch Contributor Insights を有効にすると、DynamoDB は選択したモードに基づいてユーザーに代わって[ルール](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights-RuleSyntax.html)を作成します。

**注記**  
DynamoDB テーブルで Contributor Insights を有効にする場合、Contributor Insights ルールによる制限が適用されます。詳細については、「[CloudWatch サービスのクォータ](https://docs.aws.amazon.com/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 を無効にすると、そのテーブルまたはグローバルセカンダリインデックス用に作成されたルールが自動的に削除されます
DynamoDB によって作成された CloudWatch Contributor Insights ルールで [GetInsightRuleReport](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetInsightRuleReport.html) オペレーションを使用すると、`MaxContributorValue` と `Maximum` のみが有用な統計を返します。このリストの他の統計は、意味のある値を返しません。
CloudWatch Contributor Insights for DynamoDB の寄稿者の上限は 25 です。25 人を超える寄稿者をリクエストすると、エラーが返されます。

CloudWatch アラームは、CloudWatch Contributor Insights for DynamoDB [ルール](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights-RuleSyntax.html)を使用して作成できます。これにより、項目が `ConsumedThroughputUnits` または `ThrottleCount` の特定のしきい値を超えたとき、または満たすときに通知を受け取ることができます。詳細については、「[Contributor Insights メトリクスデータでのアラームの設定](https://docs.aws.amazon.com/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 x 消費された書き込み容量の単位) \+ 消費された読み込み容量の単位*
+ オンデマンド - *(3 x 書き込みリクエスト単位) \+ 読み込みリクエスト単位*

DynamoDB コンソールで、グラフの各データポイントは 1 分間にわたる `ConsumedThroughputUnits` の最大値を表します。例えば、`ConsumedThroughputUnits` のグラフ値が 180,000 である場合は、1 分間以内の 60 秒間にわたり、項目別の最大スループットを 1,000 の書き込みリクエスト単位または 3,000 の読み取りリクエスト単位として、項目が継続的にアクセスされたことを示します (3,000 x 60 秒)。つまり、グラフ化された値は、各 1 分間以内で最もトラフィックの多い 1 分間を表します。`ConsumedThroughputUnits` メトリクスの時間粒度は CloudWatch コンソールで変更できます (1 分間ではなく 5 分間のメトリクスを表示するなど)。

明確な異常値がなく、いくつかの密接にクラスター化された行が表示されている場合、指定された時間枠内で項目間でワークロードのバランスが比較的取れていることを示しています。グラフに接続線ではなく孤立したポイントが表示されている場合は、項目が短時間だけ頻繁にアクセスされたこと示します。

テーブルまたはグローバルセカンダリインデックスにソートキーがある場合、DynamoDB は 2 つのグラフを作成します。1 つは最もアクセス頻度の高いパーティションキー用、もう 1 つは最もアクセス頻度の高いパーティションキーとソートキーのペア用です。パーティションキーレベルのトラフィックは、パーティションキー専用のグラフでのみ確認できます。項目レベルのトラフィックは、パーティションキーとソートキーのペア用グラフで確認できます。

### 最もスロットリングされた項目
<a name="contributorinsights_HowItWorks.Graphs.most-throttled"></a>

このグラフは両方のモードで使用できます。このグラフを使用して、テーブルまたはグローバルセカンダリインデックスで最もスロットリングされた項目を特定します。グラフの Y 軸に `ThrottleCount` が、X 軸に時間が表示されます。上位 N 個の各キーは独自の色で表示され、X 軸の下に凡例が表示されます。**

DynamoDB は `ThrottleCount` を使用してスロットル頻度を測定します。これは、`ProvisionedThroughputExceededException`、`ThrottlingException`、および `RequestLimitExceeded` エラーのカウントです。

グローバルセカンダリインデックスの書き込み容量が不十分なため発生した書き込みスロットルは測定されません。グローバルセカンダリインデックスの *[最もアクセスされた項目]* グラフを使用して、書き込みスロットリングを引き起こす可能性のある不均衡なアクセスパターンを特定できます。詳細については、「[グローバルセカンダリインデックスに対するプロビジョニングされたスループットに関する考慮事項](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.ThroughputConsiderations)」を参照してください。

DynamoDB コンソールの場合、グラフの各データポイントは 1 分間のスロットルイベント数を表します。

このグラフにデータが表示されない場合は、リクエストがスロットリングされていないことを示しています。グラフに接続線ではなく孤立したポイントが表示されている場合は、項目が短時間に頻繁にスロットリングされたことを示します。

テーブルまたはグローバルセカンダリインデックスにソートキーがある場合、DynamoDB は 2 つのグラフを作成します。1 つは最もスロットリングされたパーティションキー用、もう 1 つは最もスロットリングされたパーティションキーとソートキーのペア用です。パーティションキーのみのグラフではパーティションキーレベルのスロットルカウントを、パーティションキーとソートキーのグラフでは項目レベルのスロットルカウントを確認できます。

**注記**  
*スロットリングされたキー*モードでは、表示されるグラフのタイプはこれだけです。これらのグラフにデータが表示されない場合は、スロットリングが発生しておらず、テーブルのパフォーマンスが正常であることを示しています。

### レポートの例
<a name="contributorinsights_HowItWorks.Graphs.examples"></a>

以下の例は、パーティションキーとソートキーの両方が*アクセスおよびスロットリングされたキー*モードにあるテーブルに対して作成されたレポートを示しています。*スロットリングされたキー*モードでは、このレポートのスロットリング関連の部分のみが表示されます。

![最もアクセスされた項目と最もスロットリングされた項目を示す 4 つの異なる Contributor Insights レポート。](http://docs.aws.amazon.com/ja_jp/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 は、グローバルテーブルのレプリカを個別のテーブルとしてモニタリングします。Contributor Insights のグラフに表示されるレプリカのパターンは、AWS リージョン間で異なる場合があります。これは、書き込みデータはグローバルテーブル内のすべてのレプリカにレプリケートされますが、リージョンにバインドされた読み込みトラフィックは各レプリカで処理できるためです。

各レプリカは、異なる 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 で発行されるプライマリキーデータは、AWS 所有のキー で暗号化されます。ただし、DynamoDB は AWS マネージドキー やカスタマーマネージドキーもサポートしています。

CloudWatch Contributor Insights for DynamoDB は、頻繁にアクセスされ、スロットリングされる項目のパーティションキーとソートキー (該当する場合) を表示します。CloudWatch Contributor Insights は暗号化された DynamoDB テーブルで動作しますが、テーブルの設定された暗号化とは別の独自の Amazon 所有の暗号化コンテキストを使用することに注意してください。

DynamoDB テーブルのプライマリキーに機密情報が含まれており、組織のセキュリティポリシーで暗号化プロセスを完全に制御する必要がある場合、CloudWatch Contributor Insights を有効にすることが適切ではない場合があります。

### きめ細かなアクセスコントロール
<a name="contributorinsights_HowItWorks.OtherFeatures.FGAC"></a>

CloudWatch Contributor Insights for DynamoDB は、きめ細かなアクセスコントロール (FGAC) を使用してテーブル別に動作を調整することはありません。つまり、適切な CloudWatch 許可を持つユーザーは、CloudWatch Contributor Insights のグラフで FGAC で保護されたプライマリキーを表示できます。

テーブルのプライマリキーに、CloudWatch に公開したくない FGAC で保護されたデータが含まれている場合、そのテーブルに対して CloudWatch Contributor Insights for DynamoDB を有効にしないでください。

### アクセスコントロール
<a name="contributorinsights_HowItWorks.OtherFeatures.AccessControl"></a>

DynamoDB コントロールプレーンの許可と CloudWatch データプレーンの許可を制限することにより、AWS Identity and Access Management (IAM) を使用して、CloudWatch Contributor Insights for DynamoDB へのアクセスを制御します。詳細については、「[CloudWatch Contributor Insights for DynamoDB での IAM の使用](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Contributor_Insights_IAM.html)」を参照してください。

## CloudWatch Contributor Insights for DynamoDB の請求
<a name="contributorinsights_HowItWorks.Billing"></a>

Contributor Insights for DynamoDB の料金は、毎月の請求書の [CloudWatch](https://aws.amazon.com/cloudwatch/pricing/) セクションに表示されます。これらの料金は、処理された DynamoDB イベント数と選択したモードに基づいて計算されます。

### モード別の請求
<a name="contributorinsights_HowItWorks.Billing.ModeComparison"></a>

2 つの Contributor Insights モードの請求特性は異なります。
+ **アクセスおよびスロットリングされたキーモードの請求** - このモードでは、[データプレーン](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.API.html#HowItWorks.API.DataPlane)オペレーションを介して書き込みまたは読み取りされる各項目は、リクエストが成功したかスロットリングされたかに関係なく、1 つのイベントを表します。テーブルまたはグローバルセカンダリインデックスにソートキーが含まれている場合、読み込みまたは書き込みされる各項目は 2 つのイベントを表します。これは、DynamoDB が別々の時系列から上位の貢献者を識別するためです。1 つはパーティションキー専用の時系列、もう 1 つはパーティションキーとソートキーのペア用の時系列です。
+ **スロットリングされたキーモードの請求** - このモードでは、スロットリングされたリクエストのみが請求可能なイベントを生成します。イベントは、リクエストが `ProvisionedThroughputExceededException`、`ThrottlingException`、または `RequestLimitExceeded` エラーになった場合にのみ生成されます。テーブルまたはグローバルセカンダリインデックスにソートキーが含まれている場合、スロットリングされた各項目は 2 つのイベント (パーティションキーの追跡とパーティション \+ ソートキーの追跡) を表します。

### 請求例
<a name="contributorinsights_HowItWorks.Billing.Examples"></a>

例えば、5 つの項目を配置する `GetItem`、`PutItem`、`BatchWriteItem` の DynamoDB オペレーションがアプリケーションによって実行されたとします。また、`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)