EC2/RDS のメトリクスを監視し、閾値超過を SNS でメール通知する基本の監視を構築する
このハンズオンでは、Amazon CloudWatch アラームを使って EC2 インスタンスの CPU 使用率やステータスチェックを監視し、異常を検知したら Amazon SNS でメール通知する仕組みを構築します。システム監視の最も基本的かつ重要なパターンです。最後に簡単なダッシュボードでメトリクスを可視化します。
| 項目 | 内容 |
|---|---|
| 所要時間 | 45〜60 分 |
| 難易度 | 入門〜中級 |
| 主要サービス | CloudWatch(アラーム・ダッシュボード)、SNS、EC2 |
| 前提リソース | 稼働中の EC2 インスタンス 1 台以上 |
| 課金目安 | アラーム: $0.10/個/月、標準メトリクスは無料。ほぼ無料で実施可能 |
| 状態 | 意味 |
|---|---|
| OK | メトリクスが閾値の範囲内(正常) |
| ALARM | メトリクスが閾値を超過(異常)→ アクション実行 |
| INSUFFICIENT_DATA | データ不足で評価不能(インスタンス停止中など) |
EC2 のデフォルトは「標準モニタリング」で 5 分間隔のメトリクスです。1 分間隔で監視したい場合は EC2 の「詳細モニタリング」を有効化します(追加料金あり)。このハンズオンは標準モニタリングのままで実施できます。
アラーム発火時に通知を送る先となる SNS トピックを作成します。
handson-alarm-topic「Confirm subscription」をクリックするまでステータスは「保留中の確認」のままで通知は届きません。確認メールが届かない場合は迷惑メールフォルダを確認してください。
「2 のうち 2 のデータポイント」= 5 分間隔の評価が連続 2 回(= 10 分間)閾値を超えたらアラームを発火します。一時的なスパイクで誤検知しないための設定です。
「次へ」→ プレビューを確認 →「アラームの作成」をクリックします。
EC2 のシステム障害・インスタンス障害を検知するアラームを追加します。
| メトリクス | 意味 |
|---|---|
| StatusCheckFailed_System | AWS 側のハードウェア障害(インスタンスの再起動で復旧する場合が多い) |
| StatusCheckFailed_Instance | OS・ネットワーク設定など、インスタンス内部の問題 |
| StatusCheckFailed | 上記いずれかが失敗した場合に 1 になる(合算) |
実際に CPU を上げずに、AWS CLI または コンソールでアラーム状態を手動変更してテストします。
AWS CloudShell または CLI で以下を実行します(CloudShell はコンソール右上のターミナルアイコンから起動)。
aws cloudwatch set-alarm-state \
--alarm-name handson-ec2-cpu-high \
--state-value ALARM \
--state-reason "手動テスト: アラーム動作確認"
数秒〜数十秒以内に登録したメールアドレスへ「ALARM: handson-ec2-cpu-high」という件名の通知メールが届きます。
aws cloudwatch set-alarm-state \
--alarm-name handson-ec2-cpu-high \
--state-value OK \
--state-reason "手動テスト: 復旧確認"
「OK: handson-ec2-cpu-high」という復旧通知メールが届きます。
EC2 にログインして stress --cpu $(nproc) --timeout 700 を実行すれば、実際の CPU 負荷でアラームを発火させられます(sudo dnf install -y stress でインストール)。10 分程度負荷をかけ続けると ALARM になります。
監視対象のメトリクスを 1 画面にまとめたダッシュボードを作成します。
handson-dashboard → 「ダッシュボードの作成」1 つの画面で複数メトリクスの推移を一覧できれば完成です。時間範囲(右上)を「1h」「3h」「1d」などに切り替えて推移を確認しましょう。
ウィジェット追加時に「アラームステータス」タイプを選ぶと、作成した 2 つのアラームの現在状態(OK/ALARM)を一覧表示できます。運用ダッシュボードとして便利です。
アラームは 1 個あたり月額 $0.10 の課金が発生します。ハンズオン完了後は削除してください。ダッシュボードは 3 個まで無料です。
CloudWatch のアラーム一覧と SNS のトピック一覧から該当リソースが消えていれば完了です。