Nginx でログをカスタマイズし、ログ バッファを有効にする方法

WBOY
リリース: 2023-05-14 13:07:33
転載
1078 人が閲覧しました

アクセス ログ

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

get http/1.1 http / 200 0.001 370 usa mi
"ann arbor" - 200 0.001 "-" "curl/7.47.0"

必要な場合このログ設定を使用します。access_log ディレクティブと組み合わせて使用​​する必要があります。access_log ディレクティブは、パラメータとして使用されるログ ディレクトリと設定名を受け取ります:

server {
  access_log /var/log/nginx/access.log geoproxy;
  ...
}
ログイン後にコピー

access_log は複数のコンテキストで使用でき、各コンテキストは独自のログ ディレクトリとログ記録形式を定義します。

結論: nginx のログ モジュールを使用すると、さまざまなログ ファイルを表示するために、さまざまなシナリオに合わせてログ形式を構成できます。

実際のアプリケーションでは、コンテキストごとに異なるログを構成すると非常に便利です。記録されるログの内容は、単純な情報でも、必要なすべての情報を詳細に記録することもできます。それだけでなく、ログ コンテンツはテキスト

をサポートするだけでなく、json 形式や xml 形式でデータを記録することもできます。実際、nginx ログは、サーバー トラフィック、クライアントの使用状況、クライアントの生成元などの情報を理解するのに役立ちます。さらに、アクセス ログは、上流のサーバーまたは特定の URI に関連する応答や問題を特定するのにも役立ちます。アクセス ログは、トラフィックの分析や実際のユーザー操作シナリオのシミュレーションに使用できるため、テストにも役立ちます。ログは、トラブルシューティング、デバッグ、アプリケーション分析、ビジネス調整に不可欠です。

エラー ログ

nginx エラー ログを正確に見つけるには、組み込みの error_log ディレクティブを使用してエラー ログ ディレクトリとレベルを定義します。エラー ログを記録します。設定は次のとおりです :

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート