前々から気になっていた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に蓄積されました。
参考にさせて頂いたサイト。