論理パーティション キーのストレージが 20 GB に近づいているかどうかを監視するアラートを作成します

適用対象: NoSQL MongoDB Cassandra Gremlin Table

Azure Cosmos DB では、論理パーティションキー の最大サイズが 20 GB に設定されています。 たとえば、UserId でパーティションされたコンテナー/コレクションがある場合、"Alice" 論理パーティション内には最大 20 GB のデータを保存できます。

アラートを使用して、20 GB の論理パーティションの制限に近づいている論理パーティション キーがあるかどうかを監視できます。 アラートは、条件がトリガーされたときに、メールの形式で通知を送信したり、Azure 関数やロジック アプリなどのアクションを実行したりすることができます。

この記事では、論理パーティション キーのストレージが 20 GB の制限 (14 GB を超えるストレージの場合) の70% を超えた場合にトリガーされるアラートを作成します。 アラートは、特定の Azure Cosmos DB アカウントの [アラート] ペイン、または Azure portal のAzure Monitor サービスから設定できます。 両方のインターフェイスに同じオプションが用意されています。 この記事では、Azure Monitor からアラートを設定する方法について説明します。

前提条件

診断ログの Partitionkeystatistics ログ カテゴリのデータを使用して、アラートを作成します。 診断ログはオプトイン機能であるため、先に進む前に有効にしておく必要があります。 この例では、推奨されるリソース固有のログ オプションを使用します。

「Azure の診断設定を使用して Azure Cosmos DB データを監視する」の手順に従って、次のことを確認します。

  • 監視する Azure Cosmos DB アカウントで診断ログが有効になっている
  • Partitionkeystatisticsログカテゴリのコレクションを構成した
  • 診断ログが Log Analytics ワークスペースに送信されている

アラートを作成する

  1. Azure portal にサインインします。

  2. 左側のナビゲーション バーから [監視] を選択し、 [アラート] を選択します。

  3. [新しいアラート ルール] ボタンを選択して [アラート ルールの作成] ペインを開きます。

  4. [スコープ] セクションの項目に入力します。

    • [リソースの選択] ペインを開き、次のように構成します。

    • サブスクリプション名を選択します。

    • [リソースの種類][Azure Cosmos DB アカウント] を選択します。

    • Azure Cosmos DB アカウントの [場所]

    • 詳細を入力すると、選んだスコープの Azure Cosmos DB アカウントの一覧が表示されます。 アラートを構成するアカウントを選択して、 [完了] を選択します。

  5. [条件] セクションの項目に入力します。

    • [条件の選択] ペインを開いて、[シグナル ページの設定] ページを開き、次のように構成します。

    • シグナルの種類として [ログ] を選択します。

    • 監視サービスとして [ Log analytics ] を選択します。

    • [シグナル名][カスタム ログ検索] を選択します。

    • クエリ エディターで、次のクエリを追加します。 クエリを実行して結果をプレビューすることができます。

    Note

    クエリが現在結果を返さなくても、まったく問題ありません。 Partitionkeystatisticsログでは、ストレージ サイズの大きな論理パーティション キーがある場合にのみデータが表示されるため、結果が返されない場合は、そのようなキーが存在しないことを意味します。 今後、このようなキーが表示される場合には、アラートがトリガーされます。

    CDBPartitionKeyStatistics
    // Get the latest storage size for each logical partition key value
    | summarize arg_max(TimeGenerated, *) by AccountName, DatabaseName, CollectionName, _ResourceId, PartitionKey 
    | extend utilizationOf20GBLogicalPartition = SizeKb / (20.0 * 1024.0 * 1024.0) // Current storage / 20GB
    | project TimeGenerated, AccountName, DatabaseName, CollectionName, _ResourceId, PartitionKey, SizeKb, utilizationOf20GBLogicalPartition
    
    • [アラートの編集を続行する] を選択します。

    • 測定セクションで、次の手順を実行します。

      • [メジャー] に [utilizationOf20GBLogicalPartition] を選択します。

      • [集計の種類] に、[最大] を選択します。

      • 要件に基づいて目的の集計粒度 を選択します。 この例では、 1 時間を選択します。 これは、アラートによって、1時間の最大ストレージ値を使用して論理パーティションのストレージ サイズが計算されることを意味します。

    • [ディメンションで分割] セクションで、次の手順を実行します。

      • 次の 6 つのディメンションを追加します。 AccountNameDatabaseNameCollectionName_ResourceIdpartitionkeysizekb。 これにより、アラートがトリガーされたときに、アラートをトリガーした特定の Azure Cosmos DB アカウント、データベース、コレクション、パーティション キーを識別できるようになります。

      • [Sizekb] ディメンションには、[現在の値と将来の値をすべてディメンション値として選択する] を選択します。

      • その他すべてのディメンション:

        • 特定の Azure Cosmos DB アカウント、データベース、コレクション、またはパーティション キーのみを監視する場合は、特定の値を選択するか、値が現在ドロップダウンに表示されていない場合はカスタム値を追加します。

        • それ以外の場合は、[現在と将来の値をすべて選択]を選択します。 たとえば、現在の Azure Cosmos DB アカウントに 2 つのデータベースと 5 つのコレクションがある場合、データベースと CollectionName ディメンションの現在の値と特徴量の値をすべて選ぶと、既存のすべてのデータベースとコレクションだけでなく、今後作成するものにもアラートが適用されるようになります。

    • [アラート ロジック] セクションでは、次の操作を実行します。

      • [条件] に [より大きい] を選択します。

      • 目的のしきい値を選択します。 クエリを記述した方法に基づき、有効なしきい値は、0 と 1 (含む) の間の数値になります。 この例では、論理パーティション キーが許容されるストレージの 70 % に達した場合にアラートをトリガーしたいので、「0.7」と入力します。 この数値は、要件に基づいて調整できます。

      • 要件に基づいて、目的の評価の頻度 を選択します。 この例では、 1 時間を選択します。 この数値はアラート評価期間の長さ以下にする必要があります。

      手順 5. を完了すると、 [条件] セクションは次の例のようになります。

      シグナル ロジックの構成例のスクリーンショット

  6. [アクション] セクションに入力します。

    • 既存のアクション グループを選択するか、新しいグループを作成します。 アクション グループを使用して、アラートがトリガーされたときに実行するアクションを定義できます。 この例では、新しいアクション グループを作成して、アラートがトリガーされたときに電子メール通知を受信するようにします。 [アクション グループの作成] ペインを開きます。

    • [基本] セクションでの設定:

      • このアクション グループを作成するサブスクリプションとリソース グループを選択します。

      • アクション グループ名 - アクション グループ名は、リソース グループ内で一意である必要があります。

      • 表示名 - この値は、通知の送信元であるアクション グループを識別するために、メールと SMS 通知に含められます。

    • [通知] セクションで、次の手順を実行します。

      • 通知の名前を指定します。

      • 通知の種類として [メール/ SMS メッセージ/プッシュ/音声] を選択し、メール、SMS、プッシュ通知、または音声の情報を入力します。

    • 省略可能: [アクション] セクションで、[アクション] セクションの Azure 関数やロジック アプリなど、実行するアクションを選択できます。

    • 次に、[確認と作成] を選択してアクション グループを作成します。

  7. [詳細] セクションに入力します。

    • アラートの名前を定義し、必要に応じて説明を入力し、アラートの重大度レベルを指定して、ルールの作成時にルールを有効にするかどうかを選択します。
    • [確認と作成] を選択し、[作成] を選択するとアラートの作成が完了します。

