首頁 >運維 >Nginx >Nginx如何自訂記錄及啟用日誌緩衝區

Nginx如何自訂記錄及啟用日誌緩衝區

WBOY
WBOY轉載
2023-05-14 13:07:331082瀏覽

存取日誌

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處理 geoip_proxy 和 realip_header 指令的開啟連線的ip 位址與用戶端ip 位址;

之後記錄http 要求方法 $request_method 、協定 $server_protocol 和http 方法 $scheme:http 或#httpshttps ;# #https ;# 當然還有伺服器名稱 $server_name 、請求的uri 和回應狀態碼;

除基本資訊外,還有一些統計的結果資料:包含請求處理的毫秒時間 $request_time 、伺服器回應的資料區塊大小 $body_bytes_sent ;

此外,客戶端所在國家 $geoip_city_country_code3 、地區 $geoip_region 和城市資訊 $geoip_city 也被記錄在內;

# $http_x_forwarded_for 是用來記錄它代理伺服器來記錄

 $http_x_forwarded_for 是由它發起它代理伺服器來記錄

 $http_x_forwarded_for 是由它發起它代理伺服器來記錄

 $http_x_forwarded_for 是由它發起它代理伺服器來記錄

 $http_x_forwarded_for 來記錄。的請求的 x-forwarded-for 頭訊息;

upstream 模組中一些資料也被記錄到日誌中:被代理伺服器的回應狀態碼 $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。給出的日誌

等級順序就是記錄最小到最嚴謹的日誌等級順序。要注意的是 debug 日誌

需要在編譯 nginx 伺服器時,帶上 --with-debug 標識才能使用。

當伺服器配置出錯時,首先需要查看錯誤日誌以定位問題。錯誤日誌

###也是定位應用程式伺服器(如 fastcgi 服務)的利器。透過錯誤日誌,我們可以偵錯 worker 進程連線錯誤、記憶體分配、客戶端 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中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除