Azure Cosmos DB のメトリックを使用した監視とデバッグMonitor and debug with metrics in Azure Cosmos DB

Azure Cosmos DB には、スループット、ストレージ、整合性、可用性、および待機時間のメトリックが用意されています。Azure Cosmos DB provides metrics for throughput, storage, consistency, availability, and latency. Azure portal では、これらのメトリックの集計ビューが提供されます。The Azure portal provides an aggregated view of these metrics. Azure Monitor API から Azure Cosmos DB メトリックを表示することもできます。You can also view Azure Cosmos DB metrics from Azure Monitor API. Azure Monitor からメトリックを表示する方法の詳細については、Azure Monitor からのメトリックの取得に関する記事を参照してください。To learn about how to view metrics from Azure monitor, see the Get metrics from Azure Monitor article.

この記事では、一般的なユース ケースと、Azure Cosmos DB メトリックを使用してこれらの問題を分析およびデバッグする手順について説明します。This article walks through common use cases and how Azure Cosmos DB metrics can be used to analyze and debug these issues. メトリックは 5 分間隔で収集され、7 日間保持されます。Metrics are collected every five minutes and are kept for seven days.

Azure portal からメトリックを表示するView metrics from Azure portal

  1. Azure portal にサインインしますSign into Azure portal

  2. [メトリック] ウィンドウを開きます。Open the Metrics pane. 既定では、[メトリック] ウィンドウには、Azure Cosmos アカウント内のすべてのデータベースのストレージ、インデックス、要求単位のメトリックが表示されます。By default, the metrics pane shows the storage, index, request units metrics for all the databases in your Azure Cosmos account. これらのメトリックをデータベース、コンテナー、またはリージョン別にフィルター処理することができます。You can filter these metrics per database, container, or a region. 特定の時間の粒度でメトリックをフィルター処理することもできます。You can also filter the metrics at a specific time granularity. スループット、ストレージ、可用性、待機時間、および一貫性の各メトリックの詳細が、別々のタブで提供されます。More details on the throughput, storage, availability, latency, and consistency metrics are provided on separate tabs.

    Azure portal での Cosmos DB のパフォーマンス メトリック

[メトリック] ウィンドウから、次のメトリックを入手できます。The following metrics are available from the Metrics pane:

  • スループット メトリック - このメトリックでは、消費された要求の数、またはコンテナーに対してプロビジョニングされたスループットまたはストレージの容量を超過しているために失敗した (応答コード 429) 要求の数が示されます。Throughput metrics - This metric shows the number of requests consumed or failed (429 response code) because the throughput or storage capacity provisioned for the container has exceeded.

  • ストレージ メトリック - このメトリックでは、データのサイズとインデックスの使用状況が示されます。Storage metrics - This metric shows the size of data and index usage.

  • 可用性メトリック - このメトリックでは、1 時間あたりの要求の合計に対する成功した要求の割合が示されます。Availability metrics - This metric shows the percentage of successful requests over the total requests per hour. 成功率は、Azure Cosmos DB の SLA によって定義されます。The success rate is defined by the Azure Cosmos DB SLAs.

  • 待機時間メトリック - このメトリックでは、アカウントが動作しているリージョンで Azure Cosmos DB によって観察された読み取りと書き込みの待機時間が示されます。Latency metrics - This metric shows the read and write latency observed by Azure Cosmos DB in the region where your account is operating. Geo レプリケートされたアカウントのリージョン間での待機時間を視覚化することができます。You can visualize latency across regions for a geo-replicated account. このメトリックでは、エンド ツー エンドの要求の待機時間は表されません。This metric doesn't represent the end-to-end request latency.

  • 整合性メトリック - このメトリックでは、選択した整合性モデルの最終的な整合性が示されます。Consistency metrics - This metric shows how eventual is the consistency for the consistency model you choose. マルチリージョン アカウントでは、このメトリックには、選択したリージョン間でのレプリケーションの待機時間も示されます。For multi-region accounts, this metric also shows the replication latency between the regions you have selected.

  • システム メトリック - このメトリックでは、マスター パーティションによって処理されているメタデータ要求の数が示されます。System metrics - This metric shows how many metadata requests are served by the master partition. スロットルされた要求を識別するためにも役立ちます。It also helps to identify the throttled requests.

次のセクションで、Azure Cosmos DB のメトリックを使用する一般的なシナリオについて説明します。The following sections explain common scenarios where you can use Azure Cosmos DB metrics.

成功した要求数とエラーになった要求数の把握Understand how many requests are succeeding or causing errors

まず Azure Portal を開き、 [メトリック] ブレードに移動します。To get started, head to the Azure portal and navigate to the Metrics blade. このブレードで、[1 分あたりに容量を超過した要求の数] グラフを見つけます。In the blade, find the **Number of requests exceeded capacity per 1-minute chart. このグラフには、状態コードで区分された毎分の合計要求が表示されます。This chart shows a minute by minute total requests segmented by the status code. HTTP 状態コードの詳細については、「HTTP Status Codes for Azure Cosmos DB」(Azure Cosmos DB の HTTP 状態コード) を参照してください。For more information about HTTP status codes, see HTTP status codes for Azure Cosmos DB.

最も一般的なエラー状態コードは 429 (レート制限/調整) です。The most common error status code is 429 (rate limiting/throttling). このエラーは、Azure Cosmos DB への要求がプロビジョニングされたスループットを超えることを意味します。This error means that requests to Azure Cosmos DB are more than the provisioned throughput. この問題の最も一般的な解決策は、そのコレクションの RU をスケール アップすることです。The most common solution to this problem is to scale up the RUs for the given collection.

毎分の要求数

