Nginx實戰(三) 日誌配置與切割
Nginx實戰系列目錄
- Nginx實戰(一) 虛擬主機
- Nginx實戰(二) URL重寫
- Nginx實戰(三) 日誌配置與切割
- Nginx實戰(四) 限速功能
- Nginx實戰(五) 反向代理
- Nginx實戰(六) 引數優化
訪問日誌主要記錄客戶端訪問Nginx的每一個請求,格式可以自定義。通過訪問日誌,你可以得到使用者地域來源、跳轉來源、使用終端、某個URL訪問量等相關資訊。
Nginx中訪問日誌相關指令主要有兩條,一條是log_format,用來設定日誌的格式,另外一條是access_log,用來指定日誌文職的存放路徑、格式和快取大小。兩條指令在Nginx配置檔案中的位置可以在http之間。
日誌配置
log_format
log_format用來設定日誌格式,格式如下所示
log_format name(名稱) format(格式)
在Nginx中有自己預設的日誌格式,如下內容:
#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"';
這段內容什麼意思呢?我們來理解下。
- $remote_addr:客戶端的ip地址(如果中間有代理伺服器那麼這裡顯示的ip就為代理伺服器的ip地址)
- $remote_user:用於記錄遠端客戶端的使用者名稱稱(一般為“-”)
- $time_local:用於記錄訪問時間和時區
- $request:用於記錄請求的url以及請求方法
- $status:響應狀態碼
- $body_bytes_sent:給客戶端傳送的檔案主體內容大小
- $http_referer:可以記錄使用者是從哪個連結訪問過來的
- $http_user_agent:使用者所使用的代理(一般為瀏覽器)
- $http_x_forwarded_for:可以記錄客戶端IP,通過代理伺服器來記錄客戶端的ip地址
現在,我們新增一個我們自定義日誌資訊。例如,如果我們用Nginx作為反向代理服務,就不能獲取客戶端的真實IP地址IP了,因為經過反向代理後,在客戶端和Web伺服器之間增加了中間層,因此Web伺服器無法直接拿到客戶端的IP。
log_format mylog '$remote_addr [$time_local] "$request" $status';
日誌格式允許包含的變數註釋,如下所示
$remote_addr, $http_x_forwarded_for 記錄客戶端IP地址 $remote_user 記錄客戶端使用者名稱稱 $request 記錄請求的URL和HTTP協議 $status 記錄請求狀態 $body_bytes_sent 傳送給客戶端的位元組數,不包括響應頭的大小; 該變數與Apache模組mod_log_config裡的“%B”引數相容。 $bytes_sent 傳送給客戶端的總位元組數。 $connection 連線的序列號。 $connection_requests 當前通過一個連線獲得的請求數量。 $msec 日誌寫入時間。單位為秒,精度是毫秒。 $pipe 如果請求是通過HTTP流水線(pipelined)傳送,pipe值為“p”,否則為“.”。 $http_referer 記錄從哪個頁面連結訪問過來的 $http_user_agent 記錄客戶端瀏覽器相關資訊 $request_length 請求的長度(包括請求行,請求頭和請求正文)。 $request_time 請求處理時間,單位為秒,精度毫秒; 從讀入客戶端的第一個位元組開始,直到把最後一個字元傳送給客戶端後進行日誌寫入為止。 $time_iso8601 ISO8601標準格式下的本地時間。 $time_local 通用日誌格式下的本地時間。
access_log
用log_format指令設定了日誌格式之後,需要用access_log指令指定日誌檔案存放路徑。
格式如下所示
access_log path(存放路徑) [format(自定義日誌格式名稱) [buffer=size | off]]
在Nginx中有自己預設的日誌路徑,如下內容:
#access_log logs/access.log main;
如果想關閉日誌,可以如下:
access_log off;
值得注意的是,Nginx程式設定的使用者和組必須對日誌路徑有建立檔案的許可權,否則,會報錯。
此外,對於每一條日誌記錄,都將是先開啟檔案,再寫入日誌,然後關閉。可以使用open_log_file_cache來設定日誌檔案快取(預設是off)。
日誌切割
當網站訪問量大後,日誌資料就會很多,如果全部寫到一個日誌檔案中去,檔案會變得越來越大。檔案大速度就會慢下來,比如一個檔案幾百兆。寫入日誌的時候,會影響操作速度。另外,如果我想看看訪問日誌,一個幾百兆的檔案,下載下來開啟也很慢。
為了方便對日誌進行分析計算,需要對日誌進行定時切割。定時切割的方式有按照月切割、按天切割,按小時切割等。最常用的是按天切割。
配置shell指令碼
#!/bin/bash # 設定日誌檔案存放目錄 logs_path="/var/logs/nginx/" # 設定pid檔案 pid_path="/usr/local/dev/nginx/nginx.pid" # 重新命名日誌檔案 mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log # 向nginx主程式發訊號重新開啟日誌 kill -USR1 `cat ${pid_path}`
crontab中設定定時作業
進行編輯
crontab -e
配置內容如下
0 0 * * * bash /usr/local/dev/nginx/nginx_log.sh
這樣在每天的夜晚12點就會自動建立備份檔案了。.
相關文章
- nginx日誌切割配置Nginx
- nginx切割日誌Nginx
- nginx日誌切割Nginx
- nginx1.24配置logrotate日誌切割Nginxlogrotate
- Apache 配置日誌切割Apache
- 如何定時切割nginx日誌?Nginx
- nginx自己寫日誌切割指令碼Nginx指令碼
- nginx自動切割訪問日誌Nginx
- nginx高階訪客日誌切割Nginx
- Nginx日誌配置Nginx
- [技術分享]日誌切割(按天切割日誌)
- Nginx訪問日誌、Nginx日誌切割、靜態檔案不記錄日誌和過期時間Nginx
- Go中使用Zap日誌庫與Lumberjack日誌切割Go
- Nginx日誌配置詳解Nginx
- Centos下Nginx配置WEB訪問日誌並結合shell指令碼定時切割CentOSNginxWeb指令碼
- 【shell】實現tomcat日誌切割功能Tomcat
- nginx中access日誌如何做到按時間完美切割Nginx
- 【shell】日誌切割指令碼指令碼
- linux系統伺服器,nginx日誌切割儲存教程。Linux伺服器Nginx
- Linux下玩轉nginx系列(三)---nginx日誌配置檔案說明LinuxNginx
- Spring Boot 揭祕與實戰(三) 日誌框架篇 – 如何快速整合日誌系統Spring Boot框架
- Spring Boot 揭祕與實戰(三) 日誌框架篇 - 如何快速整合日誌系統Spring Boot框架
- 【awk】按小時切割日誌
- tomcat日誌切割-logrotateTomcatlogrotate
- linux中用shell指令碼對tomcat和nginx做日誌切割Linux指令碼TomcatNginx
- Ngnix 日誌管理及 Shell 實現定時完成日誌切割
- SpringBoot 實戰 (七) | 預設日誌配置Spring Boot
- nginx1.10.3一鍵安裝/系統核心優化/配置檔案優化/https/日誌切割Nginx優化HTTP
- nginx error_log 錯誤日誌配置說明NginxError
- Flume監聽Nginx日誌流向HDFS安裝配置Nginx
- 日誌系統實戰(三)-分散式跟蹤的Net實現分散式
- 實戰Nginx與PHP(FastCGI)的安裝、配置與最佳化NginxPHPAST
- Nginx 訪問日誌實時解析 ngxtopNginx
- 【Nginx】如何配置Nginx日誌?這是最全面的一篇了!!Nginx
- Nginx日誌輪訓Nginx
- nginx日誌處理Nginx
- Apache基礎配置與日誌管理Apache
- Nginx之(三)Nginx配置Nginx