sidetech

インフラエンジニアの寄り道メモ。

System Answer G2でAWSのBilling情報を取得

くはーっ[E:bearing] ハマったハマった。
でも取りあえず原因もわかって何とかなった。1時間掛からないだろうと思ったのにほぼ1日ついやしてしまった[E:crying]

はい。えーと、AWSの話なのですが、AWSを利用していると、課金が気になるじゃないですか。AWSのコンソールから請求画面に行けば取りあえずは色々判りますが、いちいち見に行くのもカッタルイ。それに色々とサービスの利用が増えたり減ったりしている過程も良くわからない。パッと見て、止めておかなくちゃと思ったものも忘れてしまいますよね。

と、考えていた先人の方々が色々と情報を残してくれていたので、私もチャレンジしてみました。
とりあえずプロトタイプなので、これから細かい修正をしていきますが、先人の方々の資料は手段が色々あるもんで多岐にわたっており、Rubyだったりawslightだったりaws-sdkやら、あれこれと色々と使われています。監視ツールはZABBIXとMuninぐらいが参考例がありました。

で、私はPerlで書こうとしています。Rubyでやるやつも一応作りましたが、最後の最後でボツにしました[E:coldsweats01] そもそもRubyを書いたのも初めてだったんで色々とめんどくなった。

ただねぇ・・・おもったよりもちょっとモッサリしているんでどうしようかな。
やってて全然わからないのがPeriodという値。AWSの課金情報の更新がどうも4時間毎ぽいんですよねぇ・・・。SystemAnswerG2は取得インターバルの最大は15分です。せめて1時間毎に出来ればなぁなんて思ったんですが、そこは空廻しするしかないかな。

まだグラフを書き始めたばかりなのですが、取得出来たぞってことで…
 Awsbilling01


Awsbilling02
グラフの見え方が違う2種を出してみました。どっちがいいかは好み?

それと、この取得した値が正しいかを確認しときましょ。
Awsbilling03
大丈夫そうですね。使い物になりそうです。


で、実際の準備としては・・・「aws-cli」です。Pythonの流れなんじゃないかなってことで、awscliにしてみたんですが、おかげで苦労しました・・・[E:weep] jqをそのまま使った・・・というかインストールの手間を省いたのが敗因だった・・・。

てことで、AWSCLIをインストールです。監視エンジンサーバにインストールします。

#yum install python-pip
#python-pip awscli
#aws configure (AWS Access Key IDとAWS Secret Access Keyの設定のみ)

一部の書き方だけ(といいながらこれが中枢の全てでもあるw)。

###AWS-Billing-GET
my $start_time = strftime "%Y-%m-%dT%H:%M:%S", gmtime(time-(4*60*60));
my $end_time = strftime "%Y-%m-%dT%H:%M:%S", gmtime;

open (AWS, "aws cloudwatch --region us-east-1 get-metric-statistics --namespace \'AWS\/Billing\' --dimensions \"Name\=Currency\,Value\=USD\" --metric-name EstimatedCharges --start-time $start_time --end-time $end_time --period 900 --statistics \'Average\' |") || die "Value=$!";
while (<AWS>) {
/"Average": (.+),/ &&  ($awsget = $1);
};
close (AWS);
chomp($awsget);
print "value=".$awsget.";";
###
こんな感じで書きたくりました。

ポイントとしては・・・なるべく直近のデータを引っ張る様にしたかったので、AWSUTCだったかとおもうので、gmtimeでGMTUTC)にしています。で、スタート時間を現時間から4時間マイナスしています。1日でデータを引っ張ってみたのですが、4時間毎にしかデータを吐いていなかったので。もしかしたら、取得するパラメータによっては違うかもしれない。まだそこまで頑張れてない[E:coldsweats01]
periodは、何分間隔のグラフにするのかみたいなパラメータかと思うんだけど、そもそも4時間毎だから4時間を超えて見たいときに値を変更する必要があるのかな。まだ研究中でございます。ここはググってもみんなパラメータが違うのでちょっと困りました。

まぁこれはまだプロトタイプなんで、まだまだ改造していきますが、取り敢えず取得できたんでホッとしました。[E:confident]
これで見せたい方々に見せやすくなるっすよ[E:wink]