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をインストールして、設定してやれば簡単にグラフがつくれるので便利!!(既につくってるグラフは対応した)