Azure Internet Analyzer (Preview) を試してみた、(そしておしゃべりしたら...)

さて、先日の [Microsoft Ignite 2019](https://www.microsoft.com/en-us/ignite) で [Azure Internet Analyzer](https://docs.microsoft.com/en-us/azure/internet-analyzer/internet-analyzer-overview?WT.mc_id=AZ-MVP-5003113) というヤツのプレビューが発表されました。
※ [Book of News – Microsoft Ignite 2019](https://news.microsoft.com/wp-content/uploads/prod/sites/563/2019/11/Ignite-2019-Book-of-News.pdf) の「Item 1.1.9 Azure Internet Analytics」をご確認ください。

突然出てきたちょっとナゾなヤツです。興味本位で試してみました。ご参考までにご覧いただければと思います。


# Azure Internet Analyzer とは

>Internet Analyzer は、ネットワークインフラストラクチャの変更が顧客のパフォーマンスにどのように影響するかをテストできるクライアントサイドの測定プラットフォームです。これを使用すると、ネットワークおよびインフラストラクチャの構成に基づいて、顧客が経験するパフォーマンスへの影響を定量化できます。オンプレミスから Azure に移行する場合でも、新しい Azure サービスを評価する場合でも、Internet Analyzer を使用すると、移行前にユーザーのデータと Microsoft の豊富な分析から学習し、Azure を使用したネットワークアーキテクチャの理解と最適化を行うことができます。

[参考：Internet Analyzer とは (プレビュー)](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-overview?WT.mc_id=AZ-MVP-5003113)

ちょっと難しいので簡単にいうと...

- ユーザーの End to End のインターネット パフォーマンスの測定を行うクライアントサイドツール
- ユーザーが使用するブラウザーと事前に構成した 2 つのエンドポイント (A と B) それぞれの間のレイテンシを定量的に測定する
    - Endpoint B のパフォーマンスは、Endpoint A に対して相対的に分析される
- 日・週・月単位のレポートで、定期的なネットワークパフォーマンステストの結果が確認できる
- 【注意】Azure サービスに関する分析情報を提供するものではありません

[参考：Internet Analyzer の FAQ](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-faq?WT.mc_id=AZ-MVP-5003113)
[参考：Azure Internet Analyzer の価格](https://azure.microsoft.com/ja-jp/pricing/details/internet-analyzer/?WT.mc_id=AZ-MVP-5003113)

## どんな時に使うか

たとえば

- クラウドに移行すると、パフォーマンスにどのような影響があるか
    - Endpoint A：現在のオンプレミス環境 (カスタム エンドポイント)
    - Endpoint B：事前構成済み Azure エンドポイント
- Azure CDN のパフォーマンス評価
    - Endpoint A：事前構成済み Azure  エンドポイントなど
    - Endpoint B：事前構成済み Azure CDN 用エンドポイント
- Azure Front Door のパフォーマンス評価
    - Endpoint A：事前構成済み Azure エンドポイントなど
    - Endpoint B：事前構成済み Azure Front Door 用エンドポイント
- 各リージョンの自分のエンドユーザーのグループに最適なクラウドは何か
    - Endpoint A：現在の Azure 環境 / 他クラウドサービス (カスタム エンドポイント)
    - Endpoint B：事前構成済み Azure エンドポイント

など。

[参考：Internet Analyzer とは (プレビュー) ＞ 推奨されるテスト シナリオ](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-overview?WT.mc_id=AZ-MVP-5003113#suggested-test-scenarios)


# Azure Internet Analyzer のしくみ

## 前提

まず以下のように捉えると、しくみが理解しやすいかと思います。

- Web アプリケーションとそれを利用しているユーザーという関係
- ユーザーのアクセス元を起点とするインターネット パフォーマンスを知りたい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/932b90dc-f199-24f2-9889-eb76d13c201f.png)


## 準備

1. Internet Analyzer リソース (プロファイル) を作成します。
2. テストを構成する 2 つのエンドポイントを作成します。
    - エンドポイントには、1 ピクセルのイメージを配置します。いくつかの Azure リージョンに、事前に構成済みのエンドポイントが設置されていますが、自分自身でエンドポイント (カスタム エンドポイント) を設置することも可能です。
3. Web アプリケーションに発行された JavaScript クライアント (URL) を組み込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/30d0ee99-a15f-676f-c902-0d5ad67ed8c5.png)


## 動作

1. ユーザーが Web アプリケーションにアクセスします。
2. 手順 1. により、JavaScript クライアントを Get します。
3. Get した JavaScript クライアントがエンドポイントのイメージをダウンロードし、ユーザーとエンドポイント間のレイテンシを測定します。
4. そして、Internet Analyzer に手順 3. の測定結果をアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/1f46207a-aba1-6894-ce60-e8257755a694.png)

[参考：Internet Analyzer とは (プレビュー) > 動作のしくみ](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-overview?WT.mc_id=AZ-MVP-5003113#how-it-works)


## スコアカード

スコアカードは、収集されたレイテンシの測定値を集計・分析された結果を確認できます。
各ブロックについては、以下のとおり。

1. 期間中の測定回数
    - エンドポイントごとの測定回数
2. [パーセンタイル](https://en.wikipedia.org/wiki/Percentile)
    - 50 / 75 / 95 パーセンタイルの測定値を表示します。
    - Delta は、エンドポイント A と B の差を表します。
    - 95% CI (信頼区間) は、95% の頻度で測定値が示した範囲となったことを表します。
3. 時系列
    - 測定値が時間とともにどのように変化しているかを表します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/8d76ae28-6c93-b91d-dfec-f20e056af447.png)

なお、エンドポイントあたり、1 日 100 個以上の測定値を目標にする必要があります。これを下回ると、選択したフィルターの組合せによって正しく表示されない場合があります。よって、JavaScript クライアントの実行頻度を高くなるように Web アプリケーションに組み込む必要があります。
※合成トラフィック (Azure Web Apps のパフォーマンステストなど) を用いてトラフィックを上げても測定はカウントされません。

[参考：スコアカードの解釈](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-scorecard?WT.mc_id=AZ-MVP-5003113)


# やってみよう...の前に

2019 年 12 月現在では、Internet Analyzer を利用するためには申請が必要です。
「[FAQ：プレビューに参加するにはどうすればよいですか？](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-faq?WT.mc_id=AZ-MVP-5003113#how-do-i-participate-in-the-preview)」に申請するための手順が載っていますが、(大した作業ではないのですが、迷った) ちょっとわかりづらかったので、以下の私なりに手順を書いてみましたので、ご参考まで。


## Microsoft.Network リソースプロバイダーの状態を確認する

Azure ポータルにて、Internet Analyzer を使用と思っているサブスクリプションを開き、[設定] カテゴリ配下の [リソースプロバイダー] をクリックして開きます。
「Microsoft.Network」の [状態] が「Registered」であることを確認します。「NotRegistered」の場合は、リソースプロバイダー一覧から「Microsoft.Network」を選択し、[登録] をクリックして [状態] を「Registered」に変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/41de26ba-b4e9-6a0e-f6f8-f24992f050a5.png)

※ [状態] が「Registered」である場合も、シンパイなら [再登録] をクリックしておきましょう。(...何も起こりませんが...たぶんやらなくてもダイジョウブ)


## Azure Internet Analyzer (Preview) へのアクセスを申請する

[こちらの申請フォーム](https://aka.ms/internetAnalyzerContact)にアクセスして、

- Internet Analyzer を使おうと思っている「サブスクリプションの ID」
- 「お名前」
- 後ほど届く承諾メール宛先の「メールアドレス」
- Internet Analyzer に対する「熱い想い」

上記のような設問 (設問項目が変わるかも) に答えて、Internet Analyzer (Preview) へのアクセスを申請します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/24202e98-3a7e-1e29-50c3-3384b4263c13.png)

[送信] をクリックすると、以下のページに遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/b2e37332-0565-72a5-1a00-04564e572079.png)

あとは、申請が承諾された旨のメールが届くまでしばらく待ちます。

なお、筆者の場合はリクエストした翌日に届きました (後日、別のサブスクリプションでリクエストした際は 1 週間くらいかかりました)。なので、気長に待ちましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/7f215001-2364-4cc0-589d-0ab741544cc9.png)


