前々から気になっていた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 件のコメント:
コメントを投稿