Amazon EBS ボリュームの詳細なパフォーマンス統計情報を CloudWatch エージェントから取得可能になりました
はじめに
少し前の 2025 年 6 月、Amazon EC2 のEBS ボリュームで詳細なパフォーマンス統計情報が CloudWatch Agent で取得できるようになりました。
これまでは nvme-cli コマンドまたは、Prometheus でのモニタリングしかサポートされていませんでしたが、今回のアップデートで CloudWatch Agent からも取得可能となりました。設定を試してみた結果を紹介します。
何ができるようになったか
EBS ボリュームの I/O レイテンシーなどの詳細なパフォーマンス統計情報を 1 秒間隔で CloudWatch Agent で取得可能となりました。
- 読み取り/書き込み操作数
- 読み取り/書き込みバイト数
- 読み取り/書き込み時間(マイクロ秒単位)
- EBS ボリューム性能超過時間(マイクロ秒単位)
- EC2 インスタンスの EBS 性能超過時間(マイクロ秒単位)
- キューの長さ
以前は CloudWatch Agent はサポートしておらず、長期モニタリングするなら Prometheus を利用するか、nvme-cli コマンドの結果を外部へ記録する必要があり不便でした。この度 CloudWatch Agent でも取得可能となり、手軽に長期モニタリングの設定ができるようになりました。
2025 年 9 月のアップデートでインスタンスストアも EBS と同様に詳細なパフォーマンス統計が取得可能となりました。
個人的な検証背景
EBS ボリュームの詳細パフォーマンスの CloudWatch Agent サポートは 2025 年 6 月のアップデート直後に検証したところ上手く取得できなく私の中ではお蔵入りしていました。2025 年 9 月のインスタンスストアをサポート時に改めて検証したところ正しい手順を確立でき、その手順が EBS ボリュームにも適用可能か検証しました。結果、CloudWatch Agent の設定ファイルの違いのみで正常に取得可能でした。
検証環境の準備
今回は m8gd.large を使用しました。OS は Amazon Linux2023 です。
CloudWatch Agent の設定
Systems Manger を利用して CloudWatch Agent のセットアップします。
IAMロールの設定
EC2 インスタンスに以下のマネージドポリシーをアタッチする必要があります。
- AmazonSSMManagedInstanceCore
- Systems Manager を通じて CloudWatch Agent をインストール・管理するために必要
- CloudWatchAgentServerPolicy
- CloudWatch Agent が CloudWatch へメトリクスを送信するために必要
CloudWatch Agent設定ファイルの作成
EBS の詳細パフォーマンスのメトリクスを収集する設定ファイルを作成します。
{
"agent": {
"metrics_collection_interval": 1
},
"metrics": {
"namespace": "CWAgent",
"append_dimensions": {
"InstanceId": "${aws:InstanceId}"
},
"metrics_collected": {
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"diskio": {
"resources": [
"*"
],
"measurement": [
"ebs_total_read_ops",
"ebs_total_write_ops",
"ebs_total_read_bytes",
"ebs_total_write_bytes",
"ebs_total_read_time",
"ebs_total_write_time",
"ebs_volume_performance_exceeded_iops",
"ebs_volume_performance_exceeded_tp",
"ebs_ec2_instance_performance_exceeded_iops",
"ebs_ec2_instance_performance_exceeded_tp",
"ebs_volume_queue_length"
],
"metrics_collection_interval": 1
}
}
}
}
Systems Manager パラメータストアへの登録
aws ssm put-parameter \
--name "AmazonCloudWatch-EBS" \
--type "String" \
--value file://cloudwatch-config.json \
--overwrite \
--tier "Standard" \
--description "CloudWatch Agent configuration with EBS NVMe driver Metrics"
CloudWatch Agentのインストールと設定
Systems Manager Run Command を使用して、CloudWatch Agent をインストールし、設定を適用します。
- AWS-ConfigureAWSPackageで CloudWatch Agent をインストール
以下のキャプチャの設定値を参考に、CloudWatch Agent をインストールします。
- AmazonCloudWatch-ManageAgentで設定ファイルを適用
パラメータストアに登録した設定ファイルを CloudWatch Agent に適用します。
EC2 インスタンスへ設定は以上です。IAM ロール(IAM ポリシー)の設定と、CloudWatch Agent のインストール、設定ファイルの追加のみです。
補足: CloudWatch Agent のログ確認
CloudWatch Agent が動作しているか確認したいときは以下のログを確認すると良いです。
less /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
less /opt/aws/amazon-cloudwatch-agent/logs/configuration-validation.log
負荷テストとメトリクスの確認
fio ツールを使用してディスク負荷を発生させ、メトリクスを確認します。
# fioのインストール
sudo dnf install fio -y
# ランダムな読み書きテスト(5分間)
fio --name=random-rw --ioengine=posixaio \
--rw=randrw --bs=4k --direct=1 --size=1G --numjobs=16 \
--time_based --runtime=300 --filename=/home/ec2-user/testfile
CloudWatch でグラフを確認すると以下のメトリクスが表示されます。
- I/O 操作の統計情報(読み込み/書き込みの操作数とバイト数)
- パフォーマンス限界の超過時間(IOPS やスループットの上限超過時間)
- キュー長(現時点での I/O リクエスト待機数)
性能限界に達していることを確認できるのがいいですね。とはいえ、デフォルトの CloudWatch メトリクスに今は同様の項目が追加されています。詳細なパフォーマンスですと 1 秒間隔で取得できることが違いです。
まとめ
EBS ボリュームの詳細なパフォーマンス統計が CloudWatch Agent で取得可能になりました。これにより、1 秒間隔での I/O レイテンシーやスループットの監視が手軽に実現できます。従来の Prometheus や nvme-cli コマンドと比較して、CloudWatch への統合が簡単になり、長期的なパフォーマンス分析が容易になりました。
おわりに
3 ヶ月前のアップデートの検証が上手くいかなくて諦めた内容をやっと動作確認できたのでスッキリ、良い休日の朝となりました。