fluentdをUbuntu 12.04 LTSにインストール
簡単にログを収集できるということで、目を付けていたfluentdにやっと手を出しました。
さくらVPSにカスタムOSでUbuntu12.04LTSを入れているので、そこに入れます。
まるっと入れられることもあって、TreasureData社が配布しているtd-agentを使います。
TreasureData社サポートページの通りで入ります。
$ curl -L http://toolbelt.treasure-data.com/sh/install-ubuntu-precise.sh | sh # install log...
これで終わり。すごい簡単。
td-agent(fluentdも)の便利なコマンドたちが以下のディレクトリにあるので、.bashrcなどで、PATHに追加しましょう。
$ /usr/lib/fluent/ruby/bin/ b2json fluent-gem j2bson rdoc bundle fluent-post jeweler ri edit_json.rb fluent-scribe-remote mongo-tail ruby erb fluentd mongo_console td fluent-cat gem nokogiri testrb fluent-debug httparty prettify_json.rb fluent-flume-remote irb rake
動かして、試しにログを出してみます。
td-agent起動
$ sudo /etc/init.d/td-agent start
fluent-catコマンドを使って、JSONをdebug.tagというタグでfluentdへ
$ echo '{"key":"value"}' | fluent-cat debug.tag
どこに出力されるかというと、/var/log/td-agent/td-agent.log
$ tail /var/log/td-agent/td-agent.log fluentdの起動ログとかとか... 2013-01-24 22:30:20 +0900 debug.tag: {"key":"value"}
なぜこの動きになるかというと、設定ファイル(/etc/td-agent/td-agent.conf)に書いてあるからです。このファイル自体は、td-agent入れた初期状態だと、説明がてらのコメント行が多いので、上記のtd-agent.logをcatとかで見る方がわかりやすいです。
td-agent.logには、起動時に読み込んだ設定がコメント行などを除いて出力されています。
$ cat /var/log/td-agent/td-agent.log 〜起動ログとか〜 <match debug.**> type stdout </match> <source> type forward </source> <source> type debug_agent bind 127.0.0.1 port 24230 </source> 〜設定読んだ後のログとか〜
fluentdは、
ちょっとそのままだと順番が悪いですが、中段の
ちなみに、type forwardをコメントアウトすると、つながらないエラーが出ます。
$ echo '{"key":"value"}' | fluent-cat debug.tag connect failed: Connection refused - connect(2)
次はがんばってgrowthforecastに入れるあたりまで流れを書きたいけどまずは、datacounterまでかな。
tail -> parser -> datacounter -> growthforecast
とかで簡単にグラフ化できて楽しいです。
- 2013/1/26追記
repeatedlyさんからtype debug_agentについてコメントいただいたので追記。
> type debug_agent
これは名前の通りデバッグ向けプラグインです.Rubyにはdrbというライブラリが標準で提供されていて,口を用意しておくと外部からつないでそのプロセスの中のオブジェクトを操作できたりします.
fluent-debugというコマンドでこのdebug-agentにつなげることができます.
調べてみたら、debug_agentとfluent-debugは、fluentdのドキュメントにトラブルシューティング用で紹介されていました。
Monitoring Fluentd http://docs.fluentd.org/articles/monitoring
動いてるけど、値がおかしいとか、へんな挙動してるときとかに調べる雰囲気。
Rubyがさっぱりなので、まずRubyをさわってみないと。試しにxxpluginとか、fluentdのある値を取り出すやりかた、とかやると覚えそう。