タグ: CloudWatch

AWSの従量課金が心配な方のためにCloudWatchで課金を監視する方法

AWS課金

AWS課金こんにちは、建山です。

今回ご紹介するのは、Amazonが提供するWebサービスであるAmazonWebService(通称AWS)を使用して、AWSのCloudWatchを使った課金状況を監視する方法をご紹介します。

対象者

・AWSのサーバを運用している方

・AWSの課金状況が気になる方

・CloudWatchを使ってみたい方

前提条件

・AWSマネジメントコンソールにてCloudWatchに対しての操作が出来る事。

今回の使用環境

・クライアントOS:WindowsXP

・ブラウザ:GoogleChrome

概要図

cloudwatchで課金を監視

説明

AWSのCloudwatchを使用して、現在の課金状況を監視します。ある特定の金額を超えるとアラームメールを飛ばすようにして、知らない間に金額が増える事を防止できます。

手順

■AWSホームページにアクセスする。

■「アカウントアクティビティ」を開く

右上の「アカウント/コンソール」から「アカウントアクティビティ」を開きます。

■「Enable Now」をクリックして、課金状況の監視を有効にする

有効になりましたので×をクリックして閉じます。

これで監視が行える状態になりました。実際のデータの取得には15分かかるようです。次に金額を設定してアラームメールを飛ばすようにします。

■「Set your first billing ararm」をクリックしてアラームの設定をする

■「Create Alram」をクリックします。

※今からアラーム設定を行っていきますが、右上に注目します。「N.Virginia」(ニューバージニア)となっています。2013年1月現在ですと、課金状況のアラームを使用するとリージョンが「N.Virginia」となるようです。しかし、「N.Virginia」でもTokyoリージョンなどの他のリージョンのEC2などの課金状況は見れますので、このまま進めます。

■アラームの詳細を設定する

入力欄を記入します。下では、50ドル(約4600円)を超えたらアラームメールを飛ばすように設定します。

入力したら「Create Alarm」をクリックします。

アラームが設定されましたのでCloseをクリックします。

■設定完了

これで課金状況を監視してメールが送られるようになりました。

まとめ

今回の課金状況の監視を導入することで、AWSの従量課金が不安な方にとっては、少し手助けになってくれるのはないかと思います。もし、導入される際は、テストを十分にして自己責任でお願いいたします。

なお、今回の記事を書くにあたって下記のブログを参考にさせていただきました。

■ブログ

Estimated Charge with CloudWatchを試してみました

[AWS]CloudWatchを使ってEC2を監視する方法

CloudWatchを使ってEC2を監視

こんにちは、建山です。

今回ご紹介するのは、Amazonが提供するWebサービスであるAmazonWebService(通称AWS)を使用して、AWSのCloudWatchを使ったEC2を監視する方法をご紹介します。

対象者

・AWSのサーバを運用している方

・AWSでサーバを自動監視したい方

・CloudWatchを使ってみたい方

前提条件

・AWSにEC2インスタンスを立ち上げている事。

・EC2インスタンスにターミナルでログインできる環境がある事。(LINUXの基礎知識がある事)

・AWSマネジメントコンソールにてCloudWatchに対しての操作が出来る事。

今回の使用環境

・クライアントOS:WindowsXP

・SSHクライアントソフト:Putty

・サーバOS:AmazonLinux32bit

・ブラウザ:GoogleChrome

概要図

CloudWatchを使用してサーバ監視

説明

今回の構成としては、EC2インスタンス内から5分おきにメモリ使用率などをAWSのCloudWatchに情報を送信します。情報を受け取ったCloudWatchは、受け取った情報をもとに、ある条件を超えたらアラームメールを登録者に送信します。

通常は、EC2インスタンス内から情報を送信しなくても、CloudWatchでの監視はできます。しかし、監視できる項目は「CPU使用率」など限られたものなので、自分で情報を送信してあげなくてはいけません。
※CloudWatchで監視する項目をメトリクスといい、自分で作成した監視項目をカスタムメトリクスというようです。

手順

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

まず、CloudWatchに情報を送信するためには、CloudWatchコマンドラインツールをダウンロードします。

ここからの作業はEC2にSSHクライアントでログインして行ってください。今回はPuttyを使用します。

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

■CloudWatchの証明書情報を自分のに書き換える

ダウンロードした圧縮ファイルを解凍します。

unzip CloudWatch-2010-08-01.zip

②証明書情報のテンプレートファイルをコピーする

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

③証明書情報を書き換える
証明書情報を記述するファイルを開く

vi credentials

証明書情報を自分のものに書き換える。書き換えたら保存します。

AWSAccessKeyId=ABcdefgsdfwsgwegw(自分のもの)
AWSSecretKey=ABC98ysdgveszgehsgjirejgirejgojiroj(自分のもの)

(“ACCESS KEY”、”SECRET KEY”は、AWSのホーム画面のセキュリティ証明書から確認できます。)

