Azure cosmosDB のアラート設定について

## 概要

- Azure CosmosDB の監視方法には以下の 2 通りがある。ここではそれぞれについて調査した。

  - Azure Monitor を使用した Azure CosmosDB の監視では、「メトリックを使用した監視」と「診断ログを使用した監視」が可能

  - Azure Monitor for Azure CosmosDB と呼ばれる、比較的新しい監視方法が提供され、すべての Azure CosmosDB リソースの全体的なパフォーマンスなどを統合された対話型エクスペリエンスで表示可能

### Azure Monitor のメトリックを使用した監視

- Azure Monitor からダッシュボードを作成し、Azure CosmosDB のアカウントメトリックを監視可能（既定では特に構成準備などは必要なし）

- 監視されるメトリックは 1 分単位で収集され、保有期間は 30 日間

- オプション「Azure CosmosDB ポータルからの監視」で使用できるメトリックの多くはここでも使用可能

- メトリックのディメンション値(コンテナー名)などは大文字と小文字を区別しないため、命名には注意。

- 詳細は「[メトリックデータの分析](https://docs.microsoft.com/ja-jp/azure/cosmos-db/monitor-cosmos-db#analyze-metric-data)」を参照

### Azure Monitor の診断ログを使用した監視

- Azure Monitor からダッシュボードを作成し、Azure CosmosDB アカウントのログを監視可能

- 1 秒単位で発生するイベントやとれーすなどのテレメトリは、ログとして格納される（コンテナのスループットが変化した場合、CosmosDB アカウントのプロパティが変更され、これらのイベントがログ内でキャプチャされる）

- 収集したデータに対してクエリを実行することでログ分析可能

- 詳細は「[ログデータの分析](https://docs.microsoft.com/ja-jp/azure/cosmos-db/monitor-cosmos-db#analyze-log-data)」を参照

---

### ※ 補足情報

#### Azure CosmosDB ポータルからの監視

- Azure Cosmos の[メトリック]タブ内で使用可能なメトリックを使用して監視可能

- メトリックの保有期間は 7 日間（規定）

- 詳細は「[Azure Cosmos DB ポータルから収集したデータの監視](https://docs.microsoft.com/ja-jp/azure/cosmos-db/monitor-cosmos-db#monitoring-from-azure-cosmos-db)」を参照

#### SDK を使用したプログラムによる監視

- NET、Java、Python、Node.js SDK、および REST API のヘッダーを使用して、Azure Cosmos アカウントをプログラムによって監視可能

![monitoring-options-portal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/e82dfa89-ea0e-b50d-e4b8-f97c1d9d111b.png)


---

## Azure CosmosDB のメトリックデータの分析

Azure Monitor のメニューから[Metrics]を開き、メトリックスエクスプローラを使用して、Azure CosmosDB のメトリックスを分析することが可能（詳細は「[Azure メトリックスエクスプローラの概要](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/metrics-getting-started)）。

以下のディメンションをこれらのメトリックと共に使用可能。

- CollectionName
- DatabaseName
- OperationType
- リージョン
- StatusCode

### Azure CosmosDB の操作レベルのメトリックを表示する

1. Azure Portal にログイン。

1. 左側のナビゲーションバーから[監視]を選択し、[メトリック]を選択する。

    ![monitor-metrics-blade.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/747c615f-2ea9-f09d-8c4c-3adf9f71e741.png)


1. [メトリック] ウィンドウから、 [リソースの選択] を選択し、必要な サブスクリプション と リソース グループ を選択する。その後、 [リソースの種類] で、 [Azure Cosmos DB accounts](Azure Cosmos DB アカウント) を選択し、既存の Azure Cosmos アカウントの一つを選択し、 [適用] を選択します。

  ![select-cosmosdb-account.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/ce730416-d24d-4e82-e034-c8a0cb2930cd.png)


1. 次に、使用可能なメトリックの一覧から、メトリック一覧を選択する。要求ユニット、ストレージなど固有メトリックを選択できる。この例では、[要求ユニット]および集計地としての[Avg]を選択する。

   ![metric-types.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/a349e746-0e62-33a6-5154-b8e975be4edf.png)

### メトリックにフィルターを追加する

メトリックと特定の CollectionName などのグラフをフィルターすることができる。

フィルターを適用するには、[フィルターの追加]を選択し、必要なプロパティ(ここでは OperationType) を選択し、Query などの値を選択する。

 ![add-metrics-filter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/91df6814-6159-ce65-4849-e9c2493e596c.png)

[Apply splitting]オプションを使用すると、メトリックをグループ化できる。例として、要求ユニットを操作の種類ごとにグループ化し、すべての操作のグラフを一度に表示することが可能。

![apply-metrics-splitting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/5065bf19-ebd1-933f-c150-26f5ed514fc7.png)


## ログデータの分析

Azure Monitor のログデータはテーブルに格納され、各テーブルには独自の一位のプロパティセットがある。Azure CosmosDB は次のテーブルにデータを格納する。

| テーブル         | 説明                                                                                                |
| ---------------- | --------------------------------------------------------------------------------------------------- |
| AzureDiagnostics | リソースログを格納するための共通テーブル。CosmosDB のリソースログは`MICROSOFT.DOCUMENTDB`で識別可能 |
| AzureActivity    | アクティビティログのすべてのレコードを格納する共通テーブル                                          |

> Azure Cosmos DB のメニューから [ログ] を選択すると、クエリのスコープが現在の Azure Cosmos データベースに設定された状態で Log Analytics が開く。 つまり、ログ クエリには、そのリソースからのデータのみが含まれることになる。 他のデータベースのデータや他の Azure サービスのデータを含むクエリを実行する場合は、 Azure Monitor のメニューから [ログ] を選択する。 詳細については、「[Azure Monitor Log Analytics のログ クエリのスコープと時間範囲](https://docs.microsoft.com/ja-jp/azure/azure-monitor/log-query/scope)」を参照。

### Azure Monitor での Azure CosmosDB Log Analitics のクエリ

[ログ検索]検索バーに入力して、Azrue CosmosDB コンテナーの監視に利用できるクエリの例を以下に示す。

#### 指定した期間の Azure CosmosDB のすべての診断ログをクエリする

    AzureDiagnostics
    | where ResourceProvider=="Microsoft.DocumentDb" and Category=="DataPlaneRequests"

#### リソースでグループ分けされたすべての操作をクエリする

    AzureActivity
    | where ResourceProvider=="Microsoft.DocumentDb" and Category=="DataPlaneRequests"
    | summarize count() by Resource

#### リソースでグループ分けわれたすべてのユーザーアクティビティをクエリする

    AzureActivity
    | where Caller == "test@company.com" and ResourceProvider=="Microsoft.DocumentDb" and Category=="DataPlaneRequests"
    | summarize count() by Resource

---

## Azure Monitor for Azure CosmosDB

Azure CosmosDB の監視に関して、比較的新しいサービスがあったため、ここで調査した。

Azure Monitor for Azure Cosmos DB は「[Azure Monitor のブック機能](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/workbooks-overview)」に基づいている。

これは、 CosmosDB のために収集されるのと同じ監視データを使用する。

Azure Monitor は、すべての Azure Cosmos DB リソースの全体的なパフォーマンス、障害、容量、および運用の正常性を、一元的な対話型エクスペリエンスで表示するために使用される。

### できること

- すべてのサブスクリプションの Azure CosmosDB リソースを 1 か所で分析可能

- 関心のあるサブスクリプションとリソースに限定して評価することも可能

- 特定の Azure CosmosDB リソースについて、カテゴリごとに問題を診断・分析可能で、メトリック表示・詳細把握が可能

> 本機能へのアクセスに対しては料金はかからないが、有効にした Azure Monitor の基本機能に対してのみ課金が発生する。「[Azure Monitor の価格の詳細(https://azure.microsoft.com/pricing/details/monitor/)]」を参照。

### Azure CosmosDB の使用率とパフォーマンスのメトリックを表示

1. Azure portal にログイン

1. 「監視」を検索し、[監視]を選択する

    ![search-monitor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/638e0ceb-59fc-2a63-a634-7d78881cecfa.png)


1. [Cosmos DB]を選択する

    ![cosmos-db.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/510c3009-fa77-96b9-ed76-0ff8238bd4da.png)


### 主な機能

CosmosDB において、以下の情報を確認することができる。

- CosmosDB の概要
- エラーログ情報
- ストレージ容量情報
- 操作履歴情報

## 参考資料

- [Azure Cosmos DB の監視](https://docs.microsoft.com/ja-jp/azure/cosmos-db/monitor-cosmos-db)