Treasure Dataにデータをインポートするプログラム(Rails編)

お久しぶりです。SSTDの大村です。すっかり涼しくなって夏が終わってしまった感じがしますね。私は食欲の秋に負けないように最近ランニングを始めました。20代までの記憶で5キロくらい楽々走れるだろうと考えていたのですが、500mも連続で走れませんでした。少しずつ走れる距離を伸ばしていつかはマラソン大会に出場してみたいものです。

今回はこちらを参考にRailsアプリケーションからTreasure Dataへデータをインポートするプログラムを作成してみましょう。内容は5月に紹介しましたTreasure Dataのデータを利用するプログラム(Ruby編)の復習にもなりますのでぜひチャレンジしてみてください。

環境

CentOS release 6.4 (Final)

事前準備

Railsアプリケーションを新規作成

$ rails new sample1
$ cd sample1
$ echo "gem 'execjs'" >> Gemfile
$ echo "gem 'therubyracer'" >> Gemfile
$ rails server (起動)

起動確認

ブラウザでhttp://localhost:3000/にアクセスして、下記のような画面が出たら成功です。確認したら、Ctrl+Cでいったん終了させてください。

Treasure Dataの設定

APIキーの取得

$ td apikey:show

/etc/td-agent/td-agent.confを修正

# Treasure Data Input and Output
<source>
  type forward
  port 24224
</source>
<match td.*.*>
  type tdlog
  apikey YOUR_API_KEY
  auto_create_table
  buffer_type file
  buffer_path /var/log/td-agent/buffer/td
  use_ssl true
  flush_interval 30s
</match>

td-agentを再起動し、tdの設定をRailsアプリケーションに設定し、scaffoldでコードを自動生成する。

$ sudo /etc/init.d/td-agent start
$ cd ~/sample1/
$ echo "gem 'td', '~> 0.10.6'">>Gemfile
$ bundle install
$ rails generate scaffold person name:string
$ rake db:migrate RAILS_ENV=development
$ rails s

app/controllers/people_controller.rb にログ送信部分の書き込み(赤字の部分を追加してください。)

  # POST /people
  # POST /people.json
  def create
    @person = Person.new(person_params)
    send_td(@person.name)
    respond_to do |format|
    ・・・・
  end
 
  private
  # Treasure Dataへデータを送信
 def send_td(name)
      time = Time.now
      TD.event.post('people',{:name=>name,:time=>time})
  end

実行

以下の手順で確認します。

  1. http://localhost:3000/peopleにアクセスする
  2. New Personをクリック
  3. Nameに何か入力して、Create Personをクリック
  4. 1分ほど待つ
  5. 端末で確認

Ruby,Java,JDBC,RailsとTreasure Dataへのデータ送信方法を紹介してきましたが、これからもさまざまな言語やアプリケーションからのデータ送信方法を紹介していきますのでお楽しみに。

執筆:大村@SSTD