本記事では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 14 | 14世代分のログファイルを保持。 |
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
- Nginxのログフォーマット設定と出力ログの見方を解説
- Nginxを再起動前にコマンドで文法チェックや設定誤りを確認をする方法
- [Nginx]オレオレCA認証局でSSL通信をする手順。サーバ証明書・秘密鍵・証明書署名要求の作成方法
- [Nginx]オレオレCA認証局を利用したクライアント証明書通信をする手順
- Nginxのログ一覧・ログ設定・ログ出力先の確認・設定方法を解説
- NginxでBasic認証の設定する方法
- Nginxの設定ファイル(.conf)の書き方と設定方法
- Nginxでリバースプロキシの構築・設定方法
- NginxでSSL設定してHTTPS通信をする手順
- NginxのVirtualhostを使って1つのサーバーでサブドメインを公開する手順
- [Nginx] サブディレクトリのアクセスを異なるWebサーバーにアクセスを振り分ける方法