# やってみよう

## Azure Internet Analyzer プロファイルを作成する

まず、Internet Analyzer プロファイル (赤枠の部分) を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/83f859c2-0696-0325-a304-a2a1532f1220.png)


[Azure Preview Portal](https://preview.portal.azure.com/) にサインインして、承諾されたサブスクリプションに移動します。

Marketplace で「Internet Analyzer」を検索し、その後遷移したページで [作成] をクリックすると、「Create an Internet Analyzer profile」ページが開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/b5502dec-7f48-ce7a-f87c-1619b43ab7b9.png)

- 「リソースグループ」は適当にどうぞ。
- 「名前」も適当にどうぞ。
- 「地域」は「West US 2 (米国西部 2)」しか選べません。※プレビュー期間中の場合 (2019 年 12 月現在)

入力後、[Review + create] をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/622cf1f3-96bf-1162-6407-1f22af9cb31a.png)

そして、最後に [Review + create] タブで [Review + create] をクリックで Internet Analyzer を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/356de58e-93b3-45b4-9385-db3e8d397418.png)

無事出来上がりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/602c8776-fb52-f83e-daa7-d37d70e333b8.png)

[参考：ポータルを使用して Internet Analyzer テストを作成する (プレビュー) > 基本](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-create-test-portal?WT.mc_id=AZ-MVP-5003113#basics)


## テストを構成する

次に、前述で作成した Internet Analyzer プロファイルの [設定] > [構成] に移動し、テスト (赤枠の部分) を作成します。
※引き続き、[Azure Preview Portal](https://preview.portal.azure.com/) で作業します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/14843989-a585-7b68-b38a-85edc17dc6b1.png)

ドキュメントの記載のとおり、ひとつのテストは「A」と「B」の 2 つのエンドポイントで構成されます。エンドポイント B はエンドポイント A に対して相対的に分析されます。つまり、エンドポイント A の測定結果を基準に、エンドポイント B の測定結果が評価されて分析されるということですね。

ということで、以下の例のようにエンドポイントを配置することで Web アプリケーションと移行先候補とでレイテンシの測定結果を比較できると思います。

- Endpoint A...Web アプリケーション内にカスタムエンドポイント (HTTPS 必須) を作成
 - (既に Azure にホスティングしている場合) または、Web アプリケーションをホスティングしている場所と同じ Azure リージョンに事前構成済みエンドポイントを作成
- Endpoin B...移行先候補となる Azure リージョンに事前構成済みエンドポイントを作成

ということで、エンドポイント A をカスタムエンドポイントを作成します。

今回は、Web Apps にデプロイした Web アプリケーション内にエンドポイントを設置するため、Kudu を使って[公式ドキュメントで指示された](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-custom-endpoint?WT.mc_id=AZ-MVP-5003113#create-custom-endpoint)画像ファイルをアップロードします。

[参考：Internet Analyzer テストで評価するカスタム エンドポイントを作成する](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-custom-endpoint?WT.mc_id=AZ-MVP-5003113)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/2d67b130-4b0e-0a89-2e5e-4615d5231854.png)

そして、エンドポイント A に上記のカスタムエンドポイントを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/2c0e985f-7d5c-a8a1-6008-2494c75224e8.png)

エンドポイント B は、事前構成済みのエンドポイントを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/e0b7c4e9-a524-e013-50eb-23277892e2b2.png)

