2013/07/13

[fluentd] nginxのアクセスログをfluentdからmongodbに!

前々から気になっていたfluentdをようやく試しました。 fluentdは、rubyで書かれたオープンソースのログ収集デーモンです。

今回試したのは、nginxのアクセスログ(ltsv)をfluentdを使ってmongodbに集める、ということです。 (ここでは、mongodbのインストール方法などは書きません。)

fluentdのインストール

fluentdにはyumパッケージ、debianパッケージ、ruby gemなどいくつかあって、 僕はgemをインストールしました。

 $ ruby --version
 ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
 $ gem --version
 2.0.3
 $ sudo gem install fluentd

fluentdの設定

ディレクトリ /etc/fluent を作って、初期化コマンドを実行します。

 $ sudo mkdir /etc/fluent
 $ sudo fluentd --setup /etc/fluent

ltsv用プラグイン(input)

nginxのアクセスログは、ltsv形式で出力しています。
(nginxのアクセスログをltsv形式にする方法は、[nginx]アクセスログフォーマットにLTSVを適用する。にあります。)
stanaka/fluent-plugin-tail-labeled-tsvを使用させて頂いて、簡単にltsvなアクセスログをfluentdのinputとして扱うことができました。
in_tail_labeled_tsv.rbというRubyファイルを/etc/fluent/pluginsに配置します。

mongodb用プラグイン(output)

fluentdの出力を、mongodbへ格納するためのプラグインをインストールします。
fluent/fluent-plugin-mongoです。

 $ fluent-gem install fluent-plugin-mongo

fluent.conf

inputとoutputの定義をfluent.conf(/etc/fluent/fluent.conf)に書きます。
今回は、nginxとfluentd、mongodbを同じホスト上で動かしています。
そのため、↓のようなファイルになりました。

/etc/fluent/fluent.conf


  <source>
    type tail_labeled_tsv
    path /usr/local/nginx/logs/access.log
    tag nginx.access
    pos_file /var/log/fluent/access.log.pos
  </source>

  <match nginx.access>
    type       mongo
    database   fluent
    collection nginx
  </match>

fluentdの起動

fluentdのupstart用スクリプトを書いて起動します。

/etc/fluentd.conf


description "fluentd upstart script"

start on (local-filesystem and net-device-up)
stop  on shutdown

respawn
respawn limit 5 60

script
  exec sudo -u somebody /usr/local/rbenv/shims/fluentd -c /etc/fluent/fluent.conf
end script

 $ sudo start fluentd

これでmongodbにアクセスログがmongodbに蓄積されました。

参考にさせて頂いたサイト。

0 件のコメント: