[AWS]EC2 Auto Scalingのメモリ/ディスク監視をCloudWatchで実装する方法

 

おはようございます!インフラエンジニアの木村(@K2020_js)です!今回はEC2でAutoScalingのメモリ/ディスクの監視について、少し工夫が必要だったので、その手順を紹介しようと思います。

今回やろうとしたこと

上記図のように、AutoScalingにぶら下がるEC2にCloudWatch Agentをインストールし、そのAutoScaling単位のメモリ、ディスクの値をCloudWatch Alarmで確認し、閾値を超えたら、SNS経由でUserに通知を行おうと考えていました。

ただし、こちらがうまくいかず、デフォルトのCloudWatch Agentの設定ではAutoScaling単位でのメモリ、ディスクの値は取得できず、どうしても、そのAutoScalingにぶら下がるEC2単位でしかメモリ、ディスクの値の取得ができませんでした。

これの何が問題かというと、CloudWatch Alarmの設定をするときに、監視する対象にEC2の個別のIDを指定して設定を行わないといけないため、もしそのIDのEC2がAutoScalingのスケールインで削除された際、EC2とCloudWatchAlarmとの紐づきは消え、何も紐づかないCloudWatch Alarmが残ってしまいます。

また、この後再度EC2のスケールアウトが起こった際、起動したEC2にCloudWatch Alarmの設定はされていないので、何も監視されていないEC2が存在してしまうのです。(スケールイン/アウトが発生するたびに手動で紐付け直すのも現実的でない…)

今回このような問題が起こらないように、AutoScaling単位でメモリ、ディスクの監視を行える設定方法をご紹介させていただきます。

環境

OS:Amazon Linux 2023

手順

※今回AutoScalingのメモリ/ディスクを取得するための、CloudWatchの設定以外は他の記事の参照先を記載させていただきます。ご了承ください。

1. CloudWatch Agentの設定を行う

1-1. EC2にSSHする

セッションマネージャーをご利用する場合は以下の記事がわかりやすかったので、ご参照ください

1-2. CloudWatch Agentをインストールする

1-3. ウィザードでCloudWatch Agentの設定をする

ちなみに、設定内容については私は下記の通りにしています。(CloudWatch logsやX-Rayの設定は省いていますので、設定したい場合は選択肢でyesを選んでください)

1-4. 下記コマンドを実行し、config.jsonあることを確認する

1-5. CloudWatch Agentを起動設定を行う

1-6. CloudWatch Agentを起動し、ステータスを確認する

下記のようにActive: active(running)になっていれば、OK

1-7. CloudWatch AgentのConfigファイルを編集し、AutoScalingNameで項目でCloudWatch メトリクスを作れるように設定する

※ここがポイント!初期設定ではインスタンスIDでしか取得できないところが、この設定でAutoScalingNameでメトリクスの取得が可能となります!

aggregation_dimensionsの項目をInstanceIdから[[AutoScalingGroupName]]に変更します。

2. CloudWatch以外の設定

※前述した通り、CloudWatch以外の設定に関しては以下にて参考記事を記載させていただきます。こちらを元に設定お願いします。

2-1. AMIの取得

項番1でCloudWatch Agentの設定を行ったEC2のAMIを取得してください。

手順については下記記事が大変わかりやすかったので参考にしてください

2-2. IAMロールの作成/アタッチ

EC2からCloudWatchメトリクスを取得できるポリシー(CloudWatchAgentAdminPolicy、AmazonSSMManagedInstanceCore)の付いたIAMロールを作成し、EC2にアタッチしてください。

手順は下記AWSの公式ページを参考にしてください。

2-3. AutoScalingの作成

項番2のAMI、項番3で作ったIAMロールを使ってAutoScalingを作成してください。

手順は以下記事が大変わかりやすかったので、参考にしてください。

3. CloudWatch Agentからメトリクスデータが送信されているか確認

※CloudWatch Agentを設定してから、データがCloudWatchに送信されるまで5分少々かかりますので、少し待ってからご確認ください。

3-1. AWSアカウントにログインし、下記URLよりCloudWatchのコンソールに移動する

https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#home:

3-2. 左ペインから「全てのメトリクス」→「CWAgent」を開く

3-3. AutoScalingGroupNameの項目があれば、OK

4. CloudWatch アラームの設定

項番5で確認したメトリクスを使用してCloudWatchアラームを設定していきます。

今回はディスクの監視設定を行いますが、メモリの設定する場合も同様の手順で設定可能ですので、ご参考にしていただけますと幸いです。

4-1. 左ペインから「すべてのアラーム」→「アラームの作成」をクリックする

4-2. 「メトリクスの選択」をクリックする

4-3. 「CWAgent」をクリックする

4-4. AutoScalingGroupNameをクリックする

4-5. 対象のAutoScaling/メトリクス名(今回はdisk)を選択し、「メトリクスの選択」をクリックする

4-6. 以下値を入力し、「次へ」をクリックする
  • 統計:平均値
  • 期間:5分
  • しきい値の種類:静的
  • アラームの条件:より大きい
  • …よりも:80
  • アラームを実行するデータポイント:1/1
  • 欠落データ:欠落データは見つかりませんとして処理

※値は設定したい内容によって変わりますので、あくまで参考値としてください

4-7. 以下の内容でSNSを設定し、「次へ」をクリックする
  • トリガー:アラーム状態
  • SNS:設定しているSNS

※値は設定したい内容によって変わりますので、あくまで参考値としてください

4-8. 任意のアラーム名を付け、「次へ」のボタンをクリックする

4-9. 設定値に間違いがないか確認し、「アラームの作成」をクリックし完了

まとめ

今回AutoScalingのメモリ、ディスクの監視設定について記載しました。知らないと意外とドツボにハマると思うので、初心者の方はぜひこのブログで回避していただけますと幸いです!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール