2012/07/29

[nginx] アクセスログフォーマット

nginxはアクセスログとエラーログを出力してくれます。
このログの出力フォーマットのカスタマイズ方法について書きます。

nginxのログフォーマットに関する公式ドキュメントは、HttpLogModuleにあります。

コレを拙いながらも訳すと…


log_formatディレクティブは、ログのフォーマットを表現します。 フォーマットにおいて、一般的な変数と同様に、ログ出力の瞬間のみに有効となる変数も使用出来ます。
  • $body_bytes_sent, クライアントに転送したバイト数のうち、レスポンスヘッダのバイト数を引いたもの。この変数は、Apacheのmod_log_configの%Bパラメータと互換性があります(0.3.10以前のバージョンでは、$apache_bytes_sentと呼ばれていました。)。
  • $bytes_sent, クライアントに転送したバイト数です。
  • $connection, コネクション数です。
  • $msec, ログを出力した時点の時刻(マイクロ秒の精度)です。
  • $pipe, リクエストがパイプラインによるものである場合、"p"を出力します。
  • $request_length, リクエストボディの長さです。
  • $request_time, nginxがそのリクエストを処理するのにかかった時間で、ミリ秒精度を含んだ秒数です。(0.5.19以前のバージョンでは秒数のみ)
  • $status, 応答ステータスです。
  • $time_ios8601, ISO 8601フォーマットの時刻です。例. 2011-03-21T18:52:25+03:00(バージョン0.9.6で追加)
  • $time_local, ローカル時刻です。

クライアントから転送されたヘッダについては、$sent_http_content_rangeのように"sent_http_"プレフィクスがつきます。

他のモジュールが提供する変数も、ログに出力できます。例えば、upstreamのレスポンスヘッダは、"upstream_http_"プレフィクスをつけて、ログに出力できます。

以下は、"combined"と呼ばれる、予め定義されたログフォーマットです。

log_format combined 'remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';


となっています。
したがって、
log_format 名前 フォーマット;
を定義して、"フォーマット"の部分に含める変数を必要に応じて並べてあげればいいわけです。

2013/03/03追記。
日本語のnginxの本があったんですね。知りませんでした..。

0 件のコメント: