[Ruby on Rails]Treasure Dataにレコードを登録する

2014.07.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

今回はタイトル通り、Treasure Dataにレコードを登録する方法についてです。前回とは異なり、一件ずつデータを登録します。ログのように一件ずつ発生するが大量になるようなデータを、Treasure Dataに登録する場合などに使う事になるかと思います。

事前準備

Treasure Data command line toolと、td-agentをインストールします。

1.td-agent

下記のサイトを参考に、td-agentをインストールします。(MacOS Xの場合です)
Installing Fluentd using .dmg Installer (MacOS X)

インストール後、以下のコマンドを実行するのを忘れないでください(私はこれを忘れて、しばらく立ち往生しました・・・)。

$ sudo launchctl load /Library/LaunchDaemons/td-agent.plist
$ less /var/log/td-agent/td-agent.log

2.APIキーの登録

以前の記事で書いた方法で、キーの取得します。「/etc/td-agent/td-agent.conf」を開き、取得したキーを含め、以下のように記述します。この時、「match td.*.*」タグはユニークになるよう余計な定義はコメントアウトしたほうが良さそうです。

$ sudo vi /etc/td-agent/td-agent.conf
/etc/td-agent/td-agent.conf
<match td.*.*>
  type tdlog
  apikey 取得したAPIキー
  auto_create_table
  buffer_type file
  buffer_path /var/log/td-agent/buffer/td
  use_ssl true
  flush_interval 30s
</match>
<source>
  type forward
  port 24224
</source>

3.Treasure Data command line tool

Treasure Data command line toolはgemとして公開されているので、以下のコマンドでインストールします。

$ gem install td

サンプルソース

では、Railsでのサンプルソースです。予めTreasure Data上にデータベース、テーブルが作成されていることが前提となります。

1.Gemfile

以下をGemfileに記述し、bundle install します。

gem 'td'

2.treasure_data.yml

/config/treasure_data.ymlを作成し、以下のように定義します。今回はデータベース名を「sample_db」としました。

/config/treasure_data.yml
production:
  agent: "localhost:24224"
  tag: td.sample_db
  debug_mode: false

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

test:
  agent: "localhost:24224"
  tag: td.sample_db
  debug_mode: false

3.レコードの登録

最後にレコード登録についてです。今回は「persons」テーブルにデータを登録しました。

class Person
  def self.create(name, age)
    value = {'name' => name, 'age' => age, 'time' => Time.now}
    TD.event.post('persons', value)
  end
end

TD.event.post()メソッドを呼び出し、登録対象のテーブル名、登録するデータのjsonを引数として渡します。Treasure Dataのテーブルにはデフォルトでtime列があるため、忘れずに登録値を設定するようにします。

まとめ

Treasure Dataにログ等を格納する際の参考になれば幸いです。