LoginSignup
34
33

More than 5 years have passed since last update.

CloudWatch でディスク容量の監視

Posted at

CloudWatch には標準では EC2 インスタンスのディスク容量チェック用のmetricsが存在しませんが、EC2 からディスク容量情報を CloudWatch に通知する事により CloudWatch で監視する事が可能です。

EC2 から CloudWatch へのディスク容量情報の通知は、Amazon Linux では標準で搭載されている aws コマンドを利用します。

当初は Java により記述された /opt/aws/bin/mon-put-data コマンドを利用していましたが、 aws コマンドであれば IAM role にも対応しているので aws コマンドを利用しています。

IAM role の対象ではない EC2 インスタンスで aws コマンドを利用する場合はアクセスキーやシークレットキーを保存するために

$ aws configure

を実行してアクセスキーやシークレットキーを保存する必要がありますが、 IAM role の対象となっている EC2 インスタンスではそれらの設定は不要です。

$ aws configure

を実行してデフォルトのリージョンと出力フォーマットを指定する事もできますが、どちらもコマンドラインから指定可能ですので、今回はコマンドラインから指定します。

以下のコマンドを実行する事で CloudWatch の System/Linux というネームスペースにディスク容量を通知できます。
CloudWatch では System/Linux から FreeSpaceMBytes もしくは UsedSpacePercent という Metrics を指定する事で監視ができます。

sh
#!/bin/sh

# ディスク容量を取得するパス
path=${1:-/}

# EC2 のインスタンス ID を取得
instanceid=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`

# コマンド定義
region="--region ap-northeast-1"
namespace="--namespace System/Linux"
dimensions="--dimensions InstanceId=${instanceid},Path=${path}"
aws="/usr/bin/aws cloudwatch put-metric-data ${region} ${namespace} ${dimensions}"

# ディスク容量を MB 単位で取得
${aws} ${monput} --unit Megabytes --metric-name "FreeSpaceMBytes"  --value `df --block-size=1M ${path} |
    awk '$NF == "'${path}'" { print $(NF-2) }'`
# ディスク容量を % 単位で取得
${aws} ${monput} --unit Percent --metric-name "UsedSpacePercent" --value `df --block-size=1M ${path} |
    awk '$NF == "'${path}'" { print substr($(NF-1), 1, length($(NF-1)-1)) }'`

cron に登録する等で定期的にディスク容量を取得して CloudWatch に通知すると良いでしょう。

34
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
33