年中アイス

いろいろつらつら

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は、でログを受け付けて、タグをつけながら、を通して、加工されたり、何かに出力したり(ファイル、DB、他サーバなど)する流れになります。

ちょっとそのままだと順番が悪いですが、中段ののtype forwardが、fluent-catコマンドの出力を受け付けます。(type forwardはTCPでのログ受付なので、他のサーバから受け付けるときにも使います)
fluent-catは、自サーバの標準ポートに対して、入ってきたJSONをタグ付きで流してます。(たぶん。中は見てないですが。。。)
そこから、一番上のにあるdebug.**に、debug.tagが合致するので、stdoutに出力されます。td-agentの場合、stdoutはtd-agent.logに出てきます。type debug_agentのが無くても、このfluent-catでの確認は動きます。何なのかはまた今度調べよう。

ちなみに、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のある値を取り出すやりかた、とかやると覚えそう。