2012年10月18日

【AWS】CloudWatchでディスク容量監視


AWSにサーバ監視ツールのCloudWatchが追加されて随分経ちますが、
DiskReadやDiskWriteの監視はあっても、
DiskUsageや、FreeSpaceがありません。
EBSに付随するのか、EC2に付随するのかも良く分からない為、
とりあえず英語で検索して出てきた結果を使ってCloudWatchによる監視を追加しました。



CloudWatchコマンドラインツールのDL

まずはCloudWatchコマンドラインツールをダウンロードし、展開します。
最新版はhttp://aws.amazon.com/developertools/2534にあります。
cd /usr/local/src/
wget http://ec2-downloads.s3.amazonaws.com/CloudWatch-2010-08-01.zip
unzip CloudWatch-2010-08-01.zip

アクセスキーの設定

EC2からCloudWatchにアクセスする為にアクセスキーを設定します。
cd /usr/local/src/CloudWatch-1.0.13.4/
cp credential-file-path.template credentials
vi credentials
# 中身はこんな感じで設定
AWSAccessKeyId=<Write your AWS access ID>
AWSSecretKey=<Write your AWS secret key>
AWS access IDと、AWS secret keyは、AWS管理画面のセキュリティ証明書のメニューから取得して下さい。

Shell Scriptの作成

下のスクリプトをコピーして使って下さい。

#!/bin/bash

export AWS_CLOUDWATCH_HOME=/usr/local/src/CloudWatch-1.0.13.4
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

path='/'
region='ap-northeast-1'

if [ -n "$1" ]; then
    path=$1
fi

# get EC2 instance ID
instanceid=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`

freespace=`df --local --block-size=1M $path | grep $path | tr -s ' ' | cut -d ' ' -f 4`
usedpercent=`df --local $path | grep $path | tr -s ' ' | cut -d ' ' -f 5 | grep -o "[0-9]*"`

mon-put-data --metric-name "FreeSpaceMBytes" --namespace "System/Linux" --dimensions "InstanceId=$instanceid,Path=$path" --value "$freespace" --unit "Megabytes" --region "$region"
mon-put-data --metric-name "UsedSpacePercent" --namespace "System/Linux" --dimensions "InstanceId=$instanceid,Path=$path" --value "$usedpercent" --unit "Percent" --region "$region"

cronに登録する

5分おきにスクリプトが実行されるようにcronに登録しておきましょう。

# Monitoring Disk Space
*/5 * * * * path to mon-disk-space.sh

CloudWatchでの確認



CloudWatchの管理画面で確認後はこのようにリストに出てきます。