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 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
sele
db.hoge.gr
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