見出し画像

EC2インスタンスを監視するCloudWatchアラームがアラーム状態にならない

こんにちは、ようへいです。

EC2インスタンスのCPU使用率を監視するCloudWatchアラームがアラーム状態にならない、という事象に遭遇し、解消までに随分と時間を要したので、備忘として記事に残します。


この記事の前提

  • EC2インスタンスは構築済み

  • CloudWatch Agentのインストールと必要なIAMロールはアタッチ済み

  • CloudWatchアラームはCDKで構築する

実現したいこと

特定のEC2インスタンスのCPU使用率を監視し、しきい値を超えたらアラームを発報したい。

CloudWatchアラームの設定内容

  • 名前空間:AWS/EC2

  • メトリクス名:CPUUtilization

  • InstanceId:i-XXXXXXXXX

  • 統計:平均値

  • 期間:1分

  • しきい値の種類:静的

  • アラーム条件:80%以上

  • データポイント:1/1

  • 欠落データの処理:適正として処理

この時、CloudWatchの設定画面を見ると、「インスタンス名」の項目が表示されていなかったことに違和感がありました。

問題事象

EC2インスタンスにセッションマネージャでログインし、stressコマンドでCPU使用率を高騰させました。

CDKで設定したCloudWatchアラームがアラーム状態になることを期待していましたが、いつまで待ってもアラーム状態になりませんでした。

CloudWatchアラームの設定画面にあるグラフを見ても、CPU使用率のグラフはずっと0%のまま。
CPU使用率を正しく監視できていない状態でした。

原因

CDKでのディメンションの設定ミスでした。

InstanceIdに設定する値は「i-XXXXXXXXX」が正しいところ、半角スペースが含まれてしまって「△i-XXXXXXXXX」と設定されていました。

アラームの設定画面は穴が開くほど確認し、問題は検知できませんでした。
藁をもつかむ思いでCloudFormationテンプレートを確認したところ「InstanceId:△i-XXXXXXXXX」と設定されていたことに気付き、半角スペースの混入が原因であることがわかりました。

(だから、アラームの設定画面に「インスタンス名」の項目が表示されていなかったんですね・・・)

結果、CloudWatchアラームは特定のEC2インスタンスのメトリクスを認識できず、いつまでもアラーム状態になりませんでした。

対処

インスタンスIDの空白を除去して再デプロイ。

これで、設定画面の見え方期待通りとなり、アラームも正しく検知できました。

何て初歩的な誤りなんだ・・・・。
でも、こういう初歩的な誤りほど見つけ辛いんですよね。

#AWS
#CloudWatch
#EC2
#CPU使用率

この記事が気に入ったらサポートをしてみませんか?