株式会社博展 - 東芝実績動画
目次:
Nginxは、インターネット上の最大規模のサイトのいくつかの負荷を処理するオープンソースの高性能HTTPおよびリバースプロキシサーバーです。 NGINX Webサーバーを管理する際に実行する最も頻繁なタスクの1つは、ログファイルの確認です。
サーバーまたはアプリケーションの問題をトラブルシューティングする場合、詳細なデバッグ情報が提供されるため、ログの構成および読み取り方法を知ることは非常に役立ちます。
Nginxは、イベントの記録を2種類のログに書き込みます。アクセスログとエラーログです。 アクセスログはクライアント要求に関する情報を書き込み、エラーログはサーバーとアプリケーションの問題に関する情報を書き込みます。
この記事では、Nginxのアクセスログとエラーログを構成して読み取る方法の概要を説明します。
アクセスログの構成
クライアントリクエストが処理されるたびに、Nginxはアクセスログに新しいイベントを生成します。 各イベントレコードにはタイムスタンプが含まれ、クライアントと要求されたリソースに関するさまざまな情報が含まれます。 アクセスログは、訪問者の場所、訪問したページ、ページに費やした時間などを表示できます。
log_format
ディレクティブを使用すると、ログに記録されるメッセージの形式を定義できます。
access_log
ディレクティブは、ログファイルの場所と使用される形式を有効にして設定します。
access_log
ディレクティブの最も基本的な構文は次のとおりです。
access_log log_file log_format;
ここで、
log_file
はログファイルへのフルパスであり、
log_format
はログファイルで使用される形式です。
アクセスログは、
http
、
server
、または
location
ディレクティブブロックで有効にできます。
デフォルトでは、アクセスログはメインのNginx設定ファイル内の
http
ディレクティブでグローバルに有効化されています。
http {… access_log /var/log/nginx/access.log;… }
保守性を高めるために、サーバーブロックごとに個別のアクセスログファイルを設定することをお勧めします。
server
ディレクティブで設定された
access_log
ディレクティブは、
http
(上位レベル)ディレクティブで設定されたものをオーバーライドします。
http {… access_log /var/log/nginx/access.log;… server { server_name domain.com access_log /var/log/nginx/domain.access.log;… } }
ログ形式が指定されていない場合、Nginxは次のような定義済みの組み合わせ形式を使用します。
log_format combined '$remote_addr - $remote_user ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
ロギング形式を変更するには、デフォルト設定を上書きするか、新しい設定を定義します。 たとえば、
X-Forwarded-For
ヘッダーを示す値で結合形式を拡張するmainという名前の新しいロギング形式を定義するには、
http
または
server
ディレクティブに次の定義を追加します。
log_format custom '$remote_addr - $remote_user "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
新しい形式を使用するには、次のようにログファイルの後に名前を指定します。
access_log /var/log/nginx/access.log custom;
アクセスログは非常に有用な情報を提供します。 ディスク容量を消費し、サーバーのパフォーマンスに影響を与える可能性があります。 サーバーのリソースが少なく、Webサイトが混雑している場合は、アクセスログを無効にすることをお勧めします。 これを行うには、
access_log
ディレクティブの値を
off
に設定します。
エラーログの設定
Nginxは、アプリケーションおよび一般的なサーバーエラーに関するメッセージをエラーログファイルに書き込みます。 Webアプリケーションでエラーが発生している場合、エラーログは問題のトラブルシューティングを開始する最初の場所です。
error_log
ディレクティブは、エラーログの場所と重大度レベルを有効にして設定します。 次の形式を取り、
http
、
server
、または
location
ブロック内で設定できます。
error_log log_file log_level
log_level
パラメーターは、ロギングのレベルを設定します。 以下は、重大度(低から高)ごとにリストされたレベルです。
-
debug
デバッグメッセージ。info
情報メッセージ。notice
-通知。warn
-警告。error
-要求の処理中にerror
。crit
重大な問題。 プロンプトアクションが必要です。alert
-アラート。 すぐに対処する必要があります。emerg
緊急事態。 システムは使用できない状態です。
各ログレベルには、より高いレベルが含まれます。 たとえば、ログレベルを
warn
設定すると、Nginxは
error
、
crit
、
alert
、および
emerg
メッセージもログに記録します。
log_level
パラメーターが指定されていない場合、デフォルトで
error
になり
error
。
デフォルトでは、
error_log
ディレクティブはメインのnginx.confファイル内の
http
ディレクティブで定義されています。
http {… error_log /var/log/nginx/error.log;… }
アクセスログと同様に、各サーバーブロックに個別のエラーログファイルを設定することをお勧めします。これにより、上位レベルから継承された設定が上書きされます。
たとえば、domain.comのエラーログを
warn
に設定するには、次を使用します。
http {… error_log /var/log/nginx/error.log;… server { server_name domain.com error_log /var/log/nginx/domain.error.log warn;… } }
構成ファイルを変更するたびに、変更を有効にするためにNginxサービスを再起動する必要があります。
ログファイルの場所
Ubuntu、CentOS、DebianなどのほとんどのLinuxディストリビューションでは、デフォルトでアクセスログとエラーログは
/var/log/nginx
ディレクトリにあります。
Nginxログファイルの読み取りと理解
cat
、
less
、
grep
、
cut
、
awk
などの標準コマンドを使用して、ログファイルを開いて解析できます。
デフォルトのNginxログ形式を使用するアクセスログファイルのレコードの例を次に示します。
192.168.33.1 - - "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
レコードの各フィールドの意味を分解してみましょう。
-
$remote_addr
-192.168.33.1
要求を行っているクライアントのIPアドレス。$remote_user
HTTP認証済みユーザー。 ユーザー名が設定されていない場合、このフィールドには-
ます。 -"$request"
-"GET /
-要求タイプ、パス、およびプロトコル。$status
-200
サーバーの応答コード。$body_bytes_sent
-$body_bytes_sent
バイト単位のサーバー応答のサイズ。"$http_referer"
-"-"
-紹介のURL。"$http_user_agent"
Mozilla/5.0…
"$http_user_agent"
クライアント(Webブラウザー)のユーザーエージェント。
tail
コマンドを使用して、ログファイルをリアルタイムで監視します。
結論
ログファイルは、サーバーの問題および訪問者がWebサイトとどのように対話するかに関する有用な情報を提供します。
Nginxでは、必要に応じてアクセスログとエラーログを構成できます。
nginx