本記事では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がカンマ区切りで記録されることがある。 |