アラートを作成すると、10 分以内にアクティブになります。

アラートの例

Azure portal でアラートを表示するには:

  1. Azure portal にサインインします。

  2. 左側のナビゲーション バーから [監視] を選択し、 [アラート] を選択します。

アラートが発生すると、次のようなメッセージが表示されます。

  • グローバル データベース アカウント名
  • データベース名
  • コレクション名
  • 論理パーティション キー
  • 論理パーティション キーのストレージ (KB)
  • 20 GB 制限の使用率

たとえば、次のように発生したアラートでは、"ContosoTenant" の論理パーティションが 20 GB の論理パーティション ストレージの上限である0.78 に達しており、特定のデータベースとコレクションに 16 GB のデータがあることがわかります。

論理パーティション キーのサイズがしきい値を超えたときに発生するアラートのスクリーンショット

修復ステップ

20 GB の論理パーティション サイズの制限に達すると、その論理パーティションにデータを書き込むことができなくなります。 そのため、長期的なソリューションとして別のパーティション キーを使用してアプリケーションを再設計することをお勧めします。

これに時間をかけられるよう、既存のアプリケーションの論理パーティション キーの制限を一時的に増やすことを要求できます。 Azure サポート チケットを提出し、クォータの種類として、「コンテナーの論理パーティション キー サイズの一時的な増加」を選択します。これは一時的な軽減策であり、長期的な解決策としては推奨されません。これは、制限が増加しても SLA の保証が適用されないためです。 構成を削除するには、サポート チケットを提出し、クォータの種類 [コンテナーの論理パーティション キー サイズを既定値 (20 GB) に復元する] を選択します。 これは、論理パーティションの 20 GB の制限に合わせてデータを削除するか、別のパーティション キーでアプリケーションを再設計した後に実行できます。

ストレージまたはスループットにより高い制限が必要なパーティション キーを持つワークロードを管理するためのベスト プラクティスについては、「合成パーティション キーの作成」を参照してください。

次のステップ