EC2のCPU使用率をCloudWatchで監視してメール通知を行う

はじめに

こんにちは。kunimotoです。

今回は、インフラ運用の基本である「監視」について学ぶため、Amazon CloudWatchを使ってEC2インスタンスのCPU使用率を監視してみます。

実施する検証の詳細としては、EC2のCPU使用率がしきい値を超えた場合にCloudWatch Alarmを発生させ、Amazon SNSを使ってメール通知をする構成を作成していきます。

事前準備(EC2インスタンス)

まず最初に、今回の監視対象となるEC2インスタンスの準備を行います。

EC2サービス画面に遷移後「インスタンスを起動」を押下し、以下を設定します。 インスタンスを起動後、インスタンスの状態が「実行中」となっていることを確認しましょう。

項目 設定値
名前 任意のインスタンス名
Amazonマシンイメージ Amazon Linux 2023 kernel-6.1 AMI
インスタンスタイプ t3.micro
キーペア 作成したキーペア
VPC 作成したVPC
サブネット 作成したパブリックサブネット
パブリックIPの自動割り当て 有効化
セキュリティグループ SSH接続を許可されたセキュリティグループ

起動後、インスタンスのパブリックIPv4アドレスを確認し、作成した秘密鍵を選択しTeraTerm等を使用しサーバへSSH接続をしましょう。

サーバ接続後、以下コマンドを実行し検証でCPUに負荷をかけるstressコマンドをインストールしておきます。

sudo dnf install -y stress

実行後「Complete!」となっていればインストールは完了しています。

実施作業(CloudWatch設定)

つづいて、CloudWatch上で作成したインスタンスのCPU監視を行う設定と、アラートをメールに送信するSNSトピック作成を行います。

アラーム作成

CloudWatchサービスを開いて、左ペイン「アラーム」を押下し、「アラームの作成」をクリックします。

データソースは「メトリクス」

タイプは「クラシック」を選択します。

メトリクスの選択を押下し、作成したEC2インスタンスのインスタンスIDで検索を行い

「インスタンス別メトリクス」から対象インスタンスの メトリクス名「CPUUtilization」を選択します。

メトリクスと条件の指定画面に遷移後

条件は以下の通り設定し

設定後「次へ」を押下します。

項目 設定値
しきい値の種類 静的
CPUUtilization が次の時... より大きい
...よりも 85

アクション設定

つづいて、アクションの設定を行っていきます。

ここでは、CPUがしきい値を超えた際のアラーム状態とCPUがしきい値を下回ったOK状態の 通知を設定します。

最初にアラーム状態アクションの設定を行います。 以下、設定が完了後「トピックの作成」をクリックし、通知の追加で「OK」状態の通知設定も行います。

アラーム状態
項目 設定値
アラーム状態トリガー アラーム状態
次の SNS トピックに通知を送信 新しいトピックの作成
新規トピックの作成中... 任意のトピック名
通知を受け取る E メールエンドポイント … 自身のメールアドレス
OK
項目 設定値
アラーム状態トリガー OK
次の SNS トピックに通知を送信 既存の SNS トピックを選択
通知の送信先 作成したトピック

「次へ」を押下後、アラーム名を決める画面に遷移しますので任意の名前を設定します。 設定後、アラームの作成をクリックします。

サブスクリプションの登録

アラームの作成後、作成したトピックのサブスクリプションの確認を行う必要があります。

「AWS Notification - Subscription Confirmation」このような件名でトピックを作成した際に設定したメールアドレスに

メールが届きますので「Confirm subscription」をクリックします。

クリック後、サブスクリプション登録に成功したことを確認しましょう。

実施作業2(アラート発報)

監視対象のEC2インスタンス上で以下コマンドを実行しCPUに負荷を5分間かけます。

 stress --cpu 2 --timeout 300

コマンド実行後、作成したアラームのメトリクス画面上でアラーム状態になることの確認をしましょう

SNSトピックを通じてアラートメールが届いていることと復旧後のOKメールが確認できたら、今回のCPU監視の設定は完成です。

アラーム状態のメール

OKメール

まとめ

今回は、EC2インスタンスのCPU使用率をAmazon CloudWatchで監視し、しきい値を超えた場合にAmazon SNSでメール通知する方法を試してみました。

CloudWatchにはCPU使用率以外にも、ネットワーク通信量やディスクI/Oなど、さまざまなメトリクスがあります。 そのため、用途に応じて監視する項目を選ぶことで、AWS上のリソースの状態を確認しやすくなります。

実際にアラームを発報させてメール通知を確認することで、CloudWatch AlarmとSNSを組み合わせた監視通知の流れを理解できました。

今後は、より実運用に近い監視を行うために、CloudWatch Agentを利用したメモリ使用率やディスク使用率の監視についても試してみたいです。