1. 程式人生 > >Nginx日誌管理及切割

Nginx日誌管理及切割

1 日誌管理

1.1 Nginx日誌描述

通過訪問日誌,你可以得到使用者地域來源、跳轉來源、使用終端、某個URL訪問量等相關資訊;通過錯誤日誌,你可以得到系統某個服務或server的效能瓶頸等。因此,將日誌好好利用,你可以得到很多有價值的資訊。

1.2 Nginx日誌格式

開啟nginx.conf配置檔案:vim /usr/local/nginx/conf/nginx.conf

日誌部分內容:

#access_log  logs/access.log  main;

日誌生成的到Nginx根目錄logs/access.log檔案,預設使用“main”日誌格式,也可以自定義格式。

預設“main”日誌格式:

log_format main  '$remote_addr $http_x_forwarded_for [$time_local]'


' $host "$request_uri" $status'

' "$http_referer" "$http_user_agent"';

引數明細表:

$remote_addr

客戶端的ip地址(代理伺服器,顯示代理服務ip)

$remote_user

用於記錄遠端客戶端的使用者名稱稱(一般為“-”)

$time_local

用於記錄訪問時間和時區

$request

用於記錄請求的url以及請求方法

$status

響應狀態碼,例如:200成功、404頁面找不到等。

$body_bytes_sent

給客戶端傳送的檔案主體內容位元組數

$http_user_agent

使用者所使用的代理(一般為瀏覽器)

$http_x_forwarded_for

可以記錄客戶端IP,通過代理伺服器來記錄客戶端的ip地址

$http_referer

可以記錄使用者是從哪個連結訪問過來的

1.3 Nginx自定義日誌

開啟nginx.conf配置檔案去掉 log_format main 前面的#

在server 節點裡面 新增日誌

server{

access_log  /data/nginx/logs/aa.access.log  main;

/data/nginx/logs/aa.error.log  info;

    location {

   }

}

配置日誌全路徑。

1.4 重新讀取載入Nginx配置檔案:

執行命令:nginx-s reload  

日誌就會輸出到指定目錄指定檔案中

1.5 Nginx日誌分隔

nginx的日誌檔案沒有rotate功能。編寫每天生成一個日誌,我們可以寫一個nginx日誌切割指令碼來自動切割日誌檔案。

第一步就是重新命名日誌檔案,不用擔心重新命名後nginx找不到日誌檔案而丟失日誌。在你未重新開啟原名字的日誌檔案前,nginx還是會向你重新命名的檔案寫日誌,Linux是靠檔案描述符而不是檔名定位檔案。

第二步向nginx主程序傳送USR1訊號。nginx主程序接到訊號後會從配置檔案中讀取日誌檔名稱,重新開啟日誌檔案(以配置檔案中的日誌名稱命名),並以工作程序的使用者作為日誌檔案的所有者。重新開啟日誌檔案後,nginx主程序會關閉重名的日誌檔案並通知工作程序使用新開啟的日誌檔案。工作程序立刻開啟新的日誌檔案並關閉重名名的日誌檔案。然後你就可以處理舊的日誌檔案了。[或者重啟nginx服務]。

nginx日誌按每分鐘自動切割指令碼如下:

新建shell指令碼:vi  /usr/local/software/nginx/cut_nginx_log.sh

 #!/bin/bash
 #設定日誌檔案存放目錄

  LOG_HOME="/usr/local/software/nginx/logs/"

 log_file_commaccess=aa.access.log;

 log_file_commerror=aa.error.log;

pid=/usr/local/software/nginx/logs/nginx.pid

yestime=`date -d '-1 day' +%Y%m%d`

 #備分檔名稱

 mv ${LOG_HOME}/${log_file_commaccess}   ${LOG_HOME}/${yestime}.${log_file_commaccess}

mv ${LOG_HOME}/${log_file_commerror}   ${LOG_HOME}/${yestime}.${log_file_commerror}

        #向nginx主程序發訊號重新開啟日誌 

        kill -USR1 `cat $pid`

配置crontab 定時,每天0點0分執行,按天儲存

#設定日誌檔案存放目錄crontab -e

0 0 * * *  sh /usr/local/software/nginx/cut_nginx_log.sh