パーティション全体のスループットの分散を決めるDetermine the throughput distribution across partitions

適切なカーディナリティのパーティション キーを持つことは、スケーラブルなアプリケーションのために重要です。Having a good cardinality of your partition keys is essential for any scalable application. パーティションごとに分けられたパーティション コンテナーのスループットの分散を決めるには、Azure Portal[メトリック] ブレードに移動します。To determine the throughput distribution of any partitioned container broken down by partitions, navigate to the Metrics blade in the Azure portal. [スループット] タブの [各物理パーティションによる 1 秒あたりの最大消費 RU] グラフにストレージの内訳が表示されます。In the Throughput tab, the storage breakdown is shown in the Max consumed RU/second by each physical partition chart. 次の図は、パーティションが左端に偏っていることでわかるように、データの分散が不適切な例です。The following graphic illustrates an example of a poor distribution of data as shown by the skewed partition on the far left.

3:05 PM に 1 つのパーティションの使用量が高い

スループット分散が不均一の場合、ホット パーティションが発生します。また、その結果、要求が調整され、再パーティションが必要になる可能性があります。An uneven throughput distribution may cause hot partitions, which can result in throttled requests and may require repartitioning. Azure Cosmos DB でのパーティション分割の詳細については、「Azure Cosmos DB でのパーティション分割とスケーリング」を参照してください。For more information about partitioning in Azure Cosmos DB, see Partition and scale in Azure Cosmos DB.

パーティション全体のストレージの分散を決めるDetermine the storage distribution across partitions

適切なカーディナリティのパーティションを持つことは、スケーラブルなアプリケーションのために重要です。Having a good cardinality of your partition is essential for any scalable application. パーティションごとに分けられたパーティション コンテナーのストレージの分散を決めるには、Azure portal の [メトリック] ブレードに移動します。To determine the storage distribution of any partitioned container broken down by partitions, head to the Metrics blade in the Azure portal. [ストレージ] タブの [上位パーティション キーで使用されるデータとインデックスのストレージ] グラフに、ストレージの内訳が表示されます。In the Storage tab, the storage breakdown is shown in the Data + Index storage consumed by top partition keys chart. 次の図は、パーティションが左端に偏っていることでわかるように、データ ストレージの分散が不適切なことを示しています。The following graphic illustrates a poor distribution of data storage as shown by the skewed partition on the far left.

不適切なデータ分散の例

グラフのパーティションをクリックすると、パーティション キーの分散が偏っている根本原因を確認できます。You can root cause which partition key is skewing the distribution by clicking on the partition in the chart.

パーティション キーによる分散の偏り

分散の偏りの原因となっているパーティション キーを特定した後は、必要に応じて、より分散されたパーティション キーでコンテナーを再パーティションします。After identifying which partition key is causing the skew in distribution, you may have to repartition your container with a more distributed partition key. Azure Cosmos DB でのパーティション分割の詳細については、「Azure Cosmos DB でのパーティション分割とスケーリング」を参照してください。For more information about partitioning in Azure Cosmos DB, see Partition and scale in Azure Cosmos DB.

データ サイズとインデックス サイズを比較するCompare data size against index size

Azure Cosmos DB の合計使用ストレージは、データ サイズとインデックス サイズ両方の組み合わせです。In Azure Cosmos DB, the total consumed storage is the combination of both the Data size and Index size. 通常、インデックス サイズは、データ サイズよりもはるかに小さいサイズです。Typically, the index size is a fraction of the data size. Azure Portal の [メトリック] ブレードの [ストレージ] タブには、データとインデックスに基づくストレージ使用量の内訳が表示されます。In the Metrics blade in the Azure portal, the Storage tab showcases the breakdown of storage consumption based on data and index.

// Measure the document size usage (which includes the index size)  
ResourceResponse<DocumentCollection> collectionInfo = await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri("db", "coll"));
 Console.WriteLine("Document size quota: {0}, usage: {1}", collectionInfo.DocumentQuota, collectionInfo.DocumentUsage);

インデックス領域を節約するには、インデックス ポリシーを調整します。If you would like to conserve index space, you can adjust the indexing policy.

クエリの実行速度が遅い原因をデバッグするDebug why queries are running slow

SQL API SDK の Azure Cosmos DB は、クエリ実行の統計情報を提供します。In the SQL API SDKs, Azure Cosmos DB provides query execution statistics.

IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
 UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName),
 "SELECT * FROM c WHERE c.city = 'Seattle'",
 new FeedOptions
 {
 PopulateQueryMetrics = true,
 MaxItemCount = -1,
 MaxDegreeOfParallelism = -1,
 EnableCrossPartitionQuery = true
 }).AsDocumentQuery();
FeedResponse<dynamic> result = await query.ExecuteNextAsync();

// Returns metrics by partition key range Id
IReadOnlyDictionary<string, QueryMetrics> metrics = result.QueryMetrics;

QueryMetrics は、クエリの各コンポーネントが実行にかかった時間について詳細情報を提供します。QueryMetrics provides details on how long each component of the query took to execution. クエリの時間が長くなる最も一般的な根本原因はスキャンです。つまり、クエリがインデックスを利用できなかったことを示します。The most common root cause for long running queries is scans, meaning the query was unable to leverage the indexes. この問題は、フィルター条件を修正することで解決できます。This problem can be resolved with a better filter condition.

次のステップNext steps

Azure portal で提供されているメトリックを使用して、問題の監視とデバッグを行う方法について説明しました。You've now learned how to monitor and debug issues using the metrics provided in the Azure portal. データベースのパフォーマンスを改善する方法については、次の記事を参照してください。You may want to learn more about improving database performance by reading the following articles: