ログを照会する

完了

Azure リソースによって生成される Azure 診断ログからは、それらのリソースの詳細なオペレーショナル データが得られます。 これらのリソース ログは、診断設定を使用して収集されます。

アクティビティやプラットフォームのメトリックなど一部のログは自動的に収集されますが、リソース ログを収集するには診断設定を作成する必要があります。 これらのログは Azure Monitor の外部に転送することができます。 Azure Cosmos DB アカウントの診断設定を有効にすると、"Log Analytics ワークスペース"、"イベント ハブ"、"ストレージ アカウント" に転送されるようになります。

Log Analytics ワークスペースにデータを転送すると、"Kusto クエリ言語" (KQL) を使用して照会することのできるテーブルにログが書き込まれます。 そのため、これらのテーブルに格納された診断データを使用するためには、Kusto クエリを読み書きする知識が非常に重要となります。 これらのテーブルには、Azure Diagnostics と呼ばれる従来の汎用的なテーブルとリソース固有のテーブル (推奨) とがあります。

Azure Cosmos DB の診断設定を作成する

診断設定は、Azure portal、REST API、PowerShell、Azure CLI など複数の方法で作成できます。

Azure portal を使用して診断設定を作成するには、Azure Cosmos DB アカウントに移動し、Monitoring セクションの [診断設定] を選択します。 既存の診断設定を編集するか、[+ 診断設定を追加する] を選択して、収集するログとその転送先を選択します。

Diagram that shows the diagnostic settings options for Azure Cosmos DB.

NoSQL API ログ テーブルは次のとおりです。

  • DataPlaneRequests - このテーブルには、データの作成、更新、削除、取得を実行する操作のバックエンド要求がログされます。
  • QueryRuntimeStatistics - このテーブルには、NoSQL API アカウントに対するクエリ操作のログが記録されます。
  • PartitionKeyStatistics - このテーブルには、論理パーティション キーの統計情報 (推定 KB) がログされます。 ストレージの偏りをトラブルシューティングするときに役立ちます。
  • PartitionKeyRUConsumption - このテーブルには、パーティション キーの消費量 (RU/秒) が随時集計されてログされます。 ホット パーティションのトラブルシューティングに役立ちます。
  • ControlPlaneRequests - このテーブルには、レプリケーション設定に対するリージョンの追加と削除など、Azure Cosmos DB アカウントの制御データがログされます。

診断クエリに関する問題のトラブルシューティング

Log Analytics に送信された Azure Cosmos DB の診断データは、AzureDiagnostics テーブルに送信されるか、またはリソース固有のテーブルに送信されます。 データの送信先として推奨されるモードは、リソース固有のテーブルです。そうすれば、診断設定のオプションで選択した各ログにそれぞれ固有のテーブルが割り当てられます。 このモードを選択した方が診断データが扱いやすく、使用されているスキーマの検出が容易になり、また、待ち時間とクエリ時間のパフォーマンスも向上します。

AzureDiagnostics クエリ

従来のモードを選択した場合、診断データは AzureDiagnostics テーブルに格納され、すべての kusto クエリはこのテーブルに対して実行されます。 このテーブルには複数の Azure リソースからデータが追加されますが、where 句にフィルターとして ResourceProvider=="MICROSOFT.DOCUMENTDB" を追加すれば、Azure Cosmos DB のエントリだけが返されます。 さらに、"診断設定" で選んだ複数の異なるログを区別するには、Category 列に対するフィルターを追加します。 たとえば、QueryRuntimeStatistics ログのドキュメントを取得するには、WHERE 句として | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="QueryRuntimeStatistics" を追加します。 Kusto では大文字と小文字が区別されるので、列名は、大文字と小文字を区別して正しく入力してください。 AzureDiagnostics テーブルを使用した Kusto クエリの例を 2 つほど見てみましょう。

  • このクエリは、過去 1 時間に実行された Azure Cosmos DB の各種操作の数と課金対象の合計要求を返します。
AzureDiagnostics 
| where TimeGenerated >= ago(1h)
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize OperationCount = count(), TotalRequestCharged=sum(todouble(requestCharge_s)) by OperationName
| order by TotalRequestCharged desc 
  • 過去 1 時間の要求を対象に、すべての成功 (状態 200) した要求とレート制限 (状態 429) された要求の時間グラフを返すクエリを作成します。 要求は 10 分ごとに集計されます。
AzureDiagnostics 
| where TimeGenerated >= ago(1h)
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize requestcount=count() by statusCode_s, bin(TimeGenerated, 10m)
| render timechart 

リソース固有のクエリ

AzureDiagnostic クエリとは異なり、リソース固有のクエリは、診断設定ダイアログで選択したログ カテゴリごとに作成される各テーブルに対して実行されます。 これらのテーブルを使用するには、上記のテーブル名にプレフィックスとして、CDB という文字列を付加します。 2 つほど例を見てみましょう。

  • このクエリは、過去 1 時間に実行された Azure Cosmos DB の各種操作の数と課金対象の合計要求を返します。
CDBDataPlaneRequests
| where TimeGenerated >= ago(1h)
| summarize OperationCount = count(), TotalRequestCharged=sum(todouble(RequestCharge)) by OperationName
| order by TotalRequestCharged desc 
  • 過去 1 時間の要求を対象に、すべての成功 (状態 200) した要求とレート制限 (状態 429) された要求の時間グラフを返すクエリを作成します。
CDBDataPlaneRequests 
| where TimeGenerated >= ago(2h)
| summarize requestcount=count() by StatusCode, bin(TimeGenerated, 10m)
| render timechart