[参考：ポータルを使用して Internet Analyzer テストを作成する (プレビュー) > 構成](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-create-test-portal?WT.mc_id=AZ-MVP-5003113#configuration)



## JavaScript クライアントを組み込む

最後に、Web アプリケーション (HTTPS 必須) に発行された JavaScript クライアント (URL) を組み込みます (赤枠の部分)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/e231c0f6-6ae8-4457-2748-a2b3d4632f75.png)

JavaScript クライアントを生成するには、前述の「テストを構成する」で 1 つ以上のテストを作成すると生成され、Internet Analyzer プロファイルの [設定] > [構成] に JavaScript クライアントの URL が表示されます。この URL をコピーして、テキストエディターなどにメモっておきます。
※[Azure Preview Portal](https://preview.portal.azure.com/) で操作します。
※テストを追加、削除してもこの URL は変わることはありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/9f2d5d97-30b1-1769-363a-6e74f0641ba1.png)

そして、この JavaScript クライアント (メモった URL) を対象の Web アプリケーションに組み込みます。
対象の Web アプリケーションは WordPress です。ウィジェットに「カスタム HTML」を追加してそこに「script タグ」を書き、すべてのページに掲載されるように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/44deeb55-fe5c-a06e-fe00-6792acbcb8cc.png)

