概要
td-logger-rubyからforwardしたJSONレコードをtd-agentで受け付け、TreasureDataへアップロードする。
方法についてはtreasuredataのドキュメントを参考にした。
環境構築
CentOS 6.6に以下をインストール
- ruby
- gem
- td-agent
インストール方法は下記の通り
## rubyインストール(今回は現在の最新バージョンを利用)
$ wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.gz
$ tar xvzf ruby-2.3.0.tar.gz
$ cd ruby-2.3.0
$ ./configure
$ make
$ make install
## gemインストール(今回は現在の最新バージョンを利用)
$ wget https://rubygems.org/rubygems/rubygems-2.5.1.tgz
$ tar xvzf rubygems-2.5.1.tgz
$ cd rubygems-2.5.1
$ ruby setup.rb
$ gem install td
## td-agentインストール
$ curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
td-agent.confの編集
/etc/td-agent/td-agent.confを編集する。
DBやテーブルの指定はforwardするクライアント側(td-logger)で設定する。
td-agentはforwardされたログを受け取りtreasuredataにアップロードするだけなので、td-agent使わなくてもアップロードは可能。ただし、td-agentではbufferの管理やリトライ処理等が実装されているため、td-agentを利用した方法が推奨されている。
td-agent.conf
# Input from Logging Libraries
<source>
type forward
port 24224
</source>
# Treasure Data Output
<match td.*.*>
type tdlog
endpoint api.treasuredata.com
apikey YOUR_API_KEY
auto_create_table
buffer_type file
buffer_path /var/log/td-agent/buffer/td
buffer_chunk_limit 16m
buffer_queue_limit 1000
use_ssl true
</match>
動作確認
以下のスクリプトを作成する。
(DB名、テーブル名は書き換える)
test.rb
# Initialize
require 'td'
TreasureData::Logger.open_agent('td.<DB名>', :host=>'localhost', :port=>24224)
# Example1: login event
TD.event.post('<table名>', {:uid=>123})
# Example2: follow event
TD.event.post('<table名>', {:uid=>123, :from=>'TD', :to=>'Heroku'})
# Example3: pay event
TD.event.post('<table名>',
{:uid=>123, :item_name=>'Stone of Jordan',
:category=>'ring', :price=>100, :count=>1})
test.rbを実行する。td-agentの待ち受けポートにJSON形式のログがforwardされる。
$ ruby test.rb
この時点でbufferファイルが出来上がるが、アップロード開始されるまで時間がかかるので
以下コマンドでbufferをflushする。
kill -USR1 `cat /var/run/td-agent/td-agent.pid`
以上で、指定したtreasuredataのテーブルにレコードがインポートされる。