FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

AWS CloudWatchでディスク容量チェック

こんばんは。
むらいです

私は関西弁なので、
話すと周りもつられてイントネーションが関西弁になるのが、
ちょっとほっこりしている今日このごろです。

さて、そんなことより、
AWSを使ってて、ディスク容量を監視したかったんですが、
デフォルトにディスク容量チェックがありません。。。
なので、今日はその設定方法を書いていきます。


そもそも、
AWSモニタリングサービスにCloudWatchてのがあります。
デフォルトでは以下のようなものが監視できます。

・CPUUtilization(%): CPU使用率
・DiskReadBytes(B): ディスクI/O量(読み取り)
・DiskReadOps(回): ディスクI/O回数(読み取り)
・DiskWriteBytes(B): ディスクI/O量(書き込み)
・DiskWriteOps(回): ディスクI/O回数(書き込み)
・NetworkIn(B): ネットワーク情報量(受信)
・NetworkOut(B): ネットワーク情報量(送信)
・StatusCheckFailed(回): 状態
・StatusCheckFailed_Instance(回): インスタンス状態
・StatusCheckFailed_System(回): システム状態

はい。ディスク容量ないですね。
ログ溜めててディスクがすぐ一杯!なんてこともあり得るので、
監視対象にしていきます。

Amazon CloudWatch Monitoring Scripts for Linux
監視対象が増やせます。
http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html

これによる監視できる対象は以下です。
・MemoryUtilization(%): メモリ使用率
・MemoryUsed(MB): メモリ使用量
・MemoryAvailable(MB): 使用可能メモリ量
・SwapUtilization(%): スワップ使用率
・SwapUsed(MB): スワップ使用量
・DiskSpaceUtilization(%): ディスク領域使用率
・DiskSpaceUsed(GB): ディスク領域使用量
・DiskSpaceAvailable(GB): 使用可能ディスク領域量

え!AWS側で用意してるんやん。と思いきや、
ここの記載通りにやってもうまくいきませんでした。
方法は以下です。

まずはperlモジュールのインストールをします

yum install perl-Switch perl-Sys-Syslog perl-LWP-Protocol-https
yum install gcc make perl-CPAN perl-Time-HiRes perl-XML-Parser mod_perl cpanminus
cd /
perl -MCPAN -e shell
cpan[1]> install Bundle::CPANxxl
cpan[1]> install Bundle::LWP5_837 LWP
cpan[1]> install Switch
cpan[1]> install Sys::Syslog
cpan[1]> install Crypt::SSLeay

サーバの適当な場所にAWSからツールをダウンロード(今回はtmpにcloudwatchディレクトリを作成しました)

wget http://ec2-downloads.s3.amazonaws.com/cloudwatch-samples/CloudWatchMonitoringScripts-v1.1.0.zip
unzip CloudWatchMonitoringScripts-v1.1.0.zip
cd aws-scripts-mon
cp awscreds.template awscreds

awscredsにAWSのアクセスキーとシークレットキーを入れる

vim awscreds

テストで叩いてみる(AWSには送信データが行かないようにverifyを付けています)

./mon-put-instance-data.pl --disk-space-util --disk-path=/ --verify --verbose --aws-credential-file=/tmp/cloudwatch/aws-scripts-mon/awscreds

これが返ってきたら成功

Verification completed successfully.

成功したら実際に叩いてみましょう

./mon-put-instance-data.pl --disk-space-util --disk-path=/ --aws-credential-file=/tmp/cloudwatch/aws-scripts-mon/awscreds

以下が返ってきたら成功

Successfully reported metrics to CloudWatch. Reference Id: ********-****-****-****-************

実際に叩いて成功したらcronに以下を設定

*/5 * * * * /tmp/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --disk-space-util --disk-path=/ --from-cron --aws-credential-file=/tmp/cloudwatch/aws-scripts-mon/awscreds

AWS画面に行きます

ManagementConsoleにCloudWatchタブが出来ているので、クリックし設定していきます。

以上!

これで
ディスク容量が80%を超えたらアラートメールが来る。
という設定ができるようになります。

参考URL
http://hack.aipo.com/archives/406/
http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html
http://moomindani.wordpress.com/2014/04/07/amazon-cloudwatch-monitoring-scripts-for-linux/
http://konboi.hatenablog.com/entry/2013/12/25/215500
cloudwatchの設定方法
http://d.hatena.ne.jp/j3tm0t0/20110128/1296214789