Azure Metrics Data plane API で何が変わったのか？

## はじめに
こんにちは、Datadog Japan で Sales Engineer をしている [**AoTo**](https://qiita.com/AoTo0330) です。

この投稿は **[<font color="#6495ED">AoTo Advent Calendar 2023</font>](https://qiita.com/advent-calendar/2023/aoto) 24日目**の記事です。

**Azure Metrics Data plane API** は 2023年4月26日に **Public Preview** が発表され、2023年8月1日に**適用**されると発表されました。この変更により、従来の [Azure Monitor Metrics REST API](https://www.datadoghq.com/ja/blog/monitor-enterprise-azure-environments-with-datadog/#faster-metric-collection-with-the-azure-monitor-metrics-data-plane-api) と比べて高効率・高パフォーマンスでの API 利用が可能となります。

https://techcommunity.microsoft.com/t5/azure-observability-blog/azure-monitor-announcing-public-preview-of-azure-metrics-data/ba-p/3805986

:::note warn
この記事は非公開の内容を含まないように配慮し、公式で公開されている内容をまとめて記載しています。そのため、一部説明不足の点がある可能性がございます。
:::


## Data plane API って何？
Data plane API について学びたくても、現状はリリースページ以外に情報がありません。しかし、実際の適用は発表された日程とは異なっていました。

Azure アカウント宛に送信されたメールを確認すると、この API を利用している場合に通知が送られ、8月1日の課金の有効化から10月1日の有効化に遅延したことが伺えます。

| 6/29 通知 | 9/14 通知 |
| -- | -- |
| ![Billing for Azure Monitor metrics data plane REST API is starting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363567/91da80c7-abfd-ee03-eccc-a9fa454ab4d9.png) | ![Billing for Azure Monitor metrics data plane REST API will now start 1 October 2023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363567/ab8e1593-250f-44b8-3af7-ab17330b297b.png) |

> You're receiving this email because you currently use the [metrics data plane REST API](https://learn.microsoft.com/ja-jp/azure/azure-monitor/essentials/metrics-store-custom-rest-api) feature of Azure Monitor.
> (中略)
> Metrics data plane Rest API prices are available on the [Azure Monitor pricing page](https://azure.microsoft.com/ja-jp/pricing/details/monitor/).

どうやら反映後からは、[Azure Monitor Metrics REST API](https://learn.microsoft.com/ja-jp/azure/azure-monitor/essentials/metrics-store-custom-rest-api) ページに反映されているようです。つまり、Data plane API は Metrics REST API の新しい仕様としての名称であることがわかります。

## Data plane API の変更
Microsoft 公式の [Tech Community 向けブログ](https://techcommunity.microsoft.com/t5/azure-observability-blog/azure-monitor-announcing-public-preview-of-azure-metrics-data/ba-p/3805986)では、「大容量のクエリ体験でリソースの洞察・収集をより効率的にする」と言う説明があります。具体的な変更点は以下の3点です。

 - クエリ制限の緩和
 - 効率性
 - パフォーマンス改善

それぞれの詳細を見ていきましょう。
以降は変更前を **Metric API**、変更後を **Data plane API** と呼称します。

### クエリ制限の緩和
<INS>Metric API は12,000件/時の API 呼び出ししか許可されませんが、Data plene API では360,000件/時の API 呼び出しが許可</INS>されます。純粋に30倍のクエリを実行できるようになったことにより、複数のリソースを持つ大規模なサブスクリプションを持っている利用者の Azure テナント全体のメトリクス情報を取得することが可能となりました。

### 効率性
<INS>Data plane API は、最大 50 個のリソース ID をバッチで呼び出し</INS>できます。
単一の API 呼び出しで複数リソースのメトリクスを収集することで、リソースごとに複数の API 呼び出しを行うよりも効率的です。つまり今まで50個のリソースに対し50回の API 呼び出しを行っていたところ、1回の API 呼び出しで 50 個のリソースのメトリクスを呼び出せます。

### パフォーマンス改善
Data plane API の効率的な API 呼び出しにより、従来と同量のメトリクスを呼び出す場合でも呼び出し回数を減らすことができるため、クライアント側サービスのパフォーマンスを向上させることができます。これにより、スロットリングや過度の遅延が発生していた環境のパフォーマンスを改善することができます。

## getBatch API の存在
前述の**効率性**で触れた最大50個のリソースへのバッチ API 呼び出しは [getBatch:Metrics API](https://learn.microsoft.com/en-us/rest/api/monitor/metrics-batch/batch) として仕様が公開されています。

従来の Metric API は Azure Resource Manager(ARM) の背後でホストされている API であり、単一リソースのメトリクスを API 呼び出しするためには特定のエンドポイント URL を指定する必要がありました。

Data plane API への変更で、エンドポイントがリソース固有のものからメトリクス全体で共通となったことで、複数リソースを単一の API 呼び出しで実行できるように変更されています。

Metric API は[`management.azure.com`](https://learn.microsoft.com/en-us/rest/api/azure/)のように ARM の共通のエンドポイント URL だったのに対し、Data plane API は [`metrics.monitor.azure.com`](https://learn.microsoft.com/en-us/rest/api/monitor/metrics-batch/batch)という個別のエンドポイント URL が用意されています。

```zsh
POST {endpoint}/subscriptions/{subscriptionId}/metrics:getBatch?metricnamespace={metricnamespace}&metricnames={metricnames}&api-version=2023-05-01-preview

{
  "resourceids": [
    "/subscriptions/{subscriptionId}/resourceGroups/{resourceGropuName}/providers/Microsoft.Storage/storageAccounts/TestStorage1",
    "/subscriptions/{subscriptionId}/resourceGroups/{resourceGropuName}/providers/Microsoft.Storage/storageAccounts/TestStorage2",
  ]
}
```
このように、"resouceids"で50個のリソースまで指定することが可能です。

そのため、すべての Azure Monitor を呼び出す API が移行されたわけではなく、[List:Metrics API](https://learn.microsoft.com/ja-jp/rest/api/monitor/metrics/list) は `management.azure.com`を利用していることが伺えます。

## Datadog と Data plane API
Datadog はこの Data palne API をプライベートプレビューの段階からテストに参加し、大規模なエンタープライズのお客様であっても Azure の環境を Datadog で監視できることを実証していました。

https://www.datadoghq.com/ja/blog/monitor-enterprise-azure-environments-with-datadog/#faster-metric-collection-with-the-azure-monitor-metrics-data-plane-api

今回の変更により、Datadog を利用されているお客様は変更を行う必要なく、Datadog への Data plane API を利用した Azure テナント全体のメトリクスの取り込みをご利用いただけます。

Datadog と同様に Metric API から Data plane API(Batch API) への移行を行う方法として、Microsoft 公式ドキュメントでも[メトリック API から getBatch API に移行する方法](https://learn.microsoft.com/ja-jp/azure/azure-monitor/essentials/migrate-to-batch-api)が公開されています。

https://learn.microsoft.com/ja-jp/azure/azure-monitor/essentials/migrate-to-batch-api

前述の通り、リクエストの形式やエンドポイント URL が変わるため、ある程度大幅な変更を行う必要があります。取得対象のメトリクスの一覧を呼び出す [List:Metrics API](https://learn.microsoft.com/ja-jp/rest/api/monitor/metrics/list) に変更はないため、メトリクスの取得時の設計にどのような変更を加える必要があるかのみに集中して取り組めます。

## おわりに
Azure Monitor Metrics における REST API の仕様変更について解説しました。

このように、Azure は Datadog をはじめとするサードパーティ監視ソリューションと連携を強めており、小規模なお客様はもちろん大規模な環境を稼働しているエンタープライズレベルのお客様であっても同様に Datadog を利用して環境全体の監視を行っていただくことが可能です。

Azure と Datadog の連携は今後もますます強化されていくので、監視ソリューションとして Datadog をご検討いただければ嬉しいです🐶