1. 程式人生 > >Nginx 日誌管理 日誌自動備份

Nginx 日誌管理 日誌自動備份

Nginx日誌管理 Nginx自動備份日誌 crontab的使用

一、Nginx日誌描述

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

二、Nginx日誌格式

1、 打開nginx.conf配置文件:

vim /usr/local/nginx/conf/nginx.conf

通過查看Nginx配置文件中的server段,可以查看到如下類似信息:

# access_log logs/host.access.log main; #這說明,該Server,它的訪問日誌的文件是 logs/host.access.log ,默認使用的格式“main”格式。

除了“main” 格式,還可以自定義其他格式。

“main”的主要格式:

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

# '$status $body_bytes_sent "$http_referer" '

# '"$http_user_agent" "$http_x_forwarded_for"';

main格式是我們定義好的一種日誌格式,並起個名字,便於引用。以上面的例子,main類型的日誌,記錄的 remote_addr .... http_x_forwarded_for 等選項。

如默認的main日誌格式,記錄以下幾項;

遠程IP-遠程用戶/用戶時間 請求方式 (如GET/POST) 請求body長度 referer來源信息

http-user-agent 用戶代理/蜘蛛 ,被轉發的請求的原始IP

http_x_forwarded_for:在經過代理時,代理把你的本來的IP加在此頭信息中,傳輸你的原始IP。

技術分享圖片


Nginx允許針對不同的Server做不同的log,(有的web服務器不支持,)

2、實際配置信息

打開conf/nginx.conf配置文件,在Server段下方添加以下信息:

access_log logs/z.com.access.log main;

技術分享圖片

軟重啟Nginx服務:/usr/local/nginx/sbin/nginx -s reload

技術分享圖片

瀏覽器訪問z.com 然後刷新網頁

查看日誌,cd /usr/local/nginx/logs/

技術分享圖片

日誌記錄信息;

技術分享圖片

三、Nginx日誌分隔

Nginx得日誌文件沒有rotate功能。編寫每天生成一個日誌,我們可以寫一個Nginx日誌分隔腳本來自動切割日誌文件。

第一步需要對日誌文件重命名,一般日誌文件的命名根據時間日期進行命名。

第二步向Nginx主進程發送USR1信號。Nginx主進程接到信號後會從配置文件中讀取日誌文件名稱,重新打開日誌文件(以配置文件中的日誌名稱命名),並以工作進程的用戶作為日誌文件的所有者。重新打開日誌文件後,Nginx主進程會關閉重名的日誌文件並通知工作進程使用新打開的日誌文件。工作進程立即打開新的日誌文件並關閉重命名的日誌文件。

1、以日期命名日誌文件名:

查看時間、日期:date命令 時間、日期格式化命令:date -d yesterday +%Y%M%d 昨天的日期

技術分享圖片

2、編寫一個shell腳本,自動切割日誌文件

創建一個data文件夾,存放日誌文件

mkdir /data

cd /data

技術分享圖片

編寫一個shell腳本,runlog.sh (知識擴展:時間格式化(date -d last-da +%Y-%m-%d %H:%M:%S))

vim runlog.sh


#!/bin/bash

LOGPATH=/usr/local/nginx/logs/z.com.access.log #指定變量,確定日誌的文件位置

BASEPATH=/data #備份日誌的位置

bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).zcom.access.log #重新定義一個變量,將需要備份的日誌文件以時間命名

mv $LOGPATH $bak #移動文件

touch $LOGPATH #重新建立一個新的空的日誌文件

kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) #發送信號


執行腳本文件 runlog.sh

技術分享圖片

知識擴展:

crontab 詳細用法 定時任務

使用crontab可以在指定的時間執行一個shell腳本或者一系列Linux命令。

往cron中添加作業,例如:crontab -e 0 5 *** /usr/bin/backup.sh # 每天早上5點運行 /usr/bin/backup.sh 腳本

crontab 文件的格式:{minute}{hour}{day-of-month}{month}{day-of-week}{full-path-to-shell-script}

# minute:區間為0-59 #hour:區間為0-23 #day-of-mouth:區間為0-31 #mouth:區間為1-12 1是1月 12是12月 。

day-of-week:區間為0-7,周日可以是0或7;

技術分享圖片

下面開始設置自動執行runlog.sh腳本文件

crontab -e (如果沒有這個文件,會自動創建)

*/1 * * * * sh /data/runlog.sh #每一分鐘執行以下shell腳本

技術分享圖片


在/data目錄下按照每個月自動創建目錄,每個月的日誌文件自動存放在相應月的目錄下:

vim /data/runlog.sh

#!/bin/bash

LOGPATH=/usr/local/nginx/logs/z.com.acces.log #設置變量,將日誌文件指向變量

BASEPATH=/data/$(date -d yesterday +%Y%m) #設置變量,設置創建文件夾的格式


mkdir -p $BASEPATH #創建文件夾,

bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).zcom.acces.log #重新定義一個變量,將需要備份的日誌文件以時間命名


mv $LOGPATH $bak #移動備份文件

touch $LOGPATH #新建一個新的空的日誌文件

kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) #發送信號


執行腳本 sh /data/runlog.sh

技術分享圖片

技術分享圖片


系統能夠自動備份日誌文件,能夠自動建立文件夾並進行自動備份日誌。


Nginx 日誌管理 日誌自動備份