【AWS】Amazon CloudWatch+Amazon SNSでEC2のリソース監視してみた!
どうも!ヒグッティ(ヒグッティ@システムエンジニア)です!
今回はAWSのCloudWatchでEC2のリソース監視をやっていきます!!と言っても、、CloudWatchだけだと監視できないリソースもあったりするけど今回はオーソドックスにCPU使用率を監視します!!
CloudWatch+SNSでリソース監視をメールで通知できるようにもします!
目次
やりたいこと
EC2のCPU使用率が高くなったら管理者にメールを送信するようにしたい!!
やったこと
- CloudWatchでEC2のリソース監視を設定→CPU使用率の監視設定
- リソースに異常が発生した時にSNSでメールにその旨を通知→管理者にメール送信
構成
以下のような構成です。

Amazon SNSとは?
Amazon SNSとはAmazon Simple Notification Service(以降、SNS)のことで、AWSのアプリケーションやサービスをトリガーに、他のサービスなどにメッセージを送信する機能です。
リソース監視設定の流れ
- SNSで通知先(エンドポイント)設定。今回はメールの送信先の設定。
- CloudWatchで監視のメトリクスとアラームを設定。
この順番でないとCloudWatchのアラームが設定できないんだよね、、本当はCloudWatchのアラーム設定からやりたいけどSNS→CloudWatchの順番で説明します!
リソース監視の設定方法
リソースの監視方法と通知方法を記載します。リソース監視はCloudWatchの標準メトリクスのみとします。今回の通知方法はSNSを使ってメールをサーバ管理者に通知するようにします。
SNSで通知先の設定
SNSは何かのトリガーをきっかけに、AWSのサービスを起動するように通知する機能です。SNSはトピックとサブスクリプションから構成されます。トピックの中にサブスクリプションが存在する感じです。
トピックとはAWSで発生したイベントやトリガーなどを受信することができるもの。サブスクリプションとはトピックの受信内容をどこに伝えるか(エンドポイント)を設定します。
実際にSNSでトピックとサブスクリプションを設定してみます。

トピックの作成が終わったらサブスクリプションを作成します。

今回はプロトコルをEメールにしましたが、携帯のショートメッセージ(SMS)やHTTPSにも送信できます!!サブスクリプションの作成が完了したら、登録したメールアドレスにAWSからメールが来ているはずです。そのメール中のURLをクリックし認証済みにしましょう。

これでCloudWatchでアラームが発生した際にメールを通知する仕組みを作成できました。SNSの設定が終わった後はCloudWatchの設定です。
CloudWatchで監視のメトリクスとアラームを設定
CloudWatchでメトリクスの設定をしていきます。CPU使用率(CPUUtilization)を設定します。

メトリクスの選択を押下したら、「EC2」→「インスタンス別メトリクス」と選択してください。以下はCPU使用率を選択する時の画面です。

メトリクスを選択したらアラームの発動条件を指定します。今回は5分間でのCPU使用率の最大値が80%を超えたらアラームが発動するようにしました。

次はアラームが発生した時の動作(アクション)を指定します。SNSで作成したトピックを指定します。

次はアラーム名を指定します。

最後に確認画面が表示されます。アラームの作成を押下すれば完了です。

これでCloudWatchの設定が完了しました。
アラームを発生させてみた!!
実際にアラームを発生させてみます。どんなメールが送信されるのか見てみましょう!今回はCPU使用率が1%以上になったらアラームが発生するように修正しています。
このコマンドをOS上で実行しCPU使用率を増加させました。
openssl speed -multi `grep processor /proc/cpuinfo|wc -l`
コマンドを実行した3分後くらいに、アラームを検知しトピックからメールが送信されました。メールはこんな感じです。

ちゃんとCPU使用率を検知してメール送信することができました。
最後に
SNSとCloudWatchを画面でポチポチするだけでサーバの監視ができるようになるのは驚きです。1時間くらいあれば今回の内容は導入できちゃいます!!早く簡単にできちゃう、、監視できない項目もあるから本番運用で使うにはちょっと足りないかなぁ。プロセス監視したかったら別途設定しないとダメみたいだぁ。
最近はインスタンスとか障害あった時のためにAWSのパートナー会社に頼むことがおおいんだろうなぁ~。クラスメソッドとかに丸投げでよい気がする~。
次はCloudWatchで本番運用するなら何をすればよいかを記事にしようかなぁ~