CloudWatchのアラームでメール通知機能を使う
今回は、CloudWatchを使ってCPUが指定の使用率以上になったら、
メール通知し、EC2インスタンスを落としてみる
※未完で途中までです。
そもそもCloudWatchのアラーム機能とは?
EC2やEBSなど、CloudWatchでAWSリソース(以外も可?)を監視し、メトリクス(設定値)が規定の上限を上回った場合にメール通知などを行うことができる
アラームの作成
AWSのメニューからCloudWatchを選択し、アラーム項目を開く
今回は、以前に作成したEC2のCPU使用率を監視する
すべてのメトリクスからCPUUtilizationを選択する
グラフ化したメトリクスの項目で1分ごとにCPU使用率の"最大値"を測定するように設定する
線グラフ化するので、横軸の時間は日本のタイムゾーンに設定する
閾値の設定をする
CPUの使用率が > 10% を超えた場合に設定
※アラーム作成後に動作が安定しないため、下記の項目を追加した。
これは、EC2のCPU使用率をCloudWatchが監視する場合、監視値が取得できないときは欠落データとして無視するように設定する
通知に関する設定をする
今回はメールを送るためのトピックという機能を追加する
下記の項目を入力してトピックの作成を押下
入力したメールアドレスにメールが届くので、承認する
※メール内容
作成後のアラームを確認
EC2を起動させていない、また、アラームの作成直後でCPUのデータを収集できていないためデータ不足が発生している
EC2を起動させてしばらく時間が経つと、OKに変わりCPU使用率が表示される
アラームとEC2の停止を確認する
HTTP GET DOS攻撃でEC2を落とす。
(CPU使用率の閾値が大きすぎるため10%から1%に変更する。)
アラームの更新で設定完了
EC2にapacheを入れているので、エンドポイントに向けて短時間でcurlコマンドを送る(HTTP GET DOS攻撃)
使用したShellは下記
(※下記のIPはセキュリティ制限を行なっています。)
[dos.sh]
#!/bin/sh
for i in `seq 10000`
do
curl http://ec2-54-65-248-190.ap-northeast-1.compute.amazonaws.com &
done
ローカルホストからEC2に向けて実行する
レスポンスは[apache test]で実行される
bash dos.sh
apache test
apache test
apache test
apache test
apache test
apache test
EC2インスタンスで監視する
sar -Pコマンドを使用する
50秒あたりから、user/systemの値が表示されている。
ここでいうuser/systemの合計値が実際のCPU使用率になるので
下記より、最大値で4~5%使用していることがわかる
(※stealに関しては不明、今後調査予定)
CloudWatchの設定で、1分間ごとにCPU使用率の最大値を取得しているので、
ここで5%程度の値がプロットされているか確認する必要がある
sar -P ALL 1 10
15時20分48秒 CPU %user %nice %system %iowait %steal %idle
15時20分49秒 all 0.00 0.00 0.00 0.00 0.00 100.00
15時20分49秒 0 0.00 0.00 0.00 0.00 0.00 100.00
15時20分49秒 CPU %user %nice %system %iowait %steal %idle
15時20分50秒 all 0.00 0.00 0.00 0.00 0.00 100.00
15時20分50秒 0 0.00 0.00 0.00 0.00 0.00 100.00
15時20分50秒 CPU %user %nice %system %iowait %steal %idle
15時20分51秒 all 0.99 0.00 0.99 0.00 0.00 98.02
15時20分51秒 0 0.99 0.00 0.99 0.00 0.00 98.02
15時20分51秒 CPU %user %nice %system %iowait %steal %idle
15時20分52秒 all 0.00 0.00 0.00 0.00 1.01 98.99
15時20分52秒 0 0.00 0.00 0.00 0.00 1.01 98.99
15時20分52秒 CPU %user %nice %system %iowait %steal %idle
15時20分53秒 all 0.00 0.00 0.00 0.00 0.00 100.00
15時20分53秒 0 0.00 0.00 0.00 0.00 0.00 100.00
15時20分53秒 CPU %user %nice %system %iowait %steal %idle
15時20分54秒 all 1.01 0.00 1.01 0.00 0.00 97.98
15時20分54秒 0 1.01 0.00 1.01 0.00 0.00 97.98
15時20分54秒 CPU %user %nice %system %iowait %steal %idle
15時20分55秒 all 1.02 0.00 1.02 0.00 0.00 97.96
15時20分55秒 0 1.02 0.00 1.02 0.00 0.00 97.96
15時20分55秒 CPU %user %nice %system %iowait %steal %idle
15時20分56秒 all 1.04 0.00 3.12 0.00 1.04 94.79
15時20分56秒 0 1.04 0.00 3.12 0.00 1.04 94.79
15時20分56秒 CPU %user %nice %system %iowait %steal %idle
15時20分57秒 all 0.00 0.00 1.00 0.00 0.00 99.00
15時20分57秒 0 0.00 0.00 1.00 0.00 0.00 99.00
15時20分57秒 CPU %user %nice %system %iowait %steal %idle
15時20分58秒 all 0.00 0.00 0.00 0.00 0.00 100.00
15時20分58秒 0 0.00 0.00 0.00 0.00 0.00 100.00
平均値: CPU %user %nice %system %iowait %steal %idle
平均値: all 0.40 0.00 0.71 0.00 0.20 98.69
平均値: 0 0.40 0.00 0.71 0.00 0.20 98.69
EC2の時間設定を行なっていないので時間表示が間違っているが、
JSTで00:20:55あたりの時刻をCloudWatchで確認する
うーん、最大値測定で0.3%程度・・・
彼は何を見ていたのだろう(笑
現在は、監視時間の粒度が1分おきになっているが、今後粒度を小さくして確認する
夜も遅いので、今後この記事に追記していきます。
以上