WVDの監視機能であるAzure Monitorを使ってみる

[Azure Monitor for Windows Virtual Desktop](https://docs.microsoft.com/ja-jp/azure/virtual-desktop/azure-monitor)というWVDの監視機能の動きを見てみました。
これまでのWVDのネイティブな監視機能は[Log Analyticsを入れて自分でクエリを引いてみる](https://docs.microsoft.com/ja-jp/azure/virtual-desktop/diagnostics-log-analytics)というものでした。
ここで紹介するものは、Log Analyticsに集められたログをAzure Monitorのブックを使って視覚化するというものです。何か新しい機能というより、Azure Monitorのブックテンプレートが提供され、見通しがよくなり、感覚的にわかりやすくなったと言えるでしょう。

以下、2021年1月1日現在、どんなものが見えるのかをいくつか見てみたいと思います。

# サンプル画面
Azure Monitor for Windows Virtual Desktopへのアクセスは、WVDのブレード内、左メニューから「分析情報」を選びます。設定がされていると、右に画面が出てきます。また、右の画面で赤囲みしたところはカテゴリーになっていて、見たい内容を切り替えられます。
![Monitor1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/af91e3b0-7804-b804-882a-6cf271f8d590.png)

ここから具体的な画面の紹介に入っていきますが、出てくるメトリックスが何を意味しているかは、[Windows Virtual Desktop 向けの Azure Monitor の用語集](https://docs.microsoft.com/ja-jp/azure/virtual-desktop/azure-monitor-glossary)に解説されていますので、必要に応じてこちらをご参照ください。

## 概要
見られる項目がカテゴリー化されていて、ここでは全体概況を一望できます。
![Monitor3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/a9554bf5-1ab3-64e6-e0c5-bf0a567dcd4b.png)
![Monitor4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/0dd51251-1daf-2d48-2ff0-ad29a6855a85.png)
![Monitor5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/b1d67c3e-33c4-3481-c8ca-7ae56765d7d5.png)

## 接続の診断
例えば同じ人が同じセッションでログイン時のパスワードを4回間違った場合、このような見え方をします。
![Monitor6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/c31dc64d-9855-9265-3a06-868c1135216d.png)
![Monitor7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/f6bc18bb-2321-1261-8282-8fb82d9d2b7d.png)
![Monitor8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/7303647c-f69b-1683-05d7-c70431ed6bac.png)

## 接続のパフォーマンス
![Monitor9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/83148dc9-91fd-06c7-92fc-bc2a6eb2db8a.png)
![Monitor10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/c47f70a4-1141-33a3-8566-cdd8b263b2e2.png)

## ホスト診断
一つのホストで、CPU負荷を上げてみました。
![Monitor11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/11ac4053-a9ab-d506-d648-d816da2913b7.png)
![Monitor12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/3c0fe1aa-6b9d-9f2d-b44f-ff38bb47c51a.png)

## ホストのパフォーマンス
![Monitor13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/3da3c38e-2777-c8fd-e778-93085d0cbbd0.png)

## ユーザー レポート
ユーザーごとの利用状況を確認できます。
![Monitor14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/400be581-1515-57e9-3272-1fc336c45b96.png)
![Monitor15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/36065182-4d37-db8a-487c-cf3bf107eb83.png)

## 使用状況レポート
![Monitor16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/571f0ab1-25fa-208f-b5c0-36e4cd9514c6.png)
![Monitor17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/06440c51-8105-c2ac-1ee0-d70972015d84.png)

## クライアント レポート
![Monitor18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/a9efa1b6-70c3-84d5-16ab-2760b24f4101.png)

# 考察
こうして可視化してみると、いろいろなことに使えそうです。
例えば、

- セッションホストのスケーリングを考慮する場合、何時に何台ホストを停止すればよいか、何時に何台起動するか、など設計指針策定
- CPUが張り付いてしまっているホストがあれば、特定のユーザー利用か一過性のものなのかなどを検討したうえで、VMのサイズアップや、マルチセッションの集約率を下げてみることの検討
- ユーザーから「つながらない!」とコールを受けたら、そのユーザーで何が起こったのかの調査

また、ここで表示されていない情報はLog Analyticsでクエリを発行して多面的に深く調べることもできます。

# 設定
「[Windows Virtual Desktop 向けの Azure Monitor を使用してデプロイを監視する](https://docs.microsoft.com/ja-jp/azure/virtual-desktop/azure-monitor)」に手順があるので、これを参考に設定すればよいのですが、若干わかりにくいです。
そこで、「[Azure AcademyのAzure Monitor Insights | Windows Virtual Desktop](https://www.youtube.com/watch?v=DQal-x5yHpM&t=309s)」が画面操作を動画で解説してくれているのでこれを参考にします。(英語ですが)
![YouTube1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/ae6ec3cf-0cd0-5171-edf6-1ba5d1194737.png)

参考までに私が実施した手順のポイントを掲載しておきます。

- Log Analyticsのワークスペースは、Security Centerがデフォルトで作ってくれたものを流用

[Security CenterでLog Analyticsエージェントの自動プロビジョニングが有効になっている場合、仮想マシンを作ると自動的にLog Analyticsのワークスペースが作られて設定されます。](https://docs.microsoft.com/ja-jp/azure/security-center/security-center-enable-data-collection#enable-auto-provisioning-of-the-log-analytics-agent)これはリソースグループ名: `DefaultResourceGroup-[geo]`、ワークスペース名: `DefaultWorkspace-[subscription-ID]-[geo]`です。
Security Centerが作成するLog Analyticsのワークスペースでなくても、[このDocs](https://docs.microsoft.com/ja-jp/azure/azure-monitor/insights/vminsights-configure-workspace)を参考に新規に作成して、これを使うこともできます。

- Log Analyticsのワークスペースに、VM管理するソリューションを追加

WVDのセッションホストVMの情報(CPUの利用率とか)を集められるようにするため、[このDocs](https://docs.microsoft.com/ja-jp/azure/azure-monitor/insights/vminsights-configure-workspace?tabs=CLI#add-vminsights-solution-to-workspace)に従って、ワークスペースでVM([Azure Monitor for VMs](https://docs.microsoft.com/ja-jp/azure/azure-monitor/insights/vminsights-overview)のエージェントから)のログを扱えるようにします。この手順を実施すると、Log Analyticsの当該ワークスペースでは、下記の`VMInsights`というソリューションが追加されます。
![Workspace1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/b428ad2a-3bce-681e-fe53-0da375d04ca0.png)

- WVDの`ワークスペース`、`アプリケーショングループ`、`ホストプール`に診断設定を実施

[Azure Academy動画](https://youtu.be/DQal-x5yHpM?t=54)が手順を解説してくれています。(リンクをたどれば当該箇所が開きます)

- ブックでWVDのメトリックスが表示できるように設定

[Azure Academy動画](https://youtu.be/DQal-x5yHpM?t=278)がこれも解説してくれています。もしこの設定画面が出ない場合は、下の方にリンクが出ているはずですので、これをたどると同じ画面になります。なお、このビデオでWindowsイベントの設定を手動で行っていますが、これはPreview時のもので、GA版ではクリックボタンのみで設定が完了します。
![Monitor19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/e452e439-a0cf-f28a-c16f-dafdebcc3075.png)
なお、ここはDocsにも記載があるので、「[セッション ホスト データの設定](https://docs.microsoft.com/ja-jp/azure/virtual-desktop/azure-monitor#session-host-data-settings)」を参考に実施します。

- 各セッションホストVMへのエージェントセットアップ

「[すべてのホストに Log Analytics エージェントをインストールする](https://docs.microsoft.com/ja-jp/azure/virtual-desktop/azure-monitor#install-the-log-analytics-agent-on-all-hosts)」に従ってそれぞれのセッションホストVMのセットアップを行います。
ただし、イメージOSの日本語化をAzure VM上で行ったような場合、すでにLog Analyticsのエージェントが入ってしまっている場合があり、これはうまくいきません。この時、「データの待機中」という表示が出たままとなります。対処方法は[別記事](https://qiita.com/takeokams/items/e50369675a3d214bb9a4)を用意しておきましたので、このようになった場合は参考にしてください。
また、Security CenterでVMへのエージェントプロビジョニングが有効になっている場合、Security CenterのLog Analyticsワークスペースの設定が行われているはずです。この時、別のLog Analyticsのワークスペースを設定するには、VMの中に入ってエージェントの設定を[Azure Monitor へのエージェント接続を確認する](https://docs.microsoft.com/ja-jp/azure/azure-monitor/agents/agent-windows#verify-agent-connectivity-to-azure-monitor)に従って設定します。

これで、設定は終わりです。
普通にWVDを使ってみると、データがたまって、いろいろ見えるようになります。

# Tips
## 環境の消し方
消し方の情報としては、
> - [Azure Monitor for VMs での VM の監視を無効にする](https://docs.microsoft.com/ja-jp/azure/azure-monitor/insights/vminsights-optout)
>
> ワークスペースを残したままVMだけを抜いても、24時間(?)ぐらいはAzure Monitorの仮想マシンの管理対象に残り続ける。
>
> - [Azure Log Analytics ワークスペースの削除と復旧](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/delete-workspace)
>
> Security Centerのワークスペースは削除することが推奨されていないが、一度削除して自動再作成させても動いてはいる。
WVDのワークスペースなどでの診断設定は、ワークスペースそのものだけを削除して再度同じ名前で作ると戻ってくるが、正しく動いていない。いったん設定を削除して再作成する必要あり。

これを踏まえての手順として、

- **VMを管理対象から外す**: [エージェントを削除](https://docs.microsoft.com/ja-jp/azure/azure-monitor/insights/vminsights-optout#disable-monitoring-and-keep-the-workspace)

ポイントは、DependencyAgentのみをVMの拡張機能からアンインストールし、Log Analyticsのエージェント(MicrosoftMonitoringAgent)はVMの拡張機能からアンインストールせず、Log Analyticsのブレード、仮想マシンから、当該のVMを選んで、`切断`を行います。これで、2つのエージェントが削除されます。この切断オペレーションでは、執筆時点ではDependencyAgentを削除しません。

- **VMからの情報はすべて不要**: [ソリューションの削除](https://docs.microsoft.com/ja-jp/azure/azure-monitor/insights/vminsights-optout#remove-azure-monitor-for-vms-completely)
- **WVDのログ取得が不要**: WVDの`ワークスペース`、`アプリケーショングループ`、`ホストプール`の診断設定を解除
- **全ログを削除**: [Log Analyticsのワークスペースの削除](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/delete-workspace)。ただし、Security Centerのワークスペースを使っている場合は、その他の情報も消えてしまうことに注意が必要です。設定でLog Analyticsエージェントの自動プロビジョニングが有効になっている場合、プロビジョニングが実行された段階で自動的に再作成されます。この動作は[想定内](https://docs.microsoft.com/ja-jp/azure/security-center/faq-data-collection-agents#can-i-delete-the-default-workspaces-created-by-security-center)です。

## Azure Monitor for VMsエージェントの強制インストール
同じVM名で環境を作り直した場合、Azure PortalではAzure Monitor for VMsがすでに有効になっているものとしてセットアップ画面が出ないことがあります。(消してから24時間以内? [これ](https://docs.microsoft.com/ja-jp/azure/security-center/faq-data-collection-agents#what-is-the-impact-of-removing-these-extensions)に関連してる?)
このような場合はエージェントが入っていないことを確認したのち(入っていたらアンインストール)、[PowerShellでインストール](https://docs.microsoft.com/ja-jp/azure/azure-monitor/insights/vminsights-enable-powershell)できます。

# 参考

- [Azure Monitor でのログ データ インジェスト時間](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/data-ingestion-time)
- [Azure Security Centerで作成したLog Analyticsワークスペースのデータ保持期間は30日](https://docs.microsoft.com/ja-jp/azure/security-center/security-center-planning-and-operations-guide#workspace)
- [Azure Monitor for VMs の有効化](https://docs.microsoft.com/ja-jp/azure/azure-monitor/insights/vminsights-enable-portal#enable-azure-monitor-for-vms)
- [パフォーマンス カウンターを使用して、リモート デスクトップ セッション ホストでのアプリのパフォーマンス問題を診断する](https://docs.microsoft.com/ja-jp/windows-server/remote/remote-desktop-services/rds-rdsh-performance-counters)
- [@IT: 負荷テストのデータ、読めてますか？](https://www.atmarkit.co.jp/ait/articles/1201/06/news121.html)