実際に運用しているサービスのNginxログをLTSVにしてみた!

fluentd
fluentd

LTSVフォーマット本当に見やすくて便利だなと感じた@HIROCASTERでございませう。
何かと話題のLTSVだが、本当にコロンブスの卵だと思っている。
いままで、Apacheのcombine形式のログを独自に拡張したフォーマットを利用して、fluentd(実際はtd-agentを利用している)にログを収集させていた。
実感するためにLTSVフォーマットに実際に変更して運用し始めた。

スポンサーリンク

NginxにLTSVフォーマットを登録する

LTSVのサイトを参考にNginxの設定ファイル(/etc/nginx.confあたり)にLTSVのフォーマットを登録する。リバースプロキシとしても利用しているため、$upstream_response_timeの設定を意図的に増やしている。

log_format ltsv "time:$time_local"
                "thost:$remote_addr"
                "tforwardedfor:$http_x_forwarded_for"
                "treq:$request"
                "tstatus:$status"
                "tsize:$body_bytes_sent"
                "treferer:$http_referer"
                "tua:$http_user_agent"
                "treqtime:$request_time"
                "tupsttime:$upstream_response_time"
                "tcache:$upstream_http_x_cache"
                "truntime:$upstream_http_x_runtime"
                "tvhost:$host";

NginxのVirtualHost設定部分でログのフォーマットをltsvに指定を変更する。

access_log  /var/log/nginx/access.log ltsv; 

Ningxの設定を再読込する。

$ sudo service nginx reload

ログがLTSV形式で出力されていることを確認する。

$ tail -f /var/log/nginx/access.log

fluentd経由でログを収集する

fluentdではなく、td-agentを利用しているので、まだltsvをフォーマットとしてサポートしていなかった。(既にfluentdではサポート済み)
よってfluent-plugin-tail-labeled-tsvというプラグインを導入する。gem化されていないので、in_tail_labeled_tsv.rbを/etc/td-agent/plugin/以下に配備した。
td-agent.confはこの様に記述

<source>
  type tail_labeled_tsv
  path /var/log/nginx/access.log
  tag nginx.access
</source>

この様な感じでタグを付けて、mongodbへは

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

という感じで投げ入れている。
念のためmongodbに入っているかを確認する

$ mongo
MongoDB shell version: 2.0.4
connecting to: test
> use fluent
switched to db fluent
> db.nginx.find().count()
292
> db.nginx.find().count()
303

きちんと入って、増えてるのを確認した。
もちろん、GrowthForecastをインストールして、設定してやれば簡単にグラフがつくれるので便利!!(既につくってるグラフは対応した)

Software Design (ソフトウェア デザイン) 2012年 06月号 [雑誌]

Software Design (ソフトウェア デザイン) 2012年 06月号 [雑誌]

タイトルとURLをコピーしました