Nginxのログ一覧・ログ設定・ログ出力先の確認・設定方法を解説

本記事ではNginxにはどのようなログがあるのか、ログの設定方法、ログの出力先について解説する。

目次

Nginxのログ一覧

Nginxのログは、アクセスログとエラーログの2種類がある。

  • アクセスログ:訪問者の情報を記録する。ログファイルの各行は1つのリクエストを表し、IPアドレス、URL、ステータスコードなどが含まれる。
  • エラーログ:サーバーのエラー情報を記録する。設定の誤りや問題を特定する際に役立つ。

Nginxでのログ設定

設定ファイルは通常、/etc/nginx/nginx.confにある。設定ファイルを変更することで、ログのフォーマットを指定することが可能。設定変更前にはバックアップを取り、構文チェックを行うようにする。設定の誤りがあるとサーバーが停止する可能性があるため注意が必要。

log_formatディレクティブを使ってログのフォーマットを定義する。例えば以下。log_format以外のディレクティブも定義可能。

log_format myformat '$remote_addr -[$time_local] '
                       '”$status $bytes_sent” '
                       '"$http_user_agent" ';
フォーマット説明
myformatログフォーマット名。他の名前も使用可能。
$remote_addrクライアントのIPアドレス
$time_localリクエストのタイムスタンプ
$statusクライアントに返されたHTTPステータスコード
$bytes_sentクライアントに送信されたバイト数
$http_user_agentリクエストに使用されたブラウザ

log_formatディレクティブの詳細についてはNgixnのログモジュールのマニュアルを参照。

上記で定義したカスタムフォーマットmyformatを適用するには、以下のように設定する。以下ではアクセスログのみ設定しているが、エラーログについてもカスタムフォーマットの設定が可能。

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

myformatを使った実際のログは以下の通り。

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" "-"

Nginxのログを扱う

Nginxのログをうまく扱うために、ログ出力先、ログのレベルと意味などの理解が重要となる。

Nginxのログ出力先

ログ出力先は/etc/nginx/nginx.confファイルで設定している。

error_log /var/log/nginx/error.log
access_log /var/log/nginx/access.log

ログの出力先を変更したい場合はnginx.confで設定しているディレクトリやファイルを変更する。

Nginxのログのレベルと意味

Nginxのログには、エラーの重大度のレベルを記録する。具体的なログレベルとその意味は以下の通り。

フォーマット説明
debugデバッグ情報を含む詳細なログを記録。
info情報メッセージを記録。デフォルトのログレベル。
notice注意が必要なイベントを記録。
warn警告メッセージを記録。
errorエラーメッセージを記録。通常のエラーの記録に使用。
crit重大なエラーメッセージを記録。
alert直ちに対応が必要なエラーメッセージを記録。
emergシステムが使用不能になるような緊急のエラーメッセージを記録。

error~emergのログレベルのログが出力されている場合、対応が必要と考えた方がよい。

例)ログレベルemergのログ出力結果

bitnami@ip-172-26-9-4:~$ cat /var/log/nginx/error.log.1
2024/08/03 13:30:59 [emerg] 23570#23570: still could not bind()
2024/08/03 13:31:16 [emerg] 23582#23582: bind() to 0.0.0.0:80 failed (98: Address already in use)

ログローテーションの基本設定

Nginxのログローテーションを設定するために、logrotateツールを使用する。以下は基本的な設定の一例。

1. ログローテーションの設定ファイルを確認

ログローテーションの設定ファイルは通常 /etc/logrotate.d/nginxとなっている。このファイルを編集してローテーション設定を行う。

2. 設定ファイル「/etc/logrotate.d/nginx」の内容例

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    create 0640 www-data adm
}

各行の意味は以下の通り。

フォーマット説明
dailyログファイルを毎日ローテーション。
missingokログファイルが存在しない場合、エラーを出さずにスキップ。
rotate 1414世代分のログファイルを保持。
compressローテーション後のログファイルをgzipで圧縮。
delaycompressローテーションされた直後のログファイルは次のローテーション時に圧縮。
create 0640 www-data adm 新しいログファイルを0640のパーミッションでwww-dataユーザーとadmグループの所有で作成。

ローテーションが行われると、access.logがaccess.log.1にリネーム、error.logがerror.log.1にリネームされる。次回のローテーション時に.gzファイルへの圧縮が行われる。今回の場合、access.log.1がaccess.log.2.gzファイルへ圧縮される。

logrotateのstatusファイルを確認してみる。

bitnami@ip-172-26-9-4:~$ sudo cat /var/lib/logrotate/status
logrotate state -- version 2
"/var/log/nginx/error.log" 2024-8-3-13:44:24
~中略~
"/var/log/nginx/access.log" 2024-8-19-0:0:1

「2024-8-3-13:44:24」「2024-8-19-0:0:1」は、logrotate がログファイルを最後にローテーションした日時を示している。

以下のようにls -lコマンドを実行することで、ログファイルがローテーションされていることを確認できる。

bitnami@ip-172-26-9-4:/var/log/nginx$ ls -l
total 540
-rw-r----- 1 www-data adm  10927 Aug 19 05:23 access.log
-rw-r----- 1 www-data adm 345000 Aug 18 23:56 access.log.1
-rw-r----- 1 www-data adm  29129 Aug  9 23:38 access.log.10.gz
-rw-r----- 1 www-data adm   3438 Aug  8 23:54 access.log.11.gz
-rw-r----- 1 www-data adm   7063 Aug  7 23:57 access.log.12.gz
-rw-r----- 1 www-data adm   5657 Aug  6 23:43 access.log.13.gz
-rw-r----- 1 www-data adm   1130 Aug  5 23:53 access.log.14.gz
-rw-r----- 1 www-data adm   8943 Aug 17 23:54 access.log.2.gz
-rw-r----- 1 www-data adm   5630 Aug 16 23:55 access.log.3.gz
-rw-r----- 1 www-data adm   5295 Aug 15 23:55 access.log.4.gz
-rw-r----- 1 www-data adm  51826 Aug 14 23:50 access.log.5.gz
-rw-r----- 1 www-data adm   4286 Aug 13 23:45 access.log.6.gz
-rw-r----- 1 www-data adm  11581 Aug 12 22:34 access.log.7.gz
-rw-r----- 1 www-data adm   6548 Aug 11 23:43 access.log.8.gz
-rw-r----- 1 www-data adm   4845 Aug 10 23:52 access.log.9.gz
-rw-r----- 1 www-data adm    176 Aug 19 05:14 error.log
-rw-r----- 1 www-data adm   4974 Aug  3 13:31 error.log.1
  • システム開発、アプリ開発
  • マッチングアプリ開発
  • インフラ構築支援等、なんでもご相談ください。
よかったらシェアしてね!
  • URLをコピーしました!
目次