二足歩行への一歩

技術者のハイハイの記録

fluentdでApacheのaccess_logを取得しMongoDBに放り込む

fluentdを使って、Apacheのaccess_logをMongDBにぶち込むまでの流れ。

 

環境

OS:centOS5.5

ruby 1.9.3

rails 3.2.11

 

mongoDBのインストールは別途

このあたりとかを参考にして下さい。

http://d.hatena.ne.jp/ja9/20100707/1278495362 

 

fluentdをインストール

$ gem install fluentd

でgemをinstallして(mongoDBに接続するプラグインもinstallされます)、

$ fluentd --setup fluent/

で初期セットアップをするだけ。

すると、

./fluentd/fluentd.conf

というファイルが作成される。

次にこのファイルで設定を行う。

$ vi ./fluentd/fluentd.conf

 

 

fluentd.confの設定

 

 

mongoDBはlocalhostの27017ポートを利用しています(デフォルト)。

 

sourceのtagをmongo.apache

として、

tagの記述に対してmatchを行う事で、

matchしたsourceについて、

match内にあるアクションを実行するイメージです。

 

tailは指定したファイルの末尾に更新があった場合に動作します。

.posファイルはどこまで処理を行ったかを管理するファイルです。

 

なので、この設定の動作を言語化すると、

/var/log/httpd/access_log

に変更が入ると、

pos_file /var/log/httpd/access_log.pos

を参照して処理開始点を決定し、

mongo.apacheという名前をつけます。

で名前が、mongo.*に該当するので、

localhostの27017ポートにあるmongoDBに

データを登録します。

 

 

はまったポイント

・.posファイルを指定しないと、mongoDBにログを入れ始めなかった(なぜか不明)

 

mongoDBクエリサンプル

ブログに慣れる事も兼ねて、

mongoDBのクエリサンプルを記載します。

 

where:simple

  select * from hoge where fuga = 1;

  db.hoge.find({fuga:1});

findの中の最初の項目は条件指定ですね。

後述しますが二つ目の項目でカラム指定になっています。

 

where:or

  select * from hoge where foo = 1 or bar = 2

  db.hoge.find( { $or : [{foo : 1 } , {bar:2) ]}) 

キー項目で$or等の条件を指定します。

 

order by 

  select * from hoge order by fuga;

  db.hoge.find().sort({fuga:1});

orderはsort()にて行います。
 

order by desc

  select * from hoge order by fuga desc;

  db.hoge.find().sort({fuga:-1});

 

select:カラム指定

  select foo , bar from hoge ;

  db.hoge.find({},{foo:1,bar:1});

 

group

 select foo , count(foo) from hoge group by foo

 db.hoge.group({key:{foo:true} , initial:{count:0} , reduce: function(obj,prev){ prev.count++;}  })

reduceでどのように集約するかを定義しています。

groupはDBを分散させる際には推奨されておらず、

下記のmap reduceを使います。

 

map reduce

端的には、

map関数で対象の範囲を

reduce関数で集約方法を定義して、

map_reduceを実行するイメージを持っています(違ったらごめんなさい)

 

参考リンク

 

MongoDB : サルでもわかるMapReduce 

http://dqn.sakusakutto.jp/2011/11/mongodb_mapreduce.html

SQLとMongoの対応表

http://www.mongodb.org/pages/viewpage.action?pageId=18907495