AWSの利用実績をグラフで可視化!NetFlixのIceをインストールしてみた
AWSの利用実績、ちゃんとみてますか?
アカウントアクティビティとか利用レポートDLとか、あるにはありますが、とにかく数字だらけで分かりにくかったり、
さらに一括決済(Consolidated Billing)なんてしているとアカウントの数だけ行が増えてますます困難。そう思いませんか?
実際私もそう思っていたところに、大規模AWSユーザーとして有名なNetFlixがICEという利用実績のモニタリングツールを公開したというニュースを見つけたので、早速インストールしてみました。
基本的にはiceのreadmeで分かると思いますが、若干はまったところを中心に私のログをご紹介します。
用意するもの
手順
設定
Programmatic Billing Accessを設定
ICEの元データはAWSのProgrammatic Billing AccessでS3に吐き出されるファイルになります。なのでここで、
- Programmatic Access
- Detailed Billing Report
- Detailed Billing Report (with resources and tags)
をenableにします。まあこのページの全部の設定をEnableにすればOK!
ICEのインストール
まず、EC2インスタンス上にICEを落としてきます。
$ git clone https://github.com/Netflix/ice
iceってディレクトリがカレントに出来ているので、その中に入って
$ grails wrapper
を叩く。yumでちゃんと入れてて、GRAILS_HOMEとかちゃんと設定してあれば正常に完了すると思います。
そして、ice.propertiesをつくります。
$GRAILS_HOME/src/javaにsample.propertiesファイルがあるのでそれをice.propertiesとしてコピーして、ice.propertiesを編集。最低限必要なのは以下の項目
#Programmatic Accessで書き出し先に指定したS3のbucket名。以下はmybillingというbucket名にした場合 ice.billing_s3bucketname=mybilling ice.billing_s3bucketprefix=
Iceのreadmeにはprefixをつける例になっているけど、Programmatic AccessにPrefixをつけラル設定はなかった気がするので、該当bucket直下に作られるBiling Reportを見に行けるようにPrefixは空欄にしておく(私はこれに気づかず相当ハマりました)
#iceがs3からとってきたファイルやワークファイルを保存するローカルディレクトリ。読み書きできればどこでもいい ice.processor.localDir=/mnt/ice_processor ice.reader.localDir=/mnt/ice_reader
#iceがBillingReportを加工した結果を保存するS3のbucketの指定。以下はiceworkというbucketに書き込む場合 ice.work_s3bucketname=icework ice.work_s3bucketprefix=
iceのwork用に専用のbucketを作っておいた方が管理が楽。だとするとprefixをつける意味はないので、prefixを空欄にしておく方がハマらない(私はハマりました)。
#S3へのアクセス情報。用意したIAMのを使う ice.s3AccessKeyId=ice.s3SecretKey=
#とりあえずProgrammatic Accessを設定したアカウントIDを入れ、account2以降はコメントアウトで。 ice.account.account1=123456789011
#インスタンスがもったいないのでprocessorとreaderは同居で ice.reader=true
ここまで出来たら保存して、
$ ./grailsw -Dice.s3AccessKeyId=-Dice.s3SecretKey= run-app
を叩くと、必要なファイルをDLしたりしたあと、アプリが起動する。成功すればhttp://localhost:8080/iceを叩いてね的なログが表示される。
起動に成功したら、Webブラウザでhttp://(ec2インスタンスのPublicDNS名):8080/ice/dashboard/summaryにアクセス。グラフが出れば成功
自動起動させる
アプリの実行は
$ ./grailsw -Dice.s3AccessKeyId=-Dice.s3SecretKey= run-app
なので、あとはインスタンス起動時に自動起動する設定にしておけば便利。
/etc/init.d/にiceって名前で、以下の内容を記述したファイルを作る
#!/bin/sh # chkconfig: 2345 99 10 # description: Netflix Ice start . /etc/init.d/functions #envコマンドで表示される$JAVA_HOMEと同じパスを記述 export JAVA_HOME=/usr/lib/jvm/java #iceのディレクトリでgrailswを起動。 cd /var/www/ice ; ./grailsw -Dice.s3AccessKeyId=-Dice.s3SecretKey= run-app > /var/log/ice.log exit 0;
このファイルにchmodで実行権限をつけ、checonfigに登録
$ sudo chkconfig --add ice $ sudo chkconfig ice on
起動したあとの話はまた今度。