Nginxのログフォーマットを変更する

NGINX
http://nginx.com/

ログフォーマット環境変数
http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format

初期のログフォーマット

HTTPの一般的な環境変数なども考慮して

このような形にしてみました。
コメントアウト(#)はのちのちの参考として残してあります。

NGINXのログフォーマット
宣言:log_format 識別名:文字列 形式:環境変数を含んだ記述
上記例文は、
log_format main ‘形式’;
log_format backend ‘形式’;
log_format ltsv ‘形式’;

ここで指定した識別名をログを記録するファイル名の末尾に記述することで、それぞれのログフォーマットで記録してくれます。

使用例

アクセスログはaccess.www.logという名前でltsv形式で保存
エラーログはerror.www.logという名前でmain形式で保存

td-agentの設定を変更
nginxの初期フォーマットからオリジナルltsvへ

td-agentにはnginxの初期フォーマットが用意されているので、nginxのログフォーマットを変更しなければ、format nginxとしておけばよい。今回はnginxをオリジナルフォーマットに変更したのでそこを変更する。

ここでのltsvは区切りのフォーマットであるという固有の宣言なので、上記のフォーマット名に関わらずformat ltsvとなる。
http://docs.fluentd.org/ja/articles/in_tail
次いで、kibanaで表示させるときのタイムスタンプを統一させる必要があるので、nginxでのタイム表記「%d/%b/%Y:%H:%M:%S %z」を追記させるようにしておく。
これでtd-agentは変更されたnginxのオリジナルフォーマットをTAB区切りのフォーマットであると認識し、elasticsearch+kibanaなどにデータを送信する際にタイムスタンプ(@timestamp)を付与してくれる。タイムスタンプを統一化しておくことでkibanaで時系列での検索が可能になる。

コメントを残す