combinedに代わるオレ流ログフォーマット

こんにちは、combinedログ撲滅委員会のひろせです。

ApacheのcombinedやNginxのデフォルトのlog_formatは、機械処理(日付でのソートやパース)がしづらい上に、人の目にもあまり見やすいフォーマットとはいえないと思っています。

なので自宅のサーバーでは、

  • 日付は ISO8601 にする
    • sortコマンドとかで簡単にそぉーっとソートできるようになる
  • 日付、レスポンスコード、所要時間とか固定長的なフィールドは左に寄せる
  • URLとかUAとか可変長で長いのは右に寄せる
    • リクエスト(%r)も右に寄せた方ががいいような気がしてきた。。。
  • 数値だけだとわかりづらいのでなんとなくわかるようにフィールド名も添える
    • フィールド名を長くするとわかりやすくなる反面、ログサイズが大きくなるので注意

という観点で次のようなログフォーマットにしています、

# Apache
LogFormat "%{%Y-%m-%d %H:%M:%S}t %h %u \"%r\" %>s pid=%P c=%X k=%k b=%b t=%D \"%{Referer}i\" \"%{User-Agent}i\""  oreno
# Nginx
log_format oreno  '$time_iso8601 $remote_addr $remote_user '
                  '"$request" $status '
                  '$request_length $body_bytes_sent $request_time '
                  '- $http_host '
                  '"$http_referer" "$http_user_agent"';
# BEFORE
192.168.0.1 - - [14/Dec/2012:16:35:24 +0900] "GET /ouffu/hidek.png HTTP/1.1" 200 5105 "http://d.hatena.ne.jp/yappo/20110517/1305612204" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17"
↓
# AFTER
2012-12-14 09:38:31 192.168.0.1 - "GET /ouffu/hidek.png HTTP/1.1" 200 pid=10183 c=+ k=0 b=5105 t=23288 "http://d.hatena.ne.jp/yappo/20110517/1305612204" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17"

というお話でした。