mon-get-statsで請求額を取得
CloudWatchのAPIを使えば、AWSからの請求額を取得出来ますYOという話。
全体の請求額だけではなく、EC2、RDSなど各サービス毎の請求額も取得
可能です。
初期セットアップ
・Billing alarm を設定
この設定をしてからAWS側で請求額モニタリング開始&設定金額を超えると、
メールでお知らせしてくれます。
あと、請求額グラフを見たい&アラーム設定を変更したい場合は、N.Virginia
(us-east-1)を選択して下さい。
個別のリージョンの請求額という概念ではなく、全リージョンの請求額をN.Virginia
が一括管理しているといった概念みたいです。
http://aws.amazon.com/jp/billing/faqs/#Can_I_view_estimated_charge_metrics_or_set_billing_alerts_in_a_region_other_than_US-East
・CloudWatch APIをインストール (AmazonLinuxなら初期でインストール済みかも)
・環境変数を設定 (過去記事を参照)
・リージョンは us-east-1 しか対応していないので、EC2_REGIONのみ
上書きで設定。
export EC2_REGION=us-east-1
請求額を取得
・mon-get 実行
$ mon-get-stats EstimatedCharges --statistics "Maximum" \ --namespace "AWS/Billing" --dimensions "Currency=USD" \ --start-time `date --iso-8601=seconds --date '6 hour ago 1 minutes ago'` \ --end-time `date --iso-8601=seconds --date '1 minutes ago'` 2013-04-03 14:31:00 88.01 None
この例の場合、全体の請求額は、$88.01 です。
--start-time、--end-time が解り辛いと思いますので、ちょろっと解説しますと、
6時間前から直近1分前までの請求額のMAXを取得しています。
時間の幅が6時間なのは、CloudWatch側の請求額の更新が6時間置き(恐らく)だから
です。
# CloudWatch alarmのグラフが6時間置きにしか更新されていない。
--dimensions "ServiceName=AmazonEC2,Currency=USD" にすれば、EC2のみの請求額を取得できます。
・deimensionsに指定できる値は以下で確認できます。
$ mon-list-metrics | grep EstimatedCharges | awk '{print $1,$3}' EstimatedCharges {ServiceName=AmazonEC2,Currency=USD} EstimatedCharges {ServiceName=AmazonRoute53,Currency=USD} EstimatedCharges {ServiceName=AmazonRDS,Currency=USD} EstimatedCharges {ServiceName=AWSDataTransfer,Currency=USD} EstimatedCharges {ServiceName=AmazonSNS,Currency=USD} EstimatedCharges {ServiceName=AmazonS3,Currency=USD} EstimatedCharges {Currency=USD}
・start-time を変えて実験
・4時間前は取得できる。 $ mon-get-stats EstimatedCharges --statistics "Maximum" \ --namespace "AWS/Billing" --dimensions "Currency=USD" \ --start-time `date --iso-8601=seconds --date '4 hour ago 1 minutes ago'` \ --end-time `date --iso-8601=seconds --date '1 minutes ago'` 2013-04-03 14:31:00 222.04 None $ ・3時間前は取得できない。(何も表示されない) $ mon-get-stats EstimatedCharges --statistics "Maximum" \ --namespace "AWS/Billing" --dimensions "Currency=USD" \ --start-time `date --iso-8601=seconds --date '3 hour ago 1 minutes ago'` \ --end-time `date --iso-8601=seconds --date '1 minutes ago'` $ ・12時間以上前を指定してみる。 $ mon-get-stats EstimatedCharges --statistics "Maximum" \ --namespace "AWS/Billing" --dimensions "Currency=USD" \ --start-time `date --iso-8601=seconds --date '12 hour ago 1 minutes ago'` \ --end-time `date --iso-8601=seconds --date '1 minutes ago'` 2013-04-03 06:39:00 20.2 None 2013-04-03 10:31:00 88.01 None 2013-04-03 14:31:00 88.01 None $ $ mon-get-stats EstimatedCharges --statistics "Maximum" \ --namespace "AWS/Billing" --dimensions "Currency=USD" \ --start-time `date --iso-8601=seconds --date '16 hour ago 1 minutes ago'` \ --end-time `date --iso-8601=seconds --date '1 minutes ago'` 2013-04-03 06:39:00 20.2 None 2013-04-03 10:31:00 88.01 None 2013-04-03 14:31:00 88.01 None $ $ mon-get-stats EstimatedCharges --statistics "Maximum" \ --namespace "AWS/Billing" --dimensions "Currency=USD" \ --start-time `date --iso-8601=seconds --date '20 hour ago 1 minutes ago'` \ --end-time `date --iso-8601=seconds --date '1 minutes ago'` 2013-04-03 06:39:00 20.2 None 2013-04-03 10:31:00 88.01 None 2013-04-03 14:31:00 88.01 None $ $ mon-get-stats EstimatedCharges --statistics "Maximum" \ --namespace "AWS/Billing" --dimensions "Currency=USD" \ --start-time `date --iso-8601=seconds --date '24 hour ago 1 minutes ago'` \ --end-time `date --iso-8601=seconds --date '1 minutes ago'` 2013-04-03 06:39:00 20.2 None 2013-04-03 10:31:00 88.01 None 2013-04-03 14:31:00 88.01 None $ $ mon-get-stats EstimatedCharges --statistics "Maximum" \ --namespace "AWS/Billing" --dimensions "Currency=USD" \ --start-time `date --iso-8601=seconds --date '28 hour ago 1 minutes ago'` \ --end-time `date --iso-8601=seconds --date '1 minutes ago'` mon-get-stats: Malformed input-You have requested up to 1,680 datapoints, which exceeds the limit of 1,440. You may reduce the datapoints requested by increasing Period, or decreasing the time range. Usage: mon-get-stats MetricName --namespace value --statistics value[,value...] [--dimensions "key1=value1,key2=value2..." ] [--end-time value ] [--period value ] [--start-time value ] [--unit value ] [General Options] For more information and a full list of options, run "mon-get-stats --help" $
date --iso-8601=seconds --date '28 hour ago 1 minutes ago' (28h前)にしたら、
エラーになりました。
うーん、ある程度の時間幅が決まってそうな感じ!?
というか、CloudWatch alarmのグラフが6時間置きにしか更新されていないのに、
4時間置きに請求額が取得できています。(謎)
仕様がいまいち解りませんw
・2013/04/04追記
munin と連携させて、請求額をグラフ化しているのですが、4時間置きにグラフが
あがっているので、APIが返す値は4時間で更新されている説が濃厚です。
・muninグラフ (4-6時間置きに増えている。この更新間隔のブレは謎です)
・CloudWatch の Billingのグラフを見る限り、4時間毎に更新されているようです。00:30、04:30とxx:30毎に更新されてます。
muninのグラフが4,6hづつ増加しているのは、cron設定が悪いのか。
1時間置きに実行しているんだけどなぁ。