背景
RailsアプリをAWS EC2上で運用していたところ、ある日突然アプリが停止しました。
原因を調査したところ、
No space left on device
というエラーが発生しており、EC2のルートディスクが100%まで埋まっていました。
この経験から、容量不足を事前に検知するためCloudWatch監視を導入しました。
環境
- AWS EC2
- Ubuntu
- Rails 8
- PostgreSQL
- CloudWatch Agent
CloudWatch Agent導入
CloudWatch Agentをインストールし、ウィザードで設定を作成しました。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
基本的にはデフォルト設定を選択しました。
メトリクス確認
CloudWatch → Metrics → CWAgent から以下のメトリクスを確認できました。
disk_used_percent
監視対象としてルートディスク(/)を選択しました。
CloudWatchアラーム作成
以下の条件でアラームを作成しました。
- アラーム名: tasklink-disk-usage-80
- メトリクス: disk_used_percent
- path: /
- 閾値: 80%
設定条件
disk_used_percent >= 80
SNSによるメール通知
CloudWatchアラーム発生時にメール通知を受け取るため、Amazon SNSを利用しました。
SNS設定
- SNS Topic作成
- Email Subscription作成
- AWS Notification - Subscription Confirmation を承認
- CloudWatch Alarmと連携
承認後、Subscription Status が「Confirmed」になれば設定完了です。
完成した構成
EC2
↓
CloudWatch Agent
↓
CloudWatch Metrics
↓
CloudWatch Alarm
↓
Amazon SNS
↓
メール通知
学んだこと
- CloudWatch AgentでEC2の詳細メトリクスを取得できる
- SNSを利用してメール通知が可能
- 容量不足による障害を事前に検知できる
- 監視とバックアップは本番運用に必須
まとめ
以前はディスク使用率100%になるまで異常に気付けませんでしたが、CloudWatch監視を導入したことで80%到達時にメール通知を受け取れるようになりました。
バックアップ、復元テスト、監視まで構築できたことで、本番運用に近い環境を整えることができました。