[参考：ポータルを使用して Internet Analyzer テストを作成する (プレビュー) > クライアントを埋め込む](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-create-test-portal?WT.mc_id=AZ-MVP-5003113#embed-client)
[参考：Internet Analyzer クライアントの埋め込み](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-embed-client?WT.mc_id=AZ-MVP-5003113)

以上で準備できました。


# スコアカードを確認

Internet Analyzer プロファイルの [設定] > [スコアカード] を開きます。
※[Azure Preview Portal](https://preview.portal.azure.com/) で操作します。

筆者の場合、カスタムエンドポイントの測定がカウントされず、期待していた結果を得ることができませんでした (1か月程度検証してみたが、改善されることなく...:sob:)。まだプレビューということもあり、機能が制限されているかもしれません。今後に期待しましょう。

※検証シナリオは以下のとおり。

- Web アプリケーション... Azure 東日本の Web Apps 上のアプリケーション
- Endpoint A (ORG-EPA)... 上記アプリケーション内に設置 (カスタムエンドポイント)
    - 現 Web サーバーとの間のレイテンシを測定
- Endpoint B (JPNW-EPB)... Azure 西日本の構成済みエンドポイント
    - ここに置いたら…と仮定した場所との間のレイテンシを測定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/bede357d-3fd3-a542-f4de-a0cc7f123362.png)

ちなみに、Azure の構成済みのエンドポイントについては問題なく測定されることは確認できました。
いずれのスコアカードでは、レイテンシが東アジアより西日本のほうが低いことを表しています (ほぼ日本からのアクセスしかないので当たり前ですね:stuck_out_tongue_winking_eye:)。

※検証シナリオは以下のとおり。

- Web アプリケーション... Azure 東アジアの Web Apps 上のアプリケーション
- Endpoint A (TEST01-EPA)... Azure 東アジアの構成済みエンドポイント
    - 現 Web サーバー (と見立てて) との間のレイテンシを測定
- Endpoint B (TEST01-EPB)... Azure 西日本の構成済みエンドポイント
    - ここに置いたら…と仮定した場所との間のレイテンシを測定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/38934602-7c5a-f661-3893-eebdeec4a886.png)
※[ETロボコン2019チャンピオンシップ大会](https://www.etrobo.jp/cs-2019-result/)が開催されていた頃のスコアカード...みんな気になっていることがよーくわかります (そんな分析じゃない)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/a7fe8b34-d56e-a884-15aa-33f6862e24f4.png)
※シーズンオフ中 (12月) のスコアカード...だいぶ落ち着きました (そんな分析じゃない)

[参考：スコアカードの解釈](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-scorecard?WT.mc_id=AZ-MVP-5003113)
[参考：Azure Internet Analyzer troubleshooting](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/troubleshoot?WT.mc_id=AZ-MVP-5003113)


# まとめ

Azure を使用すると、数多くのリージョンでアプリケーションを柔軟にホストでき、とても強力で便利です。しかし、アプリケーションを提供する側にとっては、最適なホスト先 (ロケーション) を選ぶことはとても悩ましい課題かと思います。
「Azure Internet Analyzer」を使えば、アプリケーションのアクセス元であるユーザーのネットワーク環境のレイテンシを定量的に測定した結果が得られます。
これを基に、ユーザー環境の観点から最適なホスト先を選ぶことができるでしょう。

なお、[「Azure Internet Analyzer の概要」](https://docs.microsoft.com/ja-jp/azure/internet-analyzer/internet-analyzer-overview?WT.mc_id=AZ-MVP-5003113)に記載されているとおり、2019 年 12 月現在、Azure Internet Analyzer はパブリックプレビューであるため、SLA は提供されていません。よって、それを踏まえてご利用いただければと思います。


# おまけ

先日の [Microsoft Ignite The Tour Tokyo](https://www.microsoft.com/ja-jp/ignite-the-tour/Tokyo) コミュニティポップアップブース ([JAZUG LT大会](https://jazug.connpass.com/event/157192/)) にて、当記事と同じテーマでおしゃべりしました。以下はその時のスライドです。ご参考まで。

[Azure Internet Analyzer (Preview) を試してみる - SlideShare](https://www.slideshare.net/tetsuyaodashima/azure-internet-analyzer-preview)

...そして後日
Azure Internet Analyzer のプロダクトマネージャーからこんな DM が届きましたー :astonished:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/83b42a6d-7182-6539-d035-ba1b92cc2bfd.png)

がんばって直 FB してみようと思います！ :triumph:
(FB しろよなって言っちゃったし... :sweat_smile: )

※めっかっちゃったツイートは[こちら](https://twitter.com/ag0u3/status/1202478308014710784)
※Azure Internet Analyzer プロダクトマネージャーの [Megan Beatty](https://twitter.com/_meganbeatty) さん