- td-agent/fluentdに1ミリも詳しくないです
- とりあえず最短で使ってみよう
- Railsのログと、自前のイベントログをそれぞれ流したい的な用途
https://docs.treasuredata.com/articles/rails
のページに説明がある。
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
/etc/init.d/td-agentあたりにflush-buffer的コマンドつけて欲しい。すでにあるのかも。
もしくは、td Gemでバッファのフラッシュが明示的にできるなら、config/treasure_data.ymlのdevelopmentセクションで何か指定すれば、毎行とか毎秒ごとflushしてもらえると初心者にはやさしい。負荷高まりそうだが。
http://www.fluentd.org/datasources/rails
のページに説明がある。
出力された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使うのが普通のステップっぽい
- 親切なドキュメントはメンテナンスが面倒だ
- ドキュメントはつまみ食いせずにちゃんと全部読むべき…だけどめんどいよね