Ngnix 日誌管理及 Shell 實現定時完成日誌切割

__kelly_的部落格發表於2015-03-04

一、日誌管理

先來看看ngnix的配置檔案的server段

接下來我們解釋一下預設格式的具體意思

#log_format main ‘$remote_addr(遠端IP) – $remote_user(遠端使用者) [$time_local](訪問時間) “$request”(請求方式) ‘
# ‘$status(狀態302、404、401、403等) $body_bytes_sent(請求體 body 長度等) “$http_referer”(referer來源資訊) ‘
# ‘”$http_user_agent(使用者代理)” “$http_x_forwarded_for(被轉發的請求的原始IP)”‘;

注:(1)http_x_forwarded_for:在經過代理時,代理把你的本來IP加在此頭資訊中,傳輸你的原始IP

  (2)日誌的格式我們也可以自己定義

我們具體看一下日誌記錄的資訊

Ngnix允許針對不同的server做不同的log,接下來我們自己做一個

儲存並退出,然後重新載入一次配置檔案

因為我們沒開啟日誌格式,進入配置檔案開啟即可

接下來過載配置檔案成功,然後訪問下伺服器,再檢視log目錄下是否有kelly.log日誌檔案,然後在more kelly.log看是否有日誌記錄

二、用定時任務完成日誌切割備份

思路:用shell寫一個指令碼,每到00:00:01時就把昨天的日誌按日期時間格式重新命名,放在相應的目錄下,再用USR1資訊號控制ngnix重新生成新的日誌檔案。

接下來我們在/usr/local/ngnix/data目錄下做實驗,建立一個shell指令碼,檔名為runlog.sh

我以下圖對此指令碼做詳細解釋

我附上該shell指令碼原始碼,方便讀者做測試:

#!/bin/bash
base_path='/usr/local/nginx/logs'
log_path=$(date -d yesterday +"%Y%m")
day=$(date -d yesterday +"%d")
mkdir -p $base_path/$log_path
mv $base_path/access.log $base_path/$log_path/access_$day.log
#echo $base_path/$log_path/access_$day.log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

接下來做個定時任務,按指定時間自動執行此指令碼(這裡我是做測試,所以我每分鐘執行一下這個指令碼,方便看效果)

然後檢視最終效果

此時,我們已經完成了用定時任務執行指令碼,然後做日誌切割備份。

相關文章