こんにちは、Azureサポートチームの三國です。
今回は、ARMのWindowsでディスクやVMレベルでのIOスロットリングを監視・通知する方法についてご案内いたします。
本記事は下記英文ブログの抄訳です。
How to monitor and alert potential Disk and VM Level IO Throttling on Windows VMs using ARM
https://blogs.msdn.microsoft.com/mast/2017/09/12/how-to-monitor-and-alert-potential-disk-and-vm-level-io-throttling-on-windows-vms-using-arm/
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
はじめに
本ブログはAzure上にあるWindows VMのディスクパフォーマンス監視手順について紹介します。
ディスクやVMレベルでのIOスロットリングについて検出することが目的です。
本ガイドラインはAzure Resource ManagerにてデプロイされているAzure上のすべてのバージョンのWindowsに適用できます。
手順の紹介に入る前に、3つの前提となる概念について説明します。
スロットリングとは?
Azure Premium Storage では、選択された VM サイズとディスク サイズに応じて、指定された数の IOPS とスループットがプロビジョニングされます。 アプリケーションが、VM またはディスクが対応できるこれらの上限を超えて IOPS やスループットを試みると、これを抑制するように調整されます。 これは、アプリケーションのパフォーマンスの低下という形で現れます。 これにより、待機時間が長くなり、スループットや IOPS が低下する可能性があります。スロットリングにはディスクレベルとVMレベルの2種類があります。
詳細については以下のドキュメントをご確認下さい。
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-premium-storage-performance#throttling
ディスクレベルのスロットリングとは?。
基本的に、ディスクの制限値を超えたIOについてはすべて滞留しより大きな遅延が発生します。
管理ディスク・非管理対象ディスクの制限値については以下のドキュメントをご参照ください。
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/sizes-general#dsv2-series
VMレベルのスロットリングとは?
基本的に、VMにアタッチされたディスクの総IOがスループット制限を超えた場合にVMレベルのスロットリングが発生します。制限値はキャッシュ/非キャッシュで異なります。こちらはPremium ディスクをお使いの場合のみ該当します。Standard ディスクをお使いの場合にはVMレベルのIOスロットリングという概念はありません。
IOスロットリングの詳細については、以下のドキュメントをご参照ください。
https://blogs.technet.microsoft.com/xiangwu/2017/05/14/azure-vm-storage-performance-and-throttling-demystify/
準備
本ブログの説明に用いるVMの構成例を以下に記載します。
VM名: "MonitorVM"
VMサイズ : DS2_v2
Disk 構成:
以下の4データディスクをVMにアタッチします:
2x P10 (128 GB - Disk limits: 500 IOPS or 100 MB/s - Disk Cache Setting: None)
1x P20 (512 GB - Disk limits: 2300 IOPS or 150 MB/s - Disk Cache Setting: None)
1x P30 (1024 GB - Disk limits: 5000 IOPS or 200 MB/s - Disk Cache Setting: None)
本シナリオでは、上記のようにアタッチされたディスクすべてについてキャッシュが無効になっています。そのためVMの非キャッシュディスクスループット制限(IOPS/MBps)について確認します。下記のURLの"キャッシュが無効な場合の最大ディスク スループット: IOPS/MBps"より確認できます。
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-general#dsv2-series
キャッシュを有効にする場合は、上記URLの"キャッシュが有効な場合の一時ストレージの最大スループット: IOPS/MBps (キャッシュ サイズは GiB 単位)"よりVMにおける一時ストレージのスループット制限(IOPS/MBps)を確認できます。
"MonitorVM"VM内部のディスク設定の詳細について
Fドライブに、P10ディスクを2つ用いて復元力を備えた記憶域を構成し、1000IOPS(2 x 500 IOPS)が制限値となります。
ディスク管理:
ファイルエクスプローラー:
"MonitorVM"VM内のパフォーマンスモニター:
VM内のパフォーマンスモニターでVMの物理ディスクのパフォーマンスカウンターについてカウンター名が確認ができました。
次に、以下のパフォーマンスカウンターについてVMの診断設定に追加し、IOPSをAzureポータルで監視する方法をご案内します。
IOPS:
"PhysicalDisk(_Total)Disk Transfers/sec" (VM レベルのスロットリング - 6400 IOPS)
"PhysicalDisk(0 C:)Disk Transfers/sec" (ディスクレベルのスロットリング - OS disk P10 - 500 IOPS)
"PhysicalDisk(2)Disk Transfers/sec" (ディスクレベルのスロットリング - P10 disk - 500 IOPS)
"PhysicalDisk(3)Disk Transfers/sec" (ディスクレベルのスロットリング - P10 disk - 500 IOPS)
"PhysicalDisk(4 G:)Disk Transfers/sec" (ディスクレベルのスロットリング - P20 disk - 2300 IOPS)
"PhysicalDisk(5 H:)Disk Transfers/sec" (ディスクレベルのスロットリング - P30 disk - 5000 IOPS)
"PhysicalDisk(6 F:)Disk Transfers/sec" (ディスクレベルのスロットリング - 記憶域スペースドライブ - 1000 IOPS)
Azureポータルでパフォーマンスカウンターを監視するには?
パフォーマンスカウンターはAzureポータルの診断設定にて追加できます。
追加手順を以下に記載します。
・Azureポータルの"MonitorVM"VMのページへ移動します
・VMブレードの"Diagnostic settings"を選択し、"Performance counter"タブへ移動します(図中1.)
・パフォーマンスカウンターを追加するため"Custom"(図中2.)を選択します
・テキストボックス(図中3.)にパフォーマンスカウンター名を入力します(例: PhysicalDisk(0 C:)Disk Transfers/sec)
・"Add"ボタン(図中4.)を押下し、パフォーマンスカウンターを追加します
・サンプルレートをテキストボックス内(図中5.)に入力します
・最後に"Save"ボタンを押下し構成を保存します
サンプルレートはパフォーマンスカウンターを収集する頻度です。デフォルトでは60秒に指定されているため、60秒ごとにパフォーマンスカウンターが収集されます。ディスク負荷の変化が激しい場合は収集頻度を10秒、あるいは1秒に短縮してIOがディスクやVMの制限に到達していないかを確認できます。ディスク負荷の変化が緩やかな場合はサンプルレートを大きくすることもできます。サンプルレートはいつでも、すぐに変更でき、Azureポータルの"Metrics"を通じて都度検証することができるので、ぜひ適切な値を環境に応じて調整してみてください。
収集した情報を確認するには?
下図のようにAzureポータルの"Metrics"より確認ができます。
"metric alert Rules"を有効にするには?
・"Condition"ドロップダウンより"Greater than equal to"を選択します
・"Threshold"に通知するIOPSの閾値(例ではディスクレベルでの制限値、今回の場合はP10ディスクの500 IOPS)を入力します
・"Period"で通知する閾値超えの期間(例では5分以上)を選択します
・メールで通知をする場合はチェックボックスをオンにしし、必要に応じて"Additional administrator"を入力します
最後に、"Name"にルールの名前を入力し、"OK"を押下します
"metrics alert Rues"をテストするには?
"PhysicalDisk(_Total)Disk Bytes/sec" (VM レベルのスロットリング - 96 MBps)
"PhysicalDisk(0 C:)Disk Bytes/sec" (ディスクレベルのスロットリング - OS disk P10 - 100 MBps)
"PhysicalDisk(2)Disk Bytes/sec" (ディスクレベルのスロットリング - P10 disk - 100 MBps)
"PhysicalDisk(3)Disk Bytes/sec" (ディスクレベルのスロットリング - P10 disk - 100 MBps)
"PhysicalDisk(4 G:)Disk Bytes/sec" (ディスクレベルのスロットリング - P20 disk - 150 MBps)
"PhysicalDisk(5 H:)Disk Bytes/sec" (ディスクレベルのスロットリング - P30 disk - 200 MBps)
"PhysicalDisk(6 F:)Disk Bytes/sec" (ディスクレベルのスロットリング - Storage Spaces Drive 2x P10 - 200 MBps)
"PhysicalDisk(0 C:)Avg. Disk sec/Transfer"?