nginxのlog_formatを忘れないところにメモっておきたかったのでメモ。
#nginx設定
nginx.conf
のhttpコンテキスト内にLTSV形式のログフォーマット定義を行う。$time_iso8601
などの変数はnginx http_core_moduleのEmbedded Variablesを参照して適当に設定しています。
/etc/nginx/conf.d/log_format.conf
として分離したファイルで設定して、nginx.conf
内でconf.d/*.conf
を読み込むようにする。
/etc/nginx/conf.d/log_format.conf
log_format ltsv 'time:$time_iso8601\t'
'remote_addr:$remote_addr\t'
'request_method:$request_method\t'
'request_length:$request_length\t'
'request_uri:$request_uri\t'
'https:$https\t'
'uri:$uri\t'
'query_string:$query_string\t'
'status:$status\t'
'bytes_sent:$bytes_sent\t'
'body_bytes_sent:$body_bytes_sent\t'
'referer:$http_referer\t'
'useragent:$http_user_agent\t'
'forwardedfor:$http_x_forwarded_for\t'
'request_time:$request_time\t'
'upstream_response_time:$upstream_response_time';
serverコンテキストでアクセスログを設定。フォーマットに先に定義したltsv
を指定する。
/etc/nginx/sites-enabled/server.conf
access_log /var/log/nginx/access.log ltsv;
#fluentd(td-agent)設定
nginxのログファイルをformat
をltsv
として読み込む。
/etc/td-agent/td-agent.conf
<source>
type tail
format ltsv # ←これがキモ
tag nginx.access
path /var/log/nginx/access.log
pos_file /var/log/td-agent/buffer/access.log.pos
</source>
アクセスログをMongoDBの server-logデータベース 、 nginx_access_logコレクション に保存する。
/etc/td-agent/td-agent.conf
<match nginx.access>
type copy
<store>
type mongo
host 127.0.0.1
database server-log
collection nginx_access_log
</store>
</match>
#MongoDB上で確認
インタラクティブシェルでMongoDBの中身を見てみる。
$ mongo server-log
上記設定のデータとちょっと違うんですが、コレクションを参照するとこんな感じになります。
> db.nginx_access_log.find()
{ "_id" : ObjectId("53183789d604801cab000017"), "hostname" : "redmine", "method" : "GET", "uri" : "/ajax/i18n/en_f09b74e1e85282d6b2633c350cc58f43.js", "status" : 200, "size" : 1157, "reqtime" : 0.008, "upsttime" : 0.008, "time" : ISODate("2014-03-06T08:53:02Z") }
以上!