Amazon Web Services の課金情報は、新しい Billing Alert 機能を使うことで、おおよその見積もりが出来るようになった模様。一通り有効にする方法、CloudWatchでメール通知する設定、そして、CLIを使ってコマンドラインでデータを取得するまでの流れをまとめました。
◆ Billing Alerts
AWS Blog にて、新たに “Billing Alerts”(請求通知)なる機能が搭載された事を知る。何でも、おおよその利用料金を見積もりしてくれるようだ。しかも料金の閾値を設定し、越えた場合にメールで通知することも出来るとのこと。ほほう。
【AWS発表】 AWSクラウドの利用料金を監視・通知できるように – Amazon Web Services ブログ
http://aws.typepad.com/aws_japan/2012/05/monitor-estimated-charges-using-billing-alerts.html
◆ Billing Alerts を有効にしてみる
有効にするには Account Activity にアクセス。「どこに Billing Alertsがあるんだろ?」と思って画面を見渡すと…【 Enable Now 】のリンクを発見。
早速クリックをするものの、何だかダイアログが表示されてしまう。
どうやら、”秘密の質問”的なものを設定しないと、見積もりが出来ない模様。引き続き、【 Update this information now 】をクリック。
すると、AWS アカウントの個人情報ページが表示される。そのページの一番下のほうに、なにやら該当する項目を発見。”Configure Security Challenge Questions” の項目を3つ埋めて、更新する必要があるようだ。
“Question”で質問項目を選び、”Answer”に答えを記入。3つ分、しっかり埋めます。そして【変更を保存】。
クリックすると、”アカウントアクティビティ”の画面に戻ります。ここで再び【 Enable Now 】をクリックすると、有効になったと画面に表示される。
あとは、15分くらい待てば料金の見積もりが終わり、アラートが使える模様。
ちょっと一息、コーヒータイム( ´∀`)
席に戻ると、先ほどのアカウントアクティビティの画面に、課金見積もりの監視が有効になっっとメッセージが表示されてる。早速 Billiing Alerts を有効にすべく、【 Set your first billing alarm 】(はじめてのアラームを有効にする)をクリック。
◆アラームの作成
次は、”Alarm details for AWS billing estimated charges” が表示される。ここでは、【 Create Alarm 】をクリック
長々と説明が出ているが、要は Free Tier が適用されるので、アラーム10個と、メール1,000通までは無償ですよという内容。
ここでアラームを作成することも可能だが、一旦「Close」をクリックして保留しても構わない。保留した場合は、Management Console 上の “CloudWatch” から、Metrics →”Billing” をクリックすることで、現状の確認やアラートの追加が可能になる。
ちなみに、Metrics のリージョンは”US East (N. Virginia)” ですが、ここでは全リージョン分が表示されています。今のところ、各リージョン毎のデータは出せないみたいなので、注意(FAQ参照)。
さて、特定の閾値を超えたら、メールを送りたい。もう一度アラートの設定に戻る。
アラームを作成するには、”CloudWatch” -> “Alarms” -> “Billing Alarms”をクリックする。
先ほどの画面と同じように、ダイアログが表示されるので、ここでは【 Create Alarms 】をクリックする。
画面をクリックすると、詳細入力のダイアログが出てくる。アラートを出すには、合計費用のほか、EC2やRDS毎やデータ転送量(Data Transfer)など、サービス毎・紐づけられているアカウント毎に設定することが出来る。
とりあえず、ここではトータル $15 にし、【 Create Alarm 】をクリックする。
正常に処理されると、上図のように表示される。
また、”With thease recipients”で指定したメールアドレスには、次のような確認メールが届く。本文をクリックしておくこと。
◆ CLI を使って見積もり金額データを取得する
見積額のデータを参照するためには、CloudWatch 用の CLI を使う事が出来る。なお、この CLI を使うためには、Java 1.5 以上の環境が必要。
Amazon CloudWatch Command Line Tool : Developer Tools : Amazon Web Services
http://aws.amazon.com/developertools/2534
これをダウンロード・展開。
$ wget http://ec2-downloads.s3.amazonaws.com/CloudWatch-2010-08-01.zip $ unzip CloudWatch-2010-08-01.zip $ cd CloudWatch-1.0.12.1/
次は、環境変数を指定する。 JAVA_HOME と AWS_CLOUDWATH_HOME 等々で、それぞれのパスを明示(各々の環境にあわせること)
$ export JAVA_HOME=/usr/local/jdk1.6.0 $ export AWS_CLOUDWATCH_HOME=/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1 $ export PATH=$PATH:/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1/bin $ export EC2_REGION=us-east-1
そして、AWS キーの指定(X.509 Certsを使う方法もある)。環境変数 AWS_CREDENTIAL_FILE の指定も忘れずに。
$ cp ./credential-file-path.template ./credential $ chmod 600 ./credential $ export AWS_CREDENTIAL_FILE=このcredentialファイルのパス $ vi credential
AWSAccessKeyIdと、AWSSecretKeyを指定。ファイルの取り扱いには要注意。
※詳細は、付属の “README.TXT” を参照のこと。
コマンドの実行テスト。エラーが無ければ問題無し。
$ mon-cmd --help Command Name Description ------------ ----------- help mon-delete-alarms Delete alarms (snip) version Prints the version of the CLI tool and the API. For help on a specific command, type '<commandname> --help'
次はbillingに関するmetricsを取得する。
$ mon-describe-alarms --headers ALARM STATE ALARM_ACTIONS NAMESPACE METRIC_NAME PERIOD STATISTIC EVAL_PERIODS COMPARISON THRESHOLD awsbilling-AWS-Service-Charges-total OK arn:aws:sns:us-eas...1177877630:NotifyMe AWS/Billing EstimatedCharges 21600 Maximum 1 GreaterThanThreshold 15.0
このように、先ほど設定したアラームの情報が表示される。
捕捉:CloudWatchのCLIについては、@mikeda さんの blog 記事が参考になります。
実際にデータを取得するには、mon-get-stats コマンドを使う。
$ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "Currency=USD" 2012-05-19 07:31:00 13.88 None
これは、コマンドを実行した時点で、全ての合計推定金額が $13.88。EC2や、RDS等のデータを取得したい場合は、dimensions のオプションを変更する。利用可能なdimensionsを調べるには、mon-list-metrics コマンドで取得可能。
$ mon-list-metrics | grep Billing EstimatedCharges AWS/Billing {ServiceName=AmazonEC2,Currency=USD} EstimatedCharges AWS/Billing {ServiceName=AmazonRDS,Currency=USD} EstimatedCharges AWS/Billing {LinkedAccount=xxxxx,Currency=USD} EstimatedCharges AWS/Billing {ServiceName=AmazonS3,LinkedAccount=xxxxx,Currency=USD} (snip) EstimatedCharges AWS/Billing {ServiceName=AmazonRoute53,Currency=USD} EstimatedCharges AWS/Billing {ServiceName=AWSDataTransfer,Currency=USD} EstimatedCharges AWS/Billing {ServiceName=AmazonSimpleDB,Currency=USD}LinkedAccc
※”LiinkedAccount”は、アカウント毎にmetricsを取得可能。
EC2等、個別のリソース毎のデータを取得するには、次のようにコマンドを実行する。
mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonEC2,Currency=USD" mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonRDS,Currency=USD" mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonS3,Currency=USD" mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonRoute53,Currency=USD" mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonSimpleDB,Currency=USD" mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonSNS,Currency=USD" mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AWSDataTransfer,Currency=USD"
以上、実際にコマンドを実行すると、それぞれのサービス毎に料金がわかる。
$ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonEC2,Currency=USD" 2012-05-19 07:31:00 13.33 None $ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonRDS,Currency=USD" 2012-05-19 07:31:00 0.0 None $ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonS3,Currency=USD" 2012-05-19 07:31:00 0.03 None $ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonRoute53,Currency=USD" 2012-05-19 07:31:00 0.51 None $ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonSimpleDB,Currency=USD" 2012-05-19 07:31:00 0.0 None $ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonSNS,Currency=USD" 2012-05-19 07:31:00 0.0 None $ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AWSDataTransfer,Currency=USD" 2012-05-19 07:31:00 0.01 None
ここまで出来れば、Munin に取り込むだけ。
ところで、Munin を何故使うのか?CloudWatch はデータの保管期間が2週間であり、過去に遡って確認することができない。そこで、普段からサーバのリソースを監視している Munin でもって、確認や通知をできるようにする。
まず、事前検証。Munin のプラグインを作る前に、スクリプトレベルで EstimatedCharges が取得可能か確認する。スクリプトは次の通り。
#!/bin/sh export AWS_CLOUDWATCH_HOME=/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1 export PATH=$PATH:/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1/bin export EC2_REGION=us-east-1 export JAVA_HOME=/usr/local/jdk1.6/ export AWS_CREDENTIAL_FILE=/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1/credential echo -n "EstimatedCharges.value " /home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1/bin/mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "Currency=USD" | cut -f4 -d' '
実行結果がこちら。
$ sh check.sh EstimatedCharges.value 13.88
あとは、プラグインを書けば、グラフ化出来るはず。今日はここまで。
続きはこちら。
AWS利用料金グラフ化Muninプラグインを書いてみた( ^ω^) | Pocketstudio.jp log3
http://pocketstudio.jp/log3/2012/05/21/aws-estimated-charge-munin-plugin/
◆ 参考:
Billing Alerts
https://aws-portal.amazon.com/gp/aws/developer/account?ie=UTF8&action=billing-alerts
Monitor Your Estimated Charges Using Amazon CloudWatch – Amazon CloudWatch
http://docs.amazonwebservices.com/AmazonCloudWatch/latest/DeveloperGuide/monitor_estimated_charges_with_cloudwatch.html
mon-get-stats Command – Amazon CloudWatch
http://docs.amazonwebservices.com/AmazonCloudWatch/latest/DeveloperGuide/cli-mon-get-stats.html
これは是非やりたいのですが、今もUS East (N. Virginia)のみで、東京リージョンが対応するのを待っています。※おそらくそのうち対応するはずですよね……
TotalはEC2-Tokyoの料金も含まれているようですので、Totalは使えますね。
※以下、こちらの環境だけかもです
mon-get-stats の結果が–start-timeを指定しないと(12時間前くらい)結果が返ってこないということがありました。なんだろう。
/etc/localtimeを無くしたりしても変わらず
今まで書いて引っかかってきたところはmuninプラグインでは吸収してあってグラフ化成功しました。失礼しました。
ヒライさん、返信に気がつくの画遅くなってしまいました、すみません。成功されたようで安心しました。
Pingback: サーバ監視ツール「munin」の使い方 | 各路