nginxのLogFormat設定の改善

nginxのLogFormat設定の改善

nginxのログを自分なりに最適化します。

デフォルト設定


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

ログには以下のように出力される


172.17.0.1 - - [01/Aug/2021:02:48:02 +0900] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.1" "-"
172.17.0.1 - - [01/Aug/2021:02:48:03 +0900] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.1" "-"
172.17.0.1 - - [01/Aug/2021:02:48:04 +0900] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.1" "-"

なんとなくは分かるが、ハイフンになっている部分や数字などが何を表しているのかは分かりづらくなっている。

改善後


    log_format  main  '"$time_local" client=$remote_addr '
                      'method=$request_method request="$request" '
                      'request_length="$request_length" '
                      'request_uri="$request_uri" '
                      'request_body="$request_body" '
                      #   If the header contains a module and you want to output it in the log
                      #   'module="$http_module" '
                      #   If the cookie contains a sessionid and you want to output it in the log
                      #   'session_id="$cookie_sessionId" '
                      'status=$status bytes_sent=$bytes_sent '
                      'body_bytes_sent=$body_bytes_sent '
                      'referer=$http_referer '
                      'user_agent="$http_user_agent" '
                      'forwarded_for="$http_x_forwarded_for" '
                      'request_time=$request_time '
                      'upstream_addr=$upstream_addr '
                      'upstream_status=$upstream_status '
                      'upstream_response_time="$upstream_response_time"ms '
                      'upstream_connect_time="$upstream_connect_time"ms '
                      'upstream_header_time="$upstream_header_time"ms ';

ログは以下のように出力される


"02/Aug/2021:01:01:01 +0900" client=172.17.0.1 method=GET request="GET / HTTP/1.1" request_length="78" request_uri="/" request_body="-" status=200 bytes_sent=850 body_bytes_sent=612 referer=- user_agent="curl/7.64.1" forwarded_for="-" request_time=0.000 upstream_addr=- upstream_status=- upstream_response_time="-"ms upstream_connect_time="-"ms upstream_header_time="-"ms 
"02/Aug/2021:01:01:03 +0900" client=172.17.0.1 method=GET request="GET / HTTP/1.1" request_length="78" request_uri="/" request_body="-" status=200 bytes_sent=850 body_bytes_sent=612 referer=- user_agent="curl/7.64.1" forwarded_for="-" request_time=0.000 upstream_addr=- upstream_status=- upstream_response_time="-"ms upstream_connect_time="-"ms upstream_header_time="-"ms 
"02/Aug/2021:01:01:03 +0900" client=172.17.0.1 method=GET request="GET / HTTP/1.1" request_length="78" request_uri="/" request_body="-" status=200 bytes_sent=850 body_bytes_sent=612 referer=- user_agent="curl/7.64.1" forwarded_for="-" request_time=0.000 upstream_addr=- upstream_status=- upstream_response_time="-"ms upstream_connect_time="-"ms upstream_header_time="-"ms

各項目に何を出力しているかを出力することで、出力値の意味がわかるようにした。
timeを出力する系の項目については単位(ミリ秒)をつけるようにした。
また、追加でupstream系の情報などを追加した。

コメントアウトの部分について

headerの任意の値を出力したい


#   If the header contains a module and you want to output it in the log
#   'module="$http_module" '

headerにある値を出力するには $http_***を使う

Cookieの任意の値を出力したい


#   If the cookie contains a sessionid and you want to output it in the log
#   'session_id="$cookie_sessionId" '

Cookieにある値を出力するには $cookie_*** を使う

参考

nginx Embedded Variablesの一覧

Nginxカテゴリの最新記事