AWSホーム

■CloudWatchコマンドラインツールを配置

先ほど作業したCloudWatchコマンドラインツールのフォルダを指定の位置に配置します。今回は「/opt/aws/CloudWatch」として配置します。
先ほど作業した「CloudWatch-1.0.13.4」フォルダを「CloudWatch」に名前を変えて
「/opt/aws/CloudWatch」として配置します。

■CloudWatch送信シェルを作成
custom_metrics_report.shという名前でCloudWatchに情報を送信するシェルを作成します。custom_metrics_report.shの部分は自由にお名前をお付け下さい。
・シェルの仕様
CloudWatchに特定のインスタンスのサーバ情報を送信する。送信する情報は「mysqlとapacheが起動しているか(1=起動/0=停止)」「空きメモリ(MB)」「使用メモリ(%)」「ディスク使用量(%)」

viエディタでシェルを作成し、保存する。

vi custom_metrics_report.sh

シェルの内容は下記の通り。シェル内の「InstanceId」は自分のEC2のインスタンスIDに書き換えてください。

#!/bin/bash

export AWS_CLOUDWATCH_HOME=/opt/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=i-667bb86a(自分のに書き換える)

#mysql and apache
mysqlcnt=`ps cax | grep mysqld | wc -l`
apachecnt=`ps cax | grep httpd | wc -l`

let "allcnt=mysqlcnt*apachecnt"

if [ "$allcnt" -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=/tmp/disk_usage.txt

if [ $# -ne 1 ]; then
 echo "usage : custom_metrics_report.sh /tmp/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 and Mysqld Processes" --namespace "System/Linux" --dimensions "InstanceId=$InstanceId" --value "$Processes" --unit "Count" --region ap-northeast-1

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

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

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

■定期処理に登録する。

スクリプトを実行するのを定期処理で5分ごとに実行します。定期処理にはLinuxのcron機能を使用します。

crontab –e
*/5 * * * * /opt/aws/CloudWatch/custom_metrics_report.sh /tmp/disk_describe.txt

■CloudWatchに送信された情報を確認する

CloudWatchに送信された情報を確認します。まず、AWSマネージメントコンソールからCloudWatchを開きます。

「Metrics」をクリックします。

「System/Linux」をクリックします。「System/Linux」の名前はEC2に配置したシェル内で自由に書き換えることが出来ます。

「FreeMemoryMByts」(空きメモリ)をクリックすると、送信されてきた情報のグラフが確認できます。

■アラームを設定する

アラームを設定して特定の条件になったら登録者へメールを送信するようにします。

「Alarms」をクリックします。

「CreateAlarm」をクリックします。

「System/Linux」をクリックします。「System/Linux」の名前はEC2に配置したシェル内で自由に書き換えることが出来ます。

画面が表示されたらEC2から送信された情報(メトリクス)が表示されます。今回は空きメモリーである「FreeMemoryMByts」をクリックします。

「Statistics」「Period」を設定します。今回は空きメモリーの平均を5分間隔で監視するので、Average(平均)と「5Minutes」を選択します。

「Continue」をクリックします。

アラーム名と説明を入力し、アラームメールを送る条件を設定します。

今回は、空きメモリが100MB以下の状態が5分続いたらメールを送るようするとします。

したがって、「~FreeMemoryMByts <= 100 for 5 minutes」となるように入力して「Continue」をクリックします。

アラームのアクションを選択します。今回はメールを送信しますので、「Send Notification」を選択します。

「Create New Email Topic」をクリックします。

「Topic」に任意の名前を入力し、「Email(s)」にアラーム送信先メールアドレスを入力し、「ADD ACTION」をクリックします。

アラームが追加されましたので、「Continue」をクリックします。

内容を確認し「Create Alarm」をクリックします。

アラームが作成されました。「Close」をクリックします。

アラームが一覧に追加されます。

まとめ

今回のサーバー監視を導入することで、EC2インスタンスのサーバの負荷状況やプロセスの状況をみて、ある一定の状況になったらメールを飛ばしてくれるので、なにかあってもすばやく対応ができます。プロセスの間隔や監視項目はご自身の状況に合わせて、EC2に置いたスクリプトの内容を書き換えたり、AWSコンソールの監視間隔を変えたりしてください。もし、導入される際は、テストを十分にして自己責任でお願いいたします。

なお、今回の記事を書くにあたって下記のブログを参考にさせていただきました。

CloudWatchのカスタムメトリクス使ってみた

CloudWatchのカスタムメトリクスでDiskUsageを取得

CloudWatchのCustom Metricsを使ってみた(二番煎じ)

CloudWatchのカスタムメトリクスでFreeMemoryMBytes、UsedMemoryPercent、LoadAverage、Stealを取得

[20130304]追加情報

シェルの中でapacheのプロセスを調べるときにmysqldとなっていましたのでhttpdに変更しました。