這幾天自己看了下部落格的nginx日誌,發現日誌檔案發現越來越大。
因為nginx自己不會對日誌檔案進行切割,所以打算通過其他方式進行切割,而且為了後續能對nginx日誌檔案裡面記錄的資料進行分析,所以打算按照天對其進行切割。
切割nginx日誌,我們可以通過兩種不同的方式進行,分別是:通過logrotate和通過shell指令碼。
如果是yum方式安裝的nginx,系統缺省會自動通過logrotate這個日誌管理軟體,按天進行分割。但是經過多次測試發現logrotate切割日誌不會按照自己設定的時間點進行分割,這點有點失望。
所以無論是yum方式安裝,還是原始碼方式安裝,都建議使用shell指令碼方式進行切割日誌。
為了更深入的學習linux系統,在此也會介紹下logrotate相關的知識點。
下面分別對這兩種方法進行介紹下:
前面說了yum或者apt-get方式安裝的nginx會自動使用logrotate這個日誌管理軟體進行切割,所以本章節我們主要介紹有關logrotate相關的知識點。
logrotate是什麼呢?它是乙個linux系統日誌的管理工具。它可以切割、壓縮等其他軟體的日誌檔案軟體。
logrotate是基於crontab執行的,所以這個時間點是由crontab控制的,具體可以查詢crontab的配置檔案/etc/anacrontab。
我們可以通過如下命令安裝logrotate,如下:
如果是ubuntu系統,可以使用如下命令進行安裝:
檢視logrotate的配置檔案,使用如下命令:
通過上圖,我們可以很明顯的看到logrotate的配置檔案是/etc/logrotate.conf,而/etc/logrotate.d/是用於儲存其他配置檔案的目錄。該目錄裡的所有檔案都會被主動的讀入 /etc/logrotate.conf中執行。
cat /etc/logrotate.d/nginx
/var/log/nginx/*.log /ilanni.com.log $/ilanni.com_$.log
#向nginx主程序傳送usr1訊號,重新開啟日誌檔案,否則會繼續往mv後的檔案寫資料的。原因在於:linux系統中,核心是根據檔案描述符來找檔案的。如果不這樣操作導致日誌切割失敗。
kill -usr1 `ps axu | grep "nginx: master process" | grep -v grep | awk ''`
#刪除7天前的日誌
cd $
find . -mtime +7 -name "*20[1-9][3-9]*" | xargs rm -f
#或者#find . -mtime +7 -name "ilanni.com_*" | xargs rm -f
該shell指令碼有兩個功能,第乙個是切割nginx日誌,第二個是刪除7天之前的nginx日誌。
在切割nginx日誌的功能中,我們要注意該shell指令碼命名切割的日誌是以切割時,是以前一天的時間就行命名該日誌檔案的。
所以我們在把該shell指令碼放在crontab中執行時,建議在每天的0點0分執行。如下:
檢視nginx切割的日誌檔案,如下:
通過上圖,我們可以很明顯的看到,切割shell指令碼確實按照我們設想的進行切割和命名切割日誌檔案的。
nginx日誌切割
web 訪問日誌 access log 記錄了所有外部客戶端對web伺服器的訪問行為,包含了客戶端ip,訪問日期,訪問的url資源,伺服器返回的http狀態碼等重要資訊。一條典型的web訪問日誌如下 規劃 1 要解決問題 2 nignx沒有自動分開檔案儲存日誌的機制。由於nginx它不會幫你自動分檔...
nginx 日誌切割
直接在nginx配置檔案中,配置日誌迴圈,而不需使用logrotate或配置cron任務。需要使用到 time iso8601 內嵌變數來獲取時間。time iso8601格式如下 2015 08 07t18 12 02 02 00。然後使用正規表示式來獲取所需時間的資料。使用下面的 塊 1 2 3...
Nginx日誌切割
編輯指令碼tianshl tianshl nginx vim nginx log division.sh指令碼內容 bin sh 昨天日期 yesterday date v 1d y m d 日誌目錄 log path usr local var log nginx sdk日誌路徑 sdk path...