[memo]Amazon CloudWatch Monitoring Scripts install at CentOS6


リーダー、Amazon Web Services実践入門発売おめでとうございます! さて、AWSのCloud WatchではディスクIOの監視が標準メトリクスで用意されているが、ディスク容量監視ができません。このため、Amazon CloudWatch Monitoring Scriptsをインストールしてディスク容量を監視します。

■ 環境

$ cat /etc/redhat-release 
CentOS release 6.7 (Final)

■ Amazon CloudWatch Monitoring Scriptsダウンロード

$ wget http://ec2-downloads.s3.amazonaws.com/cloudwatch-samples/CloudWatchMonitoringScripts-v1.1.0.zip

※ 最新版のスクリプトはこちらから確認してくださいね。

■ スクリプトのzipファイル解凍

$ unzip CloudWatchMonitoringScripts-v1.1.0.zip

■ 初期設定

awscredsファイルにAWSのアクセスキーとシークレットキーを書き込みます。

$ cd aws-scripts-mon
$ cp -p awscreds.template awscreds
$ vi awscreds
AWSAccessKeyId=XXXXXXXXXXXXXXXX #アクセスキー
AWSSecretKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #シークレットキー

■ perlモジュールをyumでインストールする

$ sudo yum install perl-DateTime perl-Digest-SHA perl-CGI perl-URI perl-Compress-Raw-Zlib perl-Compress-Zlib perl-Crypt-SSLeay
$ sudo yum --enablerepo=epel install perl-LWP-Authen-Negotiate

■ 試運転

ディスク使用率を試しに表示してみます。この時点ではまだCloudWatchにデータは送られません。「--disk-path」には監視対象のボリュームをdfコマンドで確認して渡します。

$ ./mon-put-instance-data.pl --disk-space-util --disk-path=/dev/xvde1 --verify --verbose --aws-credential-file=./awscreds
DiskSpaceUtilization [/]: 60.015882127634 (Percent)
Using AWS credentials file <./awscreds>
Endpoint: https://monitoring.ap-northeast-1.amazonaws.com/
Payload: AWSAccessKeyId=XXXXXXXX&Action=PutMetricData&MetricData.member.1.Dimensions.member.1.Name=Filesystem&MetricData.member.1.Dimensions.member.1.Value=%2Fdev%2Fxvde1&MetricData.member.1.Dimensions.member.2.Name=InstanceId&MetricData.member.1.Dimensions.member.2.Value=i-XXXXXXXX&MetricData.member.1.Dimensions.member.3.Name=MountPath&MetricData.member.1.Dimensions.member.3.Value=%2F&MetricData.member.1.MetricName=DiskSpaceUtilization&MetricData.member.1.Timestamp=2015-11-04T15%3A03%3A20.000Z&MetricData.member.1.Unit=Percent&MetricData.member.1.Value=60.015882127634&Namespace=System%2FLinux&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2015-11-04T15%3A03%3A20.000Z&Version=2010-08-01&Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Verification completed successfully. No actual metrics sent to CloudWatch.

こんな感じに「Verification completed successfully.」と表示されればOKです。 / の使用率が60%だということがわかりました。

■ CloudWatchにデータを送ってみる

$ ./mon-put-instance-data.pl --disk-space-util --disk-path=/dev/xvde1 --verbose --aws-credential-file=./awscreds

■ シェルスクリプトにしてcronに登録する

$ touch bin/DISKWATCH
$ chmod 700 bin/DISKWATCH
$ vi bin/DISKWATCH
#!/bin/bash
set -uex
LANG=C

WATCHPATH=/dev/xvde1

SCRIPTDIR=${HOME}/aws-scripts-mon
SCRIPTNAME=${SCRIPTDIR}/mon-put-instance-data.pl
CREDENTIALFILE=${SCRIPTDIR}/awscreds

if [ ! -f ${CREDENTIALFILE} -o ! -x ${SCRIPTNAME} ];
then
  exit 1
fi

${SCRIPTNAME} \
--disk-space-util \
--disk-path=${WATCHPATH} \
--verbose \
--aws-credential-file=${CREDENTIALFILE}
$ crontab -l
00-55/5 * * * * /home/oresama/bin/DISKWATCH > /dev/null 2>&1

あとはLinux システム メトリックスとして「Filesystem,InstanceId,MountPath」がCloudWatchのグラフに表示されていればOKです。ね、簡単でしょう?