LgR on Fluentd & MongoDB: Railsが吐いたJSONをfluent経由でMongoに突っ込んで集計


Overview

  • create JSON formatted log from Rails
  • send log using fluent-agent-lite
  • receive log using Fluentd
  • save on local file & MongoDB
  • map & reduce on MongoDB
    @さくらのVPS 2G with Debian GNU/Linux testing (wheezy)

 

install Ruby & Rails

rbenv使って入れてみる

 

RailsにJSON形式のログ吐かせる

ちょこっとアプリ

Unicorn(と何か)を入れる

起動してたたく host:5000/log/lgr

ログが吐かれてる

 

Fluent達を勃てる

まずは受け取る側(Fluentd)勃てる

てきとに設定

起動

続いて送る側(fluent-agent-lite)勃てる
Railsが吐いてるのがJSONなんで、おとなしく送る側もFluentdでいい気もするけど、
とりあえず使ってみようということで

おりゃっ

で、送信先のログ(Fluentdが吐くヤツ)を確認

う~む、いちおう来てるけど、なんか惜しいゲロ
ので、ググッてでてきたplugin挿れる
fluent-plugin-file-alternative : https://github.com/tagomoris/fluent-plugin-file-alternative

スコ

設定しなおし

イイ感じ

 

MongoDBに挿れる

Mongo用意

起動

Fluentdにpluginいれる

設定しなおし

Fluentd再起動後Mongo確認

 

Mongoでmap&reduceして集計

ログたまるの待ってらんないので、mongoimportで水増しする
mongoimport : http://docs.mongodb.org/manual/reference/mongoimport/

けっこかかるな。。。(1M records/min)
なんとなくMySQLのloaddataのほうが早そう
さくらのVPS 2Gでload aveが2、CPU50%ぐらい
mongoimportのドキュメント見ると、
-> “…the –dbpath option enables mongoimport to attach directly to local data files and insert the data without the mongod”
ってことなんで試してみる

おぉ、ちょっぱや~っと思ったけど、失敗しただけか
指定したdbpathが、既に起動中のMongoDBと一緒だかららしぃので、いったんMongoDB落としてから再実行

ちょっぴり早くなったのかも
load aveとCPUはさっきの半分ぐらい
いよいよ集計
↓を参考にMapとReduce定義する
MapReduce : http://www.mongodb.org/display/DOCS/MapReduce

実行

これまたけっこかかるな。。。
まぁなんも設定せずただ生で挿入しただけだしな

確認

ふぅ

Leave a comment

Your email address will not be published. Required fields are marked *