アクセス ログ
nginx は、リクエストを処理した直後に、クライアント リクエストに関する情報をアクセス ログに書き込みます。デフォルトでは、アクセス ログは logs/access.log にあり、情報は事前定義された組み合わせ形式でログに書き込まれます。
アクセス情報を正確に記録したい場合は、以下に示すように、より完全なアクセス ログ形式をカスタマイズする必要があります。
http { log_format geoproxy '[$time_local] $remote_addr ' '$realip_remote_addr $remote_user ' '$request_method $server_protocol ' '$scheme $server_name $uri $status ' '$request_time $body_bytes_sent ' '$geoip_city_country_code3 $geoip_region ' '"$geoip_city" $http_x_forwarded_for ' '$upstream_status $upstream_response_time ' '"$http_referer" "$http_user_agent"'; ... }
このログ構成は geoproxy という名前であり、多くの nginx 変数を使用して、 nginx のログ機能をデモンストレーションします。構成オプションの各変数の具体的な意味の詳細な説明:
ユーザーがリクエストを開始すると、サーバー時間 $time_local が記録され、$remote_user 値は基本認証によるユーザー名になります。
は nginx に使用され、オープン接続の IP アドレスと geoip_proxy および realip_header 命令のクライアント IP アドレスを処理します; そして、http リクエスト メソッド $request_method、プロトコル $server_protocol および http メソッド $ を記録します。スキーム: http または https; もちろん、サーバー名 $server_name、要求された URI、および応答ステータス コードもあります; 基本情報に加えて、いくつかの情報もあります。統計結果データ: リクエスト処理のミリ秒レベルの時間 $request_time、サーバー応答のデータ ブロック サイズ $body_bytes_sent; さらに、クライアントの国 $geoip_city_country_code3、地域 $geoip_region および都市情報 $ geoip_city も記録されます。変数 $http_x_forwarded_for は、他のプロキシ サーバーによって開始されたリクエストを記録するために使用されます。リクエストの x-forwarded-for ヘッダー メッセージ。上流モジュールの一部のデータも記録されます。ログに記録される: プロキシサーバーの応答ステータスコード $upstream_status、接続の確立、および上流サーバーから受信した最後の応答本文 バイト時間 $upstream_response_time 、上流サーバーへの接続を確立するまでの時間 $upstream_connect_time 、接続を確立し、上流の $upstream_header_time から応答ヘッダーの最初のバイトを取得します。 リクエスト ソース $http_referer とユーザー エージェント $http_user_agent もログに記録できます; nginx のログ機能は非常に強力かつ柔軟です。ログ形式 log_format ディレクティブは、http ブロックレベルのディレクティブ内でのみ機能し、すべての時間値はミリ秒単位であり、ミリ秒の解像度で測定されます。 。 この形式のログ構成では、次のタイプのログが生成されます:[25/feb/2019:16:20:42 0000] 10.0.1.16 192.168.0.122 derek必要な場合このログ設定を使用します。access_log ディレクティブと組み合わせて使用する必要があります。access_log ディレクティブは、パラメータとして使用されるログ ディレクトリと設定名を受け取ります:get http/1.1 http / 200 0.001 370 usa mi
"ann arbor" - 200 0.001 "-" "curl/7.47.0"
server { access_log /var/log/nginx/access.log geoproxy; ... }access_log は複数のコンテキストで使用でき、各コンテキストは独自のログ ディレクトリとログ記録形式を定義します。 結論: nginx のログ モジュールを使用すると、さまざまなログ ファイルを表示するために、さまざまなシナリオに合わせてログ形式を構成できます。 実際のアプリケーションでは、コンテキストごとに異なるログを構成すると非常に便利です。記録されるログの内容は、単純な情報でも、必要なすべての情報を詳細に記録することもできます。それだけでなく、ログ コンテンツはテキスト をサポートするだけでなく、json 形式や xml 形式でデータを記録することもできます。実際、nginx ログは、サーバー トラフィック、クライアントの使用状況、クライアントの生成元などの情報を理解するのに役立ちます。さらに、アクセス ログは、上流のサーバーまたは特定の URI に関連する応答や問題を特定するのにも役立ちます。アクセス ログは、トラフィックの分析や実際のユーザー操作シナリオのシミュレーションに使用できるため、テストにも役立ちます。ログは、トラブルシューティング、デバッグ、アプリケーション分析、ビジネス調整に不可欠です。
エラー ログ
error_log /var/log/nginx/error.log warn;error_log ディレクティブの設定には、必須のログ ディレクトリとオプションのエラー レベル オプションが必要です。 if ディレクティブを除き、error_log ディレクティブはすべてのコンテキストで使用できます。エラー ログ レベルには、debug、info、notice、warn、error、crit、alert、および emerg が含まれます。指定されたログ レベルの順序は、最小のレコードから最も厳密なレコードへのログ レベルの順序です。 nginx サーバーをコンパイルするときは、デバッグ ログ # を --with-debug フラグとともに使用する必要があることに注意してください。 サーバー構成にエラーがある場合は、まずエラー ログを確認して問題を特定する必要があります。エラー ログ # は、アプリケーション サーバー (fastcgi サービスなど) を見つけるのに役立つツールでもあります。エラー ログを通じて、ワーカー プロセスの接続エラー、メモリ割り当て、クライアント IP、およびアプリケーション サーバーの問題をデバッグできます。エラー ログ形式はカスタム ログ形式をサポートしていませんが、現在の時刻、ログ レベル、特定の情報などのデータも記録されます。
注意:错误日志的默认设置适用于全局。要覆盖它,请将 error_log 指令放在 main (顶级)配置上下文中。 error_log 在开源 nginx 1.5.2 版中添加了在同一配置级别指定多个指令的功能。
通过 syslog 将日志发送到统一服务器
既然不再需要将日志写到磁盘的某个目录,而是发送到统一的日志服务器,则将原有的目录部分替换为服务器 ip 即可,配置如下:
error_log syslog:server=10.0.1.42 debug; access_log syslog:server=10.0.1.42,tag=nginx,severity=info geoproxy; #error_log server=unix:/var/log/nginx.sock debug; #access_log syslog:server=[2001:db8::1]:1234,facility=local7,tag=nginx,severity=info;
error_log 和 access_log 指令的 syslog 参数紧跟冒号 : 和一些参数选项。包括:必选的 server 标记表示需要连接的 ip、dns 名称或 unix 套接字;
可以使用如上注释的高端玩。
可选参数有 facility 、 severity 、 tag :
server 参数接收带端口的 ip 地址或 dns 名称;默认是 udp 514 端口。
facility 参数设置 syslog 的类型 facility ,值是 syslog rfc 标准定义的 23 个值中一个,默认值为 local7 。其他可能的值是: auth , authpriv , daemon , cron , ftp , lpr , kern , mail , news , syslog , user , uucp , local0 ... local7
tag 参数表示日志文件中显示时候的标题,默认值是 nginx 。
severity 设置消息严重程度,默认是 info 级别日志。
日志缓冲区
当系统处于负载状态时,启用日志缓冲区以降低 nginx worker 进程阻塞。大量的磁盘读写和 cpu 资源使用对于服务器资源也是一种巨大消耗。将日志数据缓冲到内存中可能是很小的一个优化手段, buffer 参数意义是缓冲区的大小,功能是当缓冲区已经写满时,日志会被写入文件中; flush 参数意义是缓冲区内日志在缓冲区内存中保存的最长时间,功能即当缓存中的日志超过最大缓存时间,也会被写入到文件中, 不足的地方即写入到日志文件的日志有些许延迟,即时调试中应当关闭日志缓冲。 。配置如下:
http { access_log /var/log/nginx/access.log main buffer=32k flush=1m; }
以上がNginx でログをカスタマイズし、ログ バッファを有効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。