優れたソフトウェアと実用的なチュートリアル
Nginxログとは
Nginxは、オープンソースの高性能HTTPおよびリバースプロキシサーバーであり、インターネット上の大規模サイトの負荷処理を担っています。NGINXウェブサーバーを管理する際に最も頻繁に行うタスクの一つは、ログファイルの確認です。
ログは詳細なデバッグ情報を提供するため、ログの構成方法と読み取り方法を知っておくと、サーバーまたはアプリケーションの問題をトラブルシューティングするときに非常に役立ちます。
Nginx は、イベントを 2 種類のログに記録します。アクセス ログとエラー ログ。アクセス ログにはクライアント要求に関する情報が記録され、エラー ログにはサーバーとアプリケーションの問題に関する情報が記録されます。
アクセスログの設定
クライアントからのリクエストが処理されるたびに、Nginx はアクセスログに新しいイベントを生成します。各イベントレコードにはタイムスタンプが含まれ、クライアントとリクエストされたリソースに関するさまざまな情報が含まれます。アクセスログには、訪問者の所在地、アクセスしたページ、そのページでの滞在時間などが表示されます。
log_format ディレクティブを使用すると、ログに記録されるメッセージの形式を定義できます。access_log ディレクティブは、ログファイルの場所と使用する形式を設定し、ログを有効にします。
access_log ディレクティブの最も基本的な構文は次のとおりです。
access_log ログファイル ログフォーマット;
ここで、log_file はログ ファイルへのフル パスであり、log_format はログ ファイルで使用される形式です。
アクセス ログは、http、server、または location ディレクティブ ブロックで有効にできます。
デフォルトでは、アクセス ログはメインの Nginx 構成ファイルの http ディレクティブによってグローバルに有効になっています。
/etc/nginx/nginx.conf
http {
...
アクセスログ /var/log/nginx/access.log;
...
}
保守性を高めるため、各サーバーブロックごとに個別のアクセスログファイルを設定することを推奨します。サーバーディレクティブで設定された access_log ディレクティブは、上位レベルの http ディレクティブで設定された access_log ディレクティブをオーバーライドします。
/etc/nginx/conf.d/domain.com.conf
http {
...
アクセスログ /var/log/nginx/access.log;
...
サーバー {
サーバー名 ドメイン.com
アクセスログ /var/log/nginx/domain.access.log;
...
}
}
ログ形式が指定されていない場合、Nginx は次のように事前定義された結合形式を使用します。
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$リクエスト" $ステータス $送信済みbodyバイト'
'"$http_referer" "$http_user_agent"';
ログ出力形式を変更するには、デフォルト設定を上書きするか、新しい形式を定義します。例えば、表示されるX-Forwarded-Forヘッダーの値に基づいて、combined形式を拡張したmainという新しいログ出力形式を定義するには、httpまたはserverディレクティブに次の定義を追加します。
log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
新しい形式を使用するには、次のように、ログ ファイルの後にその名前を指定します。
access_log /var/log/nginx/access.log カスタム;
アクセスログは非常に有用な情報を提供しますが、ディスク容量を消費し、サーバーのパフォーマンスに影響を与える可能性があります。サーバーのリソースが不足し、ウェブサイトのアクセスが集中している場合は、アクセスログを無効にすることをお勧めします。アクセスログを無効にするには、access_logディレクティブの値をoffに設定します。
access_log オフ;
エラーログの設定
Nginxは、アプリケーションエラーと一般的なサーバーエラーに関するメッセージをエラーログファイルに書き込みます。Webアプリケーションでエラーが発生した場合、まずエラーログからトラブルシューティングを開始してください。
error_log ディレクティブは、エラーログの保存場所と重大度レベルを設定し、有効化します。以下の形式で、http、server、または location ブロックで設定できます。
エラーログ ログファイル ログレベル
log_levelパラメータはログレベルを設定します。レベルは、重大度の高い順に低レベルから高レベルへと並べられています。
- debug - デバッグ メッセージ。
- info - 情報メッセージ。
- 通知 - お知らせ。
- 警告 - 警告。
- エラー - リクエストの処理中にエラーが発生しました。
- crit - 重大な問題。すぐに対処する必要があります。
- 警告 - 警告。直ちに対処する必要があります。
- emerg - 緊急事態。システムは使用できない状態です。
各ログレベルには上位レベルが含まれます。例えば、ログレベルをwarnに設定すると、Nginxはerror、crit、alert、emergのメッセージもログに記録します。
log_level パラメータが指定されていない場合、デフォルトはエラーになります。
デフォルトでは、error_log ディレクティブはメインの nginx.conf ファイル内の http ディレクティブで定義されています。
/etc/nginx/nginx.conf
http {
...
error_log /var/log/nginx/error.log;
...
}
アクセス ログと同様に、各サーバー ブロックごとに個別のエラー ログ ファイルを設定することをお勧めします。これにより、上位レベルから継承された設定が上書きされます。
たとえば、domain.com のエラー ログを警告に設定するには、次のようにします。
http {
...
error_log /var/log/nginx/error.log;
...
サーバー {
サーバー名 ドメイン.com
error_log /var/log/nginx/domain.error.log 警告;
...
}
}
構成ファイルを変更するたびに、変更を有効にするために Nginx サービスを再起動する必要があります。