診断クエリに関する問題のトラブルシューティング
適用対象: NoSQL MongoDB Cassandra Gremlin Table
この記事では、AzureDiagnostics (レガシ) テーブルとリソース固有 (プレビュー) テーブルに送信される診断ログを使用して、Azure Cosmos DB アカウントに関する問題のトラブルシューティングに役立つ簡単なクエリを作成する方法について説明します。
Azure Diagnostics テーブルの場合、すべてのデータが 1 つのテーブルに書き込まれるので、ユーザーはクエリを実行するカテゴリを指定する必要があります。
Resource-specific (リソース別) テーブルでは、リソースの各カテゴリーに対応する個別のテーブルにデータを書き込みます (Table API では利用できません)。 これにより、データを非常に簡単に操作できるようになり、スキーマも検出しやすくなり、インジェストの待ち時間とクエリ時間の両方でパフォーマンスが向上するため、このモードをお勧めします。
一般的なクエリ
一般的なトラブルシューティング クエリの一覧を次に示します。
実行に 3 ミリ秒より長くかかっている操作のクエリ
3 ミリ秒より長い時間がかかっている操作を検出します。
AzureDiagnostics
| where toint(duration_s) > 3 and ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| summarize count() by clientIpAddress_s, TimeGenerated
操作を実行しているユーザー エージェントのクエリ
各操作に関連付けられているユーザー エージェントを検出します。
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| summarize count() by OperationName, userAgent_s
長時間実行されている操作のクエリ
実行時間を 5 秒間隔にビン分割して、長時間実行された操作を検出します。
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| project TimeGenerated , duration_s
| summarize count() by bin(TimeGenerated, 5s)
| render timechart
データベース アカウントの上位 3 つのパーティション間の偏りを評価するために、パーティション キーの統計を取得する
物理パーティションの一般的な統計情報を取得して、偏りを測定します。
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| project SubscriptionId, regionName_s, databaseName_s, collectionName_s, partitionKey_s, sizeKb_d, ResourceId
コストの高いクエリについて要求使用量を取得する
最大のクエリの要求使用量 (RU 単位) を測定します。
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" and todouble(requestCharge_s) > 10.0
| project activityId_g, requestCharge_s
| join kind= inner (
AzureDiagnostics
| where ResourceProvider =="MICROSOFT.DOCUMENTDB" and Category == "QueryRuntimeStatistics"
| project activityId_g, querytext_s
) on $left.activityId_g == $right.activityId_g
| order by requestCharge_s desc
| limit 100
RU/s の使用が最も多い操作を検出する
使用している RU/s の量で、操作を並べ替えます。
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h)
| summarize max(responseLength_s), max(requestLength_s), max(requestCharge_s), count = count() by OperationName, requestResourceType_s, userAgent_s, collectionRid_s, bin(TimeGenerated, 1h)
100 RU/s より多くを消費しているすべてのクエリを取得する
RU/s の消費が基準量よりも多いクエリを検出します。
このクエリは、DataPlaneRequests
および QueryRunTimeStatistics
からのデータと結合されます。
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" and todouble(requestCharge_s) > 100.0
| project activityId_g, requestCharge_s
| join kind= inner (
AzureDiagnostics
| where ResourceProvider =="MICROSOFT.DOCUMENTDB" and Category == "QueryRuntimeStatistics"
| project activityId_g, querytext_s
) on $left.activityId_g == $right.activityId_g
| order by requestCharge_s desc
| limit 100
クエリの要求使用量と実行時間を取得する
特定のクエリにおける要求使用量と時間の両方の統計を取得します。
AzureDiagnostics
| where TimeGenerated >= ago(24hr)
| where Category == "QueryRuntimeStatistics"
| join (
AzureDiagnostics
| where TimeGenerated >= ago(24hr)
| where Category == "DataPlaneRequests"
) on $left.activityId_g == $right.activityId_g
| project databasename_s, collectionname_s, OperationName1 , querytext_s,requestCharge_s1, duration_s1, bin(TimeGenerated, 1min)
さまざまな操作の分布を取得する
リソースの分布で操作をグループ化します。
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h)
| summarize count = count() by OperationName, requestResourceType_s, bin(TimeGenerated, 1h)
パーティションで消費された最大スループットを取得する
物理パーティションの最大スループットを取得します。
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h)
| summarize max(requestCharge_s) by bin(TimeGenerated, 1h), partitionId_g
秒単位でのパーティション キーの RU/s の消費量に関する情報を取得する
パーティション キーごとの秒単位での RU/s の消費量を測定します。
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption"
| summarize total = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, partitionKey_s, TimeGenerated
| order by TimeGenerated asc
特定のパーティション キーについて要求使用量を取得する
パーティション キーごとの要求使用量を測定します。
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption"
| where parse_json(partitionKey_s)[0] == "2"
特定の期間に RU/s が最も多く消費された上位のパーティション キーを取得する
時間枠内の要求ユニットの消費量に基づいて、パーティション キーを並べ替えます。
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption"
| where TimeGenerated >= datetime("11/26/2019, 11:20:00.000 PM") and TimeGenerated <= datetime("11/26/2019, 11:30:00.000 PM")
| summarize total = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, partitionKey_s
| order by total desc
ストレージ サイズが 8 GB を超えるパーティション キーのログを取得する
パーティション キーごとのストレージのサイズでフィルター処理されたパーティション キーのログを検出します。
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| where todouble(sizeKb_d) > 800000
操作、要求使用量、または応答の長さの P99 または P50 の待機時間を取得する
操作の待機時間、RU/s の使用量、応答の長さについてパフォーマンスを測定します。
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2d)
| summarize percentile(todouble(responseLength_s), 50), percentile(todouble(responseLength_s), 99), max(responseLength_s), percentile(todouble(requestCharge_s), 50), percentile(todouble(requestCharge_s), 99), max(requestCharge_s), percentile(todouble(duration_s), 50), percentile(todouble(duration_s), 99), max(duration_s), count() by OperationName, requestResourceType_s, userAgent_s, collectionRid_s, bin(TimeGenerated, 1h)
コントロール プレーン ログを取得する
ControlPlaneRequests
を使用してコントロール プレーン ログを取得します。
ヒント
必ず、「キーベースのメタデータ書き込みアクセスを無効にする」で説明されているフラグをオンに切り替えてから、Azure PowerShell、Azure CLI、または Azure Resource Manager を使用して操作を実行してください。
AzureDiagnostics
| where Category =="ControlPlaneRequests"
| summarize by OperationName
次のステップ
- Azure Cosmos DB の診断設定を作成する方法の詳細については、「診断設定の作成」をご覧ください。
- Azure portal、CLI、または PowerShell を使用して診断設定を作成する方法の詳細については、「Azure でプラットフォーム ログとメトリックを収集するための診断設定の作成」を参照してください。