Amazon EBS ボリュームがマイクロバーストしているかどうかを判断する方法と、それを防ぐ方法を教えてください。

所要時間2分
0

Amazon CloudWatch のスループット または IOPS の制限を超えていない Amazon Elastic Block Store (Amazon EBS) ボリュームがあります。しかし、ボリュームはスロットルがかかっているように見え、待ち時間/キューの長さが長くなっています。

簡単な説明

CloudWatch は、1 分ごとにサンプルを収集することにより、すべての Amazon EBS ボリュームの IOPS (オペレーション/秒) とスループット (バイト/秒) をモニタリングします。

マイクロバーストは、EBS ボリュームが収集期間よりも大幅に短い期間で高い IOPS またはスループットをバーストしたときに発生します。このボリュームは収集間隔よりも短い間隔で高い IOPS またはスループットをバーストするため、CloudWatch にはバーストが反映されません。

**例:**プロビジョンド IOPS が 950 の IO1 ボリューム (1 分の収集間隔) に、1,000 IOPS を 5 秒間プッシュするアプリケーションがあります。Amazon EBS は、ボリュームの IOPS 制限に達すると、アプリケーションをスロットルします。この時点で、ボリュームがワークロードをハンドリングできないため、キューの長さが長くなりレイテンシーが高くなります。

収集期間が 60 秒のため、CloudWatch はボリュームが IOPS 制限を超過したことを示しません。1,000 IOPS は 5 秒間だけ発生しました。1 分の収集間隔での残りの 55 秒間、ボリュームはアイドル状態のままです。つまり、1 分間全体での VolumeReadOps+VolumeWriteOps の操作数は、5000 回 (1000 × 5 秒) となります。これは、1 分間(5000/60 秒)で平均 83.33 IOPS に達したことに相当します。通常、この平均値は問題になりません。
このケースでは、ボリュームが収集間隔の残り時間中アイドル状態であったため、同じサンプル時間での VolumeIdleTime は 55 秒になります。つまり、そのサンプル時間で 5,000 操作 (VolumeReadOps+VolumeWriteOps) がわずか 5 秒で発生することを意味します。5,000 を 5 で割って平均 IOPS を計算すると、1,000 IOPS になります。1,000 IOPS がボリュームの制限です。

ボリュームでマイクロバーストが発生しているかどうかを確認するには、以下の手順を実行します。

  1. CloudWatch メトリクスを使用して、可能性のあるマイクロバーストを特定します。
  2. CloudWatch を使用してマイクロバーストイベントを取得します。
  3. OS レベルのツールを使用してマイクロバーストを確認します。
  4. アプリケーションに合わせてボリュームのサイズやタイプを変更し、マイクロバーストを防止します。

解決策

CloudWatch メトリクスを使用して、可能性のあるマイクロバーストを特定

  1. VolumeIdleTime メトリクスを確認します。このメトリックは、指定された期間内に読み取りまたは書き込み操作が送信されなかった合計秒数を示します。VolumeIdleTime の値が大きい場合、ボリュームは収集期間の大半でアイドル状態のままとなります。同じサンプル時間で IOPS またはスループットが十分に高い場合は、マイクロバーストが発生した可能性があることを示しています。
    スループットの VolumeIdleTime メトリックには、VolumeReadBytes メトリックと VolumeWriteBytes メトリックがあります。
  2. 次の式を使用して、ボリュームがアクティブなときに達した平均スループットを計算します。
    実際の平均スループット (バイト/秒) = (Sum(VolumeReadBytes) + Sum(VolumeWriteBytes) ) / (Period - Sum(VolumeIdleTime) )
    IOPS の VolumeIdleTime メトリックには、VolumeReadOps メトリックと VolumeWriteOps メトリックがあります。
  3. 次の式を使用して、ボリュームがアクティブなときに達した平均 IOPS を計算します。
    操作数/秒での実際の平均 IOPS = (Sum(VolumeReadOps) + Sum(VolumeWriteOps) ) ÷ ( Period - Sum(VolumeIdleTime) )

CloudWatch を使用してマイクロバーストイベントを取得

  1. CloudWatch コンソールを開きます。
  2. [すべてのメトリクス] を選択します。
  3. ボリューム ID を使用して、影響を受けるボリュームを検索します。
  4. スループットメトリックを表示するには、[ブラウズ] を選択し、[VolumeReadBytes][VolumeWriteBytes][VolumeIdleTime] を追加します。
  5. [グラフ化した指標] を選択します。
  6. [統計][合計] を選択し、** [期間]** で [1 分] を選択します。
  7. [数式を追加] で、[空の式で始める] を選択します。
  8. [式詳細] に、実際の平均スループット (バイト/秒単位) の計算式のグラフ ID を入力します。たとえば、(m1+m2)/(60-m3) と入力します。

ボリュームの最大スループットよりも大きい値が算出された場合、マイクロバーストが発生しています。IOPS メトリックを確認するには、前述の手順に従い、ステップ 4 に VolumeReadOpsVolumeWriteOps、および VolumeIdleTime を追加します。

OS レベルのツールを使用してマイクロバーストの確認

上記の式では、常にマイクロバーストがリアルタイムで特定されるとは限りません。これは、VolumeIdleTime の値が小さくても、ボリュームがマイクロバーストしている可能性があるためです。

**例:**ボリュームがボリュームの制限を超過するレベルにスパイクします。ボリュームはその後、収集間隔の残り時間中完全にアイドル状態になることなく、極めて低いレベルのアクティビティまで減少します。VolumeIdleTime メトリックは、マイクロバーストが発生しても低いレベルのアクティビティを反映しません。

マイクロバーストの確認には、CloudWatch よりも粒度が高い OS レベルのツールを使用します。

Linux

iostat コマンドを使用してください。詳細については、Linux のマニュアルページの iostat(1) を参照してください。

1.    次のコマンドを実行し、マウントされたすべてのボリュームの I/O 統計値を 1 秒の粒度で報告します。

iostat -xdmzt 1

**注:**iostat ツールは sysstat パッケージの一部です。iostat コマンドが見つからない場合は、次のコマンドを実行して Amazon Linux AMI に sysstat をインストールします。

$ sudo yum install sysstat -y

2.    スループットの制限に到達しているかどうかを判断するには、出力の rMB/swMB/s を確認します。rMB/s + wMB/s がボリュームの最大スループットを超える場合は、マイクロバーストが発生しています。

IOPS の制限に到達しているかどうかを判断するには、出力の r/sw/s を確認します。r/s + w/s がボリュームの最大 IOPS より大きい場合は、マイクロバーストが発生しています。

Windows

Windows パフォーマンスモニターで perfmon コマンドを実行します。詳細については、「IOPS とスループットの要件の決定」を参照してください。

アプリケーションに合わせてボリュームのサイズやタイプを変更し、マイクロバーストを防止する

必要とする IOPS とスループットに対応するタイプやサイズにボリュームを変更します。ボリュームタイプと、それぞれの IOPS およびスループットの制限の詳細については、「Amazon EBS ボリュームタイプ」を参照してください。アタッチされているすべての EBS ボリュームにインスタンスがプッシュできる IOPS およびスループットには制限があります。

ワークロードに対するボリュームのベンチマークを実施し、テスト環境でワークロードに安全に対応することができるボリュームタイプを確認することがベストプラクティスです。詳細については、「EBS ボリュームのベンチマーク」をご参照ください。

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