こんにちは、2025年7月の連日の猛暑日はなかなか体にこたえますが、皆さんもAWSライフを楽しんでいますでしょうか。
今回は個人的な備忘録ですが盲点でもあったのでEC2の死活監視について改めて知識の整理として記載します。
EC2インスタンスの死活監視について皆さんは普段どのように監視されているでしょうか。
普段からAWSを触っている皆さんであれば当たり前のことかもしれませんが、気づきがあったので忘れた時にまたこの記事を読もうと思います。。。
EC2の死活監視の観点整理
AWSの死活監視は4つのポイントに主に分かれています。
また、どの観点で死活監視をしたいかにより構築、運用が大きく影響がある部分です。
①.AWSシステム側の障害やOS側の一部の障害
・ネットワーク接続の喪失
・システム電源の喪失
・物理ホストのソフトウェアの問題
・ネットワーク到達可能性に影響する、物理ホスト上のハードウェアの問題
②.EC2インスタンスの異常
・失敗したシステムステータスチェック
・正しくないネットワークまたは起動設定
・メモリの枯渇
・破損したファイルシステム
・互換性のないカーネル
・再起動中、インスタンスのステータスチェックはインスタンスが再び使用可能になるまで失敗を報告します。
③.インスタンスの停止(以下例)
・ユーザが誤ってインスタンを停止してしまった
・AZ障害などでEC2が停止してしまった
④.インスタンスの終了(以下例)
・ユーザが誤ってインスタンを終了してしまった
詳細は以下に記載されています。
AWS公式ドキュメント
CloudWatchアラームで監視ができるのは①と②
基本的に死活監視において①と②は StatusCheck
の分類になります。
CloudWatchアラームで監視できるものは具体的に以下の2つです。
※StatusCheckFailed_AttachedEBSというEBSのメトリクスも存在しています。
・①の監視メトリクス名: StatusCheckFailed_System
・②の監視メトリクス名: StatusCheckFailed_Instance
・①と②の監視を含むメトリクス名: StatusCheckFailed
※すべてのステータスチェックを確認します。
これらのメトリクスでは通常CloudWatchアラームで監視設定を行うことができます。
インスタンを停止した際、CloudWatchアラームは「データ不足」となります。
EventBridgeで監視ができるのは③と④
インスタンスの状態の変化をトリガーにアクションを実行するためにEventBridgeが役立ちます。
インベントパターンは以下のように設定することでインスタンスを監視することができます。
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["stopped"],
"instance-id": ["任意のインスタンスID"]
}
}
Cloudwatchアラームの設定を工夫して監視できる?
前述で記載しましたが、CloudWatchアラームの挙動でインスタンを停止した際は「データ不足」となります。
これを上手く利用してアラートを出す方法があります。
※AWSのベストプラクティスではないと思いますので実施される際は自己責任でお願いいたします。
非常に単純なことですが、「データ不足」をどのように取り扱うかの設定をすることで以下のように3つの監視を同時に行うことができます。
StatusCheckFailed_System
+ インスタンス停止とインスタンス終了
StatusCheckFailed_Instance
+ インスタンス停止とインスタンス終了
StatusCheckFailed
+ インスタンス停止とインスタンス終了
2.同じ設定ページの最下部にある「その他設定」内の「欠落データの処理」にて「欠落データを不正(しきい値を超えている)として処理」を選択します。
これで両方の監視を行うことができます。
ブログが若干味気なくなってしまったのでCLIからCloudWatchアラームを作成する方法もご紹介します。
以下コマンドの例です。
aws cloudwatch put-metric-alarm \
--alarm-name "EC2-StatusCheckFailed" \
--alarm-description "Status check failed for EC2 instance" \
--metric-name "StatusCheckFailed_Instance" \
--namespace "AWS/EC2" \
--statistic "Average" \
--period 60 \
--threshold 1 \
--comparison-operator "GreaterThanOrEqualToThreshold" \
--dimensions Name=InstanceId,Value=i-xxxxxxxxxxxxxxxxx \
--evaluation-periods 3 \
--datapoints-to-alarm 3 \
--treat-missing-data "breaching" \
--alarm-actions "arn:aws:sns:ap-northeast-1:xxxxxxxxxxxx:your-sns-topic"
「データ不足」取り扱い設定は--treat-missing-data
オプションで設定が可能です。
設定値の説明は以下にまとめました。
オプション名 | 日本語での設定 |
---|---|
missing | 欠落データを見つかりませんとして処理 |
notbreaching | 欠落データを適正(しきい値をこえていない)として処理 |
ignore | 欠落データを無視(アラーム状態を維持する)として処理 |
breaching | 欠落データを不正(しきい値を超えている)として処理 |
最後まで読んでくださりありがとうございました!