Nginxのログフォーマット設定と出力ログの見方を解説

本記事ではNginxでのログフォーマット設定について記述します。

なお本記事では以下の環境で検証している。

Linux 環境
OS:Debian GNU/Linux 12 (bookworm)
ミドルウェア:nginx(1.25.5)

目次

ログフォーマットの設定

Nginxのログフォーマットは、log_formatディレクティブを使用して設定する。アクセスログやエラーログに記録される情報の形式をカスタマイズできる。

以下は、Nginxのログフォーマットの設定例。これをNginxの設定ファイル(通常は/etc/conf/nginx.conf)に追加することでカスタマイズ可能。またアクセスログのログフォーマットを設定している。エラーログについてもカスタマイズ可能。

http {
    log_format myformat '$remote_addr - [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log myformat;
}

以下が解説です。

  • httpブロックは、HTTPサーバーの設定する内容を記述する。
  • myformatはログフォーマットの設定名であり、自由に変更可能。
  • 各種変数については次章で詳しく解説する。

ログフォーマット解説

前章で紹介したログフォーマット設定で使用した変数の説明は以下の通り。

フォーマット説明
$remote_addrクライアントのIPアドレス
$time_localサーバーのローカルタイムでのリクエスト受信時刻
$requestリクエストの詳細(メソッド、リクエストURI、HTTPバージョン、例: GET /index.html HTTP/1.1)
$statusレスポンスのステータスコード(例: 200)
$body_bytes_sentクライアントに送信されたバイト数(ヘッダは含まない)
$http_refererリファラーヘッダ(リクエスト元のURL)
$http_user_agentユーザーエージェントヘッダ。クライアントのブラウザやデバイス情報が含まれる。
$http_x_forwarded_forクライアントの本来のIPアドレス。プロキシを経由する場合に使用される。複数のIPがカンマ区切りで記録されることがある。
ログフォーマットの解説

実際のログの抜粋と解説

nginxサーバーに対して、WebブラウザEdgeからアクセスした場合のアクセスログを抜粋したのが以下。

119.170.127.xx -  [04/Aug/2024:05:08:33 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0" "-"

各種変数に格納されている値は以下となる。

  • $remote_addr: 119.170.127.xx
  • $time_local: 04/Aug/2024:05:08:33 +0000
  • $request: GET / HTTP/1.1
  • $status: 304
  • $body_bytes_sent: 0
  • $http_referer: –
  • $http_user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0
  • $http_x_forwarded_for: –
フォーマット説明
$request_timeリクエストの処理にかかった時間(秒単位)
$upstream_response_time上流サーバからのレスポンス時間(秒単位)
$requestリクエストの詳細(メソッド、リクエストURI、HTTPバージョン、例: GET /index.html HTTP/1.1)
$schemeリクエストのスキーム(httpまたはhttps)
$server_nameリクエストが到達したサーバー名
$request_lengthリクエストの総バイト数(リクエスト行、ヘッダー、ボディを含む)
$http_x_forwarded_forクライアントの本来のIPアドレス。プロキシを経由する場合に使用される。複数のIPがカンマ区切りで記録されることがある。
その他ログフォーマットの解説
  • システム開発、アプリ開発
  • マッチングアプリ開発
  • インフラ構築支援等、なんでもご相談ください。
よかったらシェアしてね!
  • URLをコピーしました!
目次