toto_1212

技術のログをツラツラ書きます。自分用ですが参考にしていただけたら嬉しいです。間違ってたらドンドン突っ込んでください。

CloudWatchでEC2を監視する

カスタムメトリクス情報をCloudWatchへ送信し、閾値を過ぎたらメール送信します。

環境:amazon Linux 64bit
   S3backet名 mnttest
※rootで作業

1. CloudWatchコマンドラインツールをダウンロードする

wget http://ec2-downloads.s3.amazonaws.com/CloudWatch-2010-08-01.zip

2. ファイルを解凍する

unzip CloudWatch-2010-08-01.zip

3. アクセスID、シークレットアクセスキー情報を設定する

cd CloudWatch-1.0.13.4
cp credential-file-path.template credentials
vi credentials

AWSAccessKeyId=xxxxxxxxxxxxxxxxxxx
AWSSecretKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

4. ダウンロードしたツールを任意のディレクトリに移動する

mv 展開したディレクトリ /etc/aws/CloudWatch	#CloudWatch-1.0.13.4からCloudWatchへリネーム(任意)

※シェルに記載するディレクトリと整合性がとれれば、どのディレクトリでも問題ない

5. CloudWatchに情報を投げるシェルを作成する
※シェル名は何でも構いません。

今回はシェルを仕込んだサーバのデーモン起動(httpdとzabbix-agent)、空きメモリ(MB)、使用メモリ(%)、
ディスク使用量(%)をCloudWatchへ送信するシェルとする。

vi /etc/aws/CloudWatch/cloud_watch_reports.sh

#!/bin/bash

export AWS_CLOUDWATCH_HOME=/etc/aws/CloudWatch
export AWS_CREDENTIAL_FILE=$AWS_CLOUDWATCH_HOME/credentials
export AWS_CLOUDWATCH_URL=https://monitoring.amazonaws.com
export PATH=$AWS_CLOUDWATCH_HOME/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/jre

###Config###

InstanceId=x-xxxxxxxx(対象のインスタンスID)

#apache
apached=`ps cax | grep httpd | wc -l`
#zabbix_agent
zabbixagentd=`ps cax | grep zabbix_agentd | wc -l`

let "alld=apached*zabbixagentd"

if [ "$alld" -gt "0" ]; then
 Processes=1
else
 Processes=0
fi

#Memory
memtotal=`free -m | grep 'Mem' | tr -s ' ' | cut -d ' ' -f 2`
memfree=`free -m | grep 'buffers/cache' | tr -s ' ' | cut -d ' ' -f 4`
let "memused=100-memfree*100/memtotal"

#diskUsage
l_num=1
disk_max=0
df_result=/etc/aws/CloudWatch/log/disk_usage.txt

if [ $# -ne 1 ]; then
 echo "usage : cloudwatch_report.sh /etc/aws/CloudWatch/log/filename"
 exit 1
fi

if [ -a $df_result ]; then
 rm -f $df_result
fi

df -k > $1

exec 3< $1
while read FL 0<&3
do
 if [ $l_num -eq 1 ] ; then
 l_num=`expr $l_num + 1`
 else
 echo $FL | grep /dev/ | tr -s ' ' | cut -d ' ' -f 5 | sed -e s/%// >> $df_result
 fi
done
exec 3<&-

while read LINE; do
 if [ $disk_max -lt $LINE ] ; then
 disk_max=`expr $LINE`
 fi
done < $df_result

###Execute###
#mysql and apache
mon-put-data --metric-name "httpd_zabbix agentd Processes" --namespace "cloudwatch/test" --dimensions "InstanceId=$InstanceId" --value "$Processes" --unit "Count" --region ap-northeast-1

#FreeMemory
mon-put-data --metric-name "FreeMemoryMBytes" --namespace "cloudwatch/test" --dimensions "InstanceId=$InstanceId" --value "$memfree" --unit "Megabytes" --region ap-northeast-1

#UsedMemoryPercent
mon-put-data --metric-name "UsedMemoryPercent" --namespace "cloudwatch/test" --dimensions "InstanceId=$InstanceId" --value "$memused" --unit "Percent" --region ap-northeast-1

#DiskUsage
mon-put-data --metric-name "DiskUsed" --namespace "cloudwatch/test" --dimensions "InstanceId=$InstanceId" --value "$disk_max" --unit "Percent" --region ap-northeast-1

6. cronに登録し自動実行する

crontab -e
*/5 * * * * /etc/aws/CloudWatch/cloud_watch_reports.sh /etc/aws/CloudWatch/log/disk_describe.txt


ManagementConsoleを使って、CloudWatchの設定をします。

7. Management Consoleにログインし、「CloudWatch」をクリックする
f:id:toatoshi:20130613185700j:plain


8. Metricsをクリックする
f:id:toatoshi:20130613190628j:plain


9. Viewing:を「cloudwatch/test:InstanceId」に変更し値が取れていることを確認する
f:id:toatoshi:20130613190944j:plain


値が取れていることが確認できたら、アラームを設定して検知したらメールを送信する
設定をします。
今回の設定は、httpdプロセスが落ちた際にアラームが上がり、メールが送信されるような
設定とします。

10. Alarmsをクリックする
f:id:toatoshi:20130613191112j:plain


11. Create Alarmをクリックする
f:id:toatoshi:20130613191153j:plain


12. Viewing:を「cloudwatch/test:InstanceId」に変更する
f:id:toatoshi:20130613191235j:plain


13.「httpd_zabbix agent Prosess」を選択(クリック)し、Continueをクリックする
f:id:toatoshi:20130613191512j:plain


14. Name、Descripdptionとも任意の値を入れ、5分以上httpdのPresessが落ちたら検知という
設定を「<= 0 for 5 minutes」で表現しContinueをクリックする
f:id:toatoshi:20130613191839j:plain


15.メール送信設定として、Take actionを「Send Notification」に変更し、Topic、Email
それぞれに任意の値を入れ、「ADD ACTION」をクリックし設定反映し、Continueをクリックする
f:id:toatoshi:20130613192105j:plain


16.設定結果を確認する
f:id:toatoshi:20130613192133j:plain


17. 「Close」をクリックする
f:id:toatoshi:20130613192212j:plain


18. Management Console上でも反映されていることを確認する
f:id:toatoshi:20130613192301j:plain


19. テストのため、httpdサービスを停止する

service httpd stop

※検知されるまでしばらく待つ。


20. 設定したメールアドレスに送信されているかを確認する
f:id:toatoshi:20130613192455j:plain


21.Management Console上でも正しく動作していることを確認する
f:id:toatoshi:20130613192544j:plain