最終的にはNginxのパフォーマンスを可視化しようとしている@HIROCASTERでございませう。
前回fluentdなどを使って、ログを活用する理由について述べたので、今回はfluentdでログを集めるためにfluentdを動かしてNginxのログを受け取るところまでやってみる。
fluentdのインストール
fluentdをとりあえず動かすためだけだったら、Ruby1.9.3とかを使っていれば、
$ gem install fluentd
として gem でインストールしてしまった方が楽なのだけど、実際にサーバで動かすには td-agent と呼ばれる Treasure Data 社が提供しているパッケージでインストールした方が fluentd を動かすためのRubyのバイナリなども入っているため、OS側のRubyのバージョンなどを気にしなくて良いから、こっちを使うべき。
Ubuntuなので、こんな感じ。
$ sudo apt-add-repository 'deb http://packages.treasure-data.com/debian/ lucid contrib'
$ apt-get update
$ apt-get install td-agent
起動スクリプト
起動スクリプトはココ
$ /etc/init.d/td-agent
設定ファイル
設定ファイルは /etc/td-agent/td-agent.conf
Nginxのログを設定
あとでNginxのログからサイトのパフォーマンスを取得したいのでログのフォーマットを変更設定する。
nginx.conf をこんな感じにする。
log_format custom '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time';
…(省略)
access_log /var/log/nginx/hiroki.access.log custom;
log_format では従来よく使われるログのフォーマットである combined の最後に $request_time を付加して、ログフォーマットを定義して custom という名前を設定している。
access_log ではフォーマットを変更するバーチャルホストのログフォーマットを custom に設定している。
td-agent.conf
td-agent でNginxのログを拾って取得できる設定をする。
<source>
type tail
format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) [(?<time>[^]]*)] "(?<method>S+)(?: +(?<path>[^ ]*) +S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^"]*)" "(?<agent>[^"]*)" (?<response_time>[^ ]*))?$/
time_format %d/%b/%Y:%H:%M:%S %z
path /var/log/nginx/hiroki.access.log
tag nginx.access.hiroki
</source>
<match nginx.access.**>
type file
path /var/log/archive/nginx.access.hiroki
time_slice_format %Y%m%d_%H%M
time_slice_wait 30s
time_format %Y-%m-%d %H:%M:%S
</match>