fluentdで複数のnginxサーバログを収集しmongoDBに格納する


一つのサービスで、負荷分散のために複数のWebサーバ(nginx)を運用している場合、アクセスログなどがバラバラに散らばっていて、ログからなにか調べようと思ったり、統計をとったりするのが面倒だったりします。

そこで、ここ最近はやっているfluentdを導入してみました。うわさ通り簡単。


イメージはこんな感じ。

fluentdのインストール

ログを送信する側と、受信する側、両方にfluentdが入っている必要があります。

今回はAWSのディストリだったので、yum経由でインストール。公式サイトに記載されている下記コマンド一発で完了です。他にもapt-get / gem / brewでも簡単に入れられます。

curl -L http://toolbelt.treasure-data.com/sh/install-redhat.sh | sh

Installing Fluentd Using rpm Package | Fluentd

起動や停止は自動的にサービス化されています。

service td-agent start | stop | restart | status

nginxのログを送信する

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


  type tail
  path /var/log/nginx/access.log
  format /^(?[^ ]*) (?[^ ]*) (?[^ ]*) \[(?

ログファイルのフォーマットに関しては、apacheなどのプリセットされているものもありますが、正規表現を使ってオリジナルフォーマットに対応させることも出来ます。

今回は、nginxのログフォーマットを改造しているので、独自のフォーマットとして登録します。

nginxのログを受信する

上記サーバで type forward と設定したので、収集したログは外部サーバへ投げるようになっています。投げる先は例だと 192.168.1.100 になります。

ポートはデフォルトだと24224のTCP/UDPを使います。データ送信はTCP、サーバの死活監視用にUDPを使うみたいです。

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


  type forward
  port 24224


  type file
  path /var/log/td-agent/access_log

まず、物理ファイルに出力する設定です。これで基本的には設定完了。あとはtd-agentを起動すれば動き出すはず。/var/log/td-agent/access_log に対して、どんどんログが追記されてくると思います。

ログの出力タイミングは flush_interval で調整できます。デフォルトだと60秒だった…かな。今は5秒くらいでやっていますが、特に問題なく動いています。

mongoDBのインストール

物理ファイルじゃなくて、mongoDBに突っ込んで色々やりたいので、インストールしてみます。yumでインストールするために、リポジトリを登録します。

/etc/yum.repos.d/mongodb.repo

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1

そしてyumでインストール。

sudo yum -y install mongo-10gen mongo-10gen-server

fluentdのプラグインも必要なので下記コマンドでインストール。

/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-mongo

mongoDBの起動。

sudo service mongod start

fluentdの出力先をmongoDBに変更する

ログ受信サーバ側の fluentd の設定を下記のように変更します。


  type forward
  port 24224


  type mongo
  database nginx
  collection access
  host 127.0.0.1
  port 27017

これで td-agent を再起動すれば、mongoDBにデータが溜まるはず。

$ mongo
> use nginx
> db.access.find()

こんな感じでデータが見られると思います。今回はじめてmongoDBを使いましたが、すごいサクサク。ココらへんももっと勉強しないとなー。

Feed

最新記事

開発フローを独自進化させ続けている開発チームの話

こんにちは CTO の [@zaru](https://twitter.com/zaru) です。 スクラム開発をしている開発チームが、開発フローを独自進化させていて、それが良い取り組みだったので紹介しようと思います。 #...

235650?v=4
zaru
2017年11月20日

退職者を招いたLTイベントを開催した

こんにちは、ベーシック CTO [@zaru](https://twitter.com/zaru) です。 ベーシック開発部では毎月月末の金曜日にTGIFと称して、 ~~飲み会 + アナログゲームなイベント~~ 技術 LT 大会...

235650?v=4
zaru
2017年10月12日

山形ラボ、TGIFはじめました

こんにちは。株式会社ベーシック山形ラボの長谷川です。 いろんなところで書いたりなんだりしてますが、弊社には山形に「山形ラボ」というリモート拠点がありまして、そこで4人のエンジニアが働いております。 今回は その山形ラボで、...

10917612?v=4
roki1801
2017年10月10日