Skip to content

Instantly share code, notes, and snippets.

@gunyarakun
Created May 31, 2016 02:54
Show Gist options
  • Save gunyarakun/1cc9cfc897303eb367fdd7818a2d0729 to your computer and use it in GitHub Desktop.
Save gunyarakun/1cc9cfc897303eb367fdd7818a2d0729 to your computer and use it in GitHub Desktop.
RailsでTreasure Dataにデータを流してみようメモ

RailsでTreasure Dataにデータを流してみようメモ

前提

  • td-agent/fluentdに1ミリも詳しくないです
  • とりあえず最短で使ってみよう
  • Railsのログと、自前のイベントログをそれぞれ流したい的な用途

Railsアプリの中から任意のイベントログを出す

https://docs.treasuredata.com/articles/rails

のページに説明がある。

Debian jessieのインストール方法がない

Squeeze/Wheezyはあるが、Jessieはない。ウチのDocker環境がJessieで。

# Debian Jessie (64bit only)
$ curl -L http://toolbelt.treasuredata.com/sh/install-debian-jessie-td-agent2.sh | sh

でいける。

タグの役割がよくわからん

推定するに、td.データベース名.テーブル名 のような感じ?

で、config/treasure_data.ymlのtagにはtd.データベース名だけ書いておいて、 TD.event.post('テーブル名', {:key => 'value'})的な感じで、{:key => 'value'}なログにtd.データベース名.テーブル名のtagがつくようだ。最初のセクションがtd以外だったらルール違うのかも。

いずれにせよドット区切りでタグをつけて、それをtd-agent.confでマッチングさせてフォワードしたりするような思想っぽい。

共通データ

remote_ipとか全ログにつけたいよね。こんな感じで指定できるっぽい。

https://github.com/treasure-data/td-logger-ruby#rails-extension

class ApplicationController < ActionController::Base
  before_action :setup_basic_attributes_for_td

  private

  def setup_basic_attributes_for_td
    TD.event.attribute[:remote_ip] = request.remote_ip
  end
end

kill -USR1めんどい

/etc/init.d/td-agentあたりにflush-buffer的コマンドつけて欲しい。すでにあるのかも。

もしくは、td Gemでバッファのフラッシュが明示的にできるなら、config/treasure_data.ymlのdevelopmentセクションで何か指定すれば、毎行とか毎秒ごとflushしてもらえると初心者にはやさしい。負荷高まりそうだが。

Railsのログを出す

http://www.fluentd.org/datasources/rails

のページに説明がある。

Gemの入れ方

出力されたJSONログを見やすくするには

gem install fluent-plugin-parser

しろと言われたが、td-agentはどうやら自前のGem環境を持っているようで、そこに入れないといけない。

具体的には、

/usr/sbin/td-agent-gem install fluent-plugin-parser

しないといけない。ver. 1系は単なるgemでよかったようだ。

タグ

tdに出す場合には、config/fluent-logger.ymlで、tagをtd.データベース名.テーブル名にするとよいのかな?

Railsのログを出すドキュメントはtdではなくてfluentdなので、tdの例は書けないだろうけど。

動作できなかった…

なんかLogrageがうまく有効にならない… 既存の環境の何かと食い合っているのかも。調べる。

  • LogrageでRailsログのJSON化
  • そのログをActFluentLoggerRails::LoggerでJSONを文字列としてローカルのtd-agentに送信
  • fluent-plugin-parserでJSON文字列をデコードして、標準出力やその他もろもろの送り先に送る

的な感じの流れなんだろうけど、最初でつまってしまった。

あとやったこと

  • rubyzipの1.2.0使ってたけど、tdのGemがrubyzip ~> 1.1.7なのでバージョン落とした

感想

  • fluentdに習熟したあとにtreasure data使うのが普通のステップっぽい
  • 親切なドキュメントはメンテナンスが面倒だ
  • ドキュメントはつまみ食いせずにちゃんと全部読むべき…だけどめんどいよね
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment