Nginxアクセスログ:各フィールドの意味と分析方法

Web2026-09-22TryQuickToolBox

Nginxアクセスログは、Webサーバーが処理したすべてのリクエストを記録します。404エラーのデバッグ、遅いエンドポイントの追跡、不審なトラフィックの調査など、最初に確認すべき場所です。しかし、多くの開発者は各フィールドを十分に理解しないまま生のログ行を流し読みしています。このガイドでは、Nginxのデフォルトログフォーマットを分解し、カスタマイズ方法を示し、標準的なコマンドラインツールを使った実践的な分析テクニックを解説します。

Nginxアクセスログのデフォルトフォーマット

Nginxは標準でcombinedログフォーマットを使用しており、次のようになります:

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

典型的なログ行:

192.0.2.1 - - [10/Oct/2023:13:55:36 +0000] "GET /api/users HTTP/1.1" 200 1234 "https://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"

フィールドごとの説明

フィールド変数説明
リモートアドレス$remote_addrリクエストを行ったクライアントのIPアドレス。
リモートユーザー$remote_userHTTP認証が使用されている場合のユーザー名。それ以外は-。
ローカル時刻$time_local[day/month/year:hour:minute:second zone]形式のサーバーローカル時刻。
リクエスト$request完全なリクエスト行:メソッド、パス、HTTPプロトコル。
ステータス$statusHTTPレスポンスステータスコード(例:200、404、500)。
送信ボディバイト数$body_bytes_sentヘッダーを除くレスポンスボディのサイズ(バイト単位)。
リファラー$http_refererリクエストのリンク元ページ(クライアントから提供された場合)。
ユーザーエージェント$http_user_agentクライアントソフトウェアの文字列(ブラウザ、ボット、ツール)。

ログフォーマットのカスタマイズ

リクエスト時間、アップストリーム応答時間、gzip圧縮率など、追加の詳細を取得するために独自のフォーマットを定義できます。httpブロックにlog_formatディレクティブを追加し、access_logで参照します。

http {
    log_format detailed '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" '
                        'rt=$request_time uct="$upstream_connect_time" '
                        'uht="$upstream_header_time" urt="$upstream_response_time"';

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

よく使われる追加変数:

コマンドラインツールでNginxログを分析する

インサイトを抽出するために高価なソフトウェアは必要ありません。grep、awk、sort、uniqなどの標準的なUnixツールは、ほとんどのタスクに十分な威力を発揮します。

1. 最も頻繁なIPアドレスを特定する

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

これはヘビーヒッターや潜在的なDDoS攻撃元の特定に役立ちます。

2. 最もリクエストされたURLを特定する

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

人気のコンテンツを理解したり、異常なパターンを発見するのに便利です。

3. HTTPステータスコードを集計する

awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

404や500がどれくらい発生しているかを素早く確認できます。

4. 応答時間が遅いリクエストを特定する

ログフォーマットに$request_timeを追加していれば、遅いリクエストをフィルタリングできます:

awk '{ if ($NF > 1) print }' /var/log/nginx/access.log

しきい値(ここでは1秒)は必要に応じて調整してください。

5. 不審なユーザーエージェントを検出する

awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

既知の悪質なボットや異常なクライアントを探します。

実践的なユースケース

ログパーサーによる分析の自動化

コマンドラインのワンライナーはアドホックなクエリには有効ですが、定期的なレポートには専用ツールが適しています。GoAccessやAWStatsなどのオープンソースのログアナライザーを使用したり、カスタムスクリプトを構築したりできます。何もインストールせずにブラウザベースで素早く解析したい場合は、Nginx Log Analyzerにログ行を貼り付けるだけで、ステータスコード、トップIP、リクエストパスの即時サマリーが得られます。

ログ管理のベストプラクティス

FAQ

Nginxのアクセスログとエラーログの違いは何ですか?

アクセスログは、クライアントIP、リクエストメソッド、ステータスコード、ユーザーエージェントなど、Nginxが処理したすべてのリクエストを記録します。エラーログは、接続失敗、設定エラー、アップストリームのタイムアウトなど、サーバー問題に関する診断メッセージを記録します。どちらも異なるトラブルシューティングシナリオに不可欠です。

Nginxがロードバランサーの背後にある場合、実際のクライアントIPを確認するにはどうすればよいですか?

Nginxがプロキシやロードバランサーの背後にある場合、$remote_addrはバランサーのIPを示します。元のクライアントIPをログに記録するには、real_ipモジュールを設定してバランサーのIPを信頼し、ログフォーマットで$http_x_forwarded_forまたは$realip_remote_addrを使用します。

ソフトウェアをインストールせずにNginxログを分析できますか?

はい。ターミナルでgrep、awk、sortなどの標準的なUnixコマンドを直接使用できます。グラフィカルなブラウザベースのアプローチには、Nginx Log Analyzerのようなオンラインツールが、インストール不要で素早いインサイトを提供します。

ログを詳しく分析する準備はできましたか?Nginx Log Analyzerでアクセスログを数秒で解析・可視化しましょう。セットアップは不要です。