この記事をシェアする

fluentdをインストールしてNginxのログをまずはローカルで集める

最終的には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>
部分ではログの元情報について設定する。 format の正規表現でJSONのキーを設定している。
部分では部分で付けられた tag にマッチしたら所定の処理をする。この場合はファイルで吐いてるだけ。

以上で、ローカルのNginxのログをfluentdで取得することはできた。fluentdサーバが別であれば forward の設定を追加してやれば良いだけである。

$ sudo /etc/init.d/td-agent restart

でfluentdはJSON形式でログを吐いてくれるだろう。

関連記事

スポンサーリンク

この記事をシェアする

著者をフォローする