[Rails][CentOS]データ分析サービスTreasureDataを導入


TreasureDataとは

データの収集、保存、分析のためのワンストップクラウドデータサービスだそうです。
http://www.treasuredata.com/jp/

AWSとかだと自前でS3にfluentdでログ収集してElasticMapReduceやRedshift構築してやっと分析!ってなるのを
ログ収集の設定とGem入れるだけでログが収集されていつでもHiveクエリーで分析できるよ!っていう素敵なサービス。

しかもスタートアップのWebサービスとかだと割と無料範囲でいけるんじゃないかなぁ。
ログを収集する程度によるけど。

今回は

CentOSにRubyonRails(Ruby1.9.3p286, Rils3.2.13)環境で説明します。
バージョンによっての違いはあまり無いようです。

※まとめてる途中で気づいたんですが、TreasureDataのサイト上で全く別のやり方も書いてありました。今回は僕がやった方法を記載しますね。yumとか使ってたからそっちのほうが楽かも。

TreasureDataに登録

http://www.treasuredata.com/jp/products/try-it-now.php
このへんから登録してください。
無料版なら登録はメールアドレスとか入力するだけだからすぐですー。

CentOS側の設定

1.rpmをダウンロード

$ curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh

2.デーモンが起動するか確認

$ /etc/init.d/td-agent start 
Starting td-agent: [  OK  ]

いつもどおりこれらが対応してるみたい

$ /etc/init.d/td-agent start
$ /etc/init.d/td-agent stop
$ /etc/init.d/td-agent restart
$ /etc/init.d/td-agent status

3.設定ファイルの確認

$ sudo vi /etc/td-agent/td-agent.conf

apikey YOUR_API_KEYとなっているのでTreasureDataのサイト上で取得できる自分のAPIKeyを入力する

変更したら

$ sudo /etc/init.d/td-agent restart

を忘れずに。

4.データが入るかテストする

$ curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test

/var/log/td-agent/td-agent.logを確認して、{"json":"message"}っぽいログが出ていることを確認する。

Rails側の設定

1.Gemをインストールする

gem 'td', "~> 0.10.6"

2.confit/treasure_data.ymlの作成

treasure_data.yml
production:
  agent: "localhost:24224"
  tag: td.production_database_name
  debug_mode: false

development:
  agent: "localhost:24224"
  tag: td.development_database_name
  debug_mode: false

test:

tagのデータベースの名前は適宜変更する。
td.の後ろね。
これがTreasureData上でもデータベース名として表示されます。

3.コードを埋め込む

# Example1: login event
TD.event.post('login', {:uid=>123})

# Example2: follow event
TD.event.post('follow', {:uid=>123, :from=>'TD', :to=>'Heroku'})

# Example3: pay event
TD.event.post('pay',
              {:uid=>123, :item_name=>'Stone of Jordan',
               :category=>'ring', :price=>100, :count=>1})

※上記はTreasureDataのHP上でサンプルとして書かれているコードです。
こちらも適宜変更してください。

4.実行してログが取得できているか確認する

$ td tables

でテーブルを確認。

・・・とやると怒られた。
先にアカウント情報をセットしないといけないらしい

$ td account

でTreasureDataに登録したメールアドレスとパスワードを設定。

そしたら次にDBを作ってと言われたので作成

$ td db:create production_database_name

※production_database_nameはtreasure_data.ymlに設定したDBの名前にしてください

さらにテーブルも作成するようなので作成

$ td table:create production_database_name login
$ td table:create production_database_name follow
$ td table:create production_database_name pay

login, follow, payというのは
TD.event.post('login', {:uid=>123})
のイベント名のところ。
これがテーブルの名前になるみたい。

もろもろ設定完了したらまた実行したりして

$ td tables

とやってログが出力されているか確認できる

TreasureData上にもログが飛んできていることを確認

コンソールにログインして、Databasesのところから見れる。
さっき設定したDBやテーブルがあって、ログが出力されていればOK。

まとめ

この出力したログをHiveとかPigとかのクエリーを使ってデータ抽出できるみたい。
まだデータ溜めてる状態なのでこれから。
またわかったこととかあったらまとめます。