この記事をシェアする

fluentd経由のデータをmongodbへ保存する

まさか焼き肉屋の料金の方がカラオケ代の方が高い体験をした@HIROCASTERでございませう。

今回は前回設定したfluentdの出力先をmongodbへ変更します。

前回の記事はこちら

mongodbへログを入れておけば、mongodbの機能を使ってログを検索できるので、目的のデータをテキストファイルよりは探しやすくなります。

スポンサーリンク

mongodbのインストール

環境がUbuntu 10.04.4 LTSなので、そのままだと古いmongodbしか入らないので、mongodbのサイトに従って最新のmongodbを導入できる状態にする。

詳しくはこちら

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

/etc/apt/sources.listに追加をする。

# mongodb                                                                                                                                                                     
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
$ sudo apt-get update
$ sudo apt-get install mongodb-10gen

fluent-plugin-mongoをインストール

$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-mongo
Successfully installed fluent-plugin-mongo-0.6.7
1 gem installed
Installing ri documentation for fluent-plugin-mongo-0.6.7...
Installing RDoc documentation for fluent-plugin-mongo-0.6.7...

/etc/td-agent/td-agent.conf

ファイルに出力していた部分の設定をmongodbへ出力するように切り替える。

<match nginx.access.**>
  type mongo
  host localhost
  database fluent
  collection nginx
</match>

td-agentを再起動

$ sudo /etc/init.d/td-agent restart

mongodbへ出力されているかを確認

$ mongo
MongoDB shell version: 2.0.5
connecting to: test
> use fluent
switched to db fluent
> db.nginx.find();
{ "_id" : ObjectId("4fc211900399067343000012"), "host" : "49.238.3.26", "user" : "-", "method" : "GET", "path" : "/wp-content/w3tc/min/dbf689e3.4baeac.css", "code" : "200", "size" : "4300", "referer" : "http://hiroki.jp/2012/04/04/3523/", "agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; YTB730)", "response_time" : "0.000", "time" : "Sun May 27 2012 20:35:41 GMT+0900 (JST)" }
{ "_id" : ObjectId("4fc211900399067343000014"), "host" : "49.238.3.26", "user" : "-", "method" : "-", "code" : "400", "size" : "0", "referer" : "-", "agent" : "-", "response_time" : "0.000", "time" : "Sun May 27 2012 20:35:41 GMT+0900 (JST)" }
has more

こんな感じにクエリーを投げてあげるとステータスコード404のログだけ抽出できる。

> db.nginx.find({code: "404"});

クエリーについてはこのあたりを参考にすると良いのではないだろうか。

無事に出力されているので、今回の作業は完了。

mongodbのバージョンが古いと

/var/log/td-agent/td-agent.logに

2012-05-27 21:09:48 +0900: mongo unknown error undefined method `>=' for nil:NilClass, set 2097152 to chunk limit

とか出る。Ubuntuで最初の最新版を入れるような事をやらないで、そのままインストールするとmongodbのバージョンが1.2.2なのが原因っぽい。

関連記事

スポンサーリンク

この記事をシェアする

著者をフォローする