HAPPY HACKING Oouchi's BLOG

PSE(ポンコツエンジニア)の技術ブログ

Amazon CloudWatch を使用してEC2のCPU使用率が高い時に通知する

f:id:ooooouchi:20200601003252p:plain

はじめに

Amazon CloudWatchはAWSリソースのパフォーマンスモニタリングに最適なサービスです。
SNSと組み合わせることでリソースの状態に合わせて通知を送ることもできます。

今回は、EC2のCPU使用率が高くなったらメール通知を実施する仕組みを構築してみます。

大まかなやること

  • EC2作成
  • SNSトピック作成
  • CloudWatchアラーム作成
  • 動作確認

では、やっていきましょう。

本題

EC2作成

EC2作成に関してはこちらに詳しくまとまっているので詳細は割愛します。

AWS EC2インスタンスを作成する(AMI:Amazon Linux / Amazon EBSの設定など)

Amazon Linux 2 AMIを使用してEC2インスタンスを作成します。

f:id:ooooouchi:20200531232714p:plain

タグ設定をするとモニタリングの時にわかりやすくて良いです。

キー:NAME
:CloudWatchSample

f:id:ooooouchi:20200531232708p:plain

セキュリティグループにSSHのルールを追加しておきましょう。

タイプ:SSH
ソース:カスタム・もしくはマイIP

f:id:ooooouchi:20200531232704p:plain

CPUに負荷をかける準備

EC2インスタンスに接続し、順番にコマンドを実行してストレスコマンドをインストールします。

f:id:ooooouchi:20200531232659p:plain

sudo yum update -y
sudo amazon-linux-extras install epel
sudo yum install -y stress

f:id:ooooouchi:20200531232654p:plain

SNSトピック作成

SNSコンソールへ移動します。

左部メニューのトピックをクリックし、トピックの作成をクリックします。

f:id:ooooouchi:20200531232649p:plain

設定項目を入力していきます。

名前:CPUUtilizationSample
表示名:CPUUtilizationSample

f:id:ooooouchi:20200531232642p:plain

残りの項目はデフォルトで大丈夫です。
トピックの作成をクリックします。
トピックが正常に作成されたことを確認します。

f:id:ooooouchi:20200531232635p:plain

サブスクリプション作成

トピックの詳細画面からサブスクリプションの作成をクリックします。

f:id:ooooouchi:20200531232630p:plain

設定項目を入力していきます。

プロトコル:Eメール
エンドポイント:通知したいEメールアドレス
サブスクリプションの作成をクリックします。

f:id:ooooouchi:20200531232623p:plain

サブスクリプション登録確認のメールが届きます。

f:id:ooooouchi:20200531232609p:plain

Confirm subscriptionをクリックします。

f:id:ooooouchi:20200531234130p:plain

このような画面が表示されたらサブスクリプションの登録は完了です。

CloudWatchメトリクス確認

CloudWatchコンソールへ移動します。

左部のメトリクスをクリックし、全てのメトリクスタブからEC2→インスタンス別メトリクスをクリックします。

f:id:ooooouchi:20200531232549p:plain

先ほど作成したインスタンスのCPUUtilizationをチェックします。

見つからない場合は検索フォームに「MetricName="CPUUtilization"」を指定するなどして絞り込みます。

f:id:ooooouchi:20200531232543p:plain

CPU使用率のグラフが見れると思います。

CloudWatchアラーム作成

左部のアラームをクリックし、アラームの作成をクリックします。

f:id:ooooouchi:20200531232536p:plain

メトリクスの選択をクリックします。

f:id:ooooouchi:20200531232532p:plain

メトリクスの確認と同様にEC2→インスタンス別メトリクスをクリックします。

先ほど作成したインスタンスのCPUUtilizationをチェックします。

メトリクスの選択をクリックします。

メトリクスと条件を設定していきます。

  • メトリクス
    期間:1分
  • 条件
    .. よりも:30

f:id:ooooouchi:20200531232526p:plain

他の項目はデフォルトで大丈夫です。

この設定により、1分間のCPUの値の平均が30よりも大きい場合にアラームトリガーをキックする条件となります。

アクションの設定

SNSトピックの選択:既存のSNSトピックを選択
通知の送信先:作成したSNSトピック

f:id:ooooouchi:20200531232520p:plain

次へをクリックします。

アラームの名前を入力します。

アラーム名:CPUUtilizationAlarm
アラームの説明欄は任意です。

次へをクリックします。

アラームのプレビューが表示されます。

f:id:ooooouchi:20200531232511p:plain

設定した条件などが確認できます。

プレビューを確認してアラームの作成をクリックします。

f:id:ooooouchi:20200531232503p:plain

アラームが作成されたことを確認できます。

動作確認

EC2インスタンスに接続しているターミナルに戻ります。

ストレスコマンドを実行してCPU使用率を増加させます。

sudo stress --cpu 10 -v --timeout 400s

f:id:ooooouchi:20200531232458p:plain

しばらく待ってからCloudWatchコンソールに戻ります。

左部のアラームをクリックし、作成したCPUUtilizationAlarmをクリックします。

f:id:ooooouchi:20200531232452p:plain

グラフからCPU使用率が閾値を超過していることを確認できます。

さらに、SNSから通知されたメールが届いていることも確認できます。

f:id:ooooouchi:20200531232443p:plain

おまけ

ダッシュボード作成

左部のダッシュボードをクリックします。

f:id:ooooouchi:20200531232435p:plain

ダッシュボードの作成をクリックします。

ダッシュボード名:CPUUtilizationDashboard

を入力し、ダッシュボードの作成をクリックします。

f:id:ooooouchi:20200531232430p:plain

を選択して、設定をクリックします。

メトリクスの確認と同様にEC2→インスタンス別メトリクスをクリックします。

先ほど作成したインスタンスのCPUUtilizationをチェックします。

ウィジェットの作成をクリックします。

f:id:ooooouchi:20200531232426p:plain

メトリクスに応じたダッシュボードを作成することができました。

f:id:ooooouchi:20200531232422p:plain

CPU使用率が下がったことも確認できます。

おわりに

CloudWatchを使用してパフォーマンスに応じてメール通知できるようになりました。
監視要件や実現したいことに合わせて条件やモニタリングリソースをアレンジしてみましょう。