天天看點

logrotate輪詢nginx日志

Linux日志檔案如果不定期清理,會填滿整個磁盤。這樣會很危險,是以日志管理是系統管理者日常工作之一。我們可以使用”logrotate”來管理linux日志檔案,它可以實作日志的自動滾動,日志歸檔等功能。下面以nginx日志檔案來講解下logrotate的用法。

在/etc/logrotate.d/目錄下建立一個配置檔案”nginx”,内容如下:

注釋:

/usr/local/nginx/logs/*.log:需要輪詢日志路徑

daily:每天輪詢

rotate 5:保留最多5次滾動的日志

missingok:如果日志丢失,不報錯繼續滾動下一個日志

dateext:使用日期作為命名格式

compress:通過gzip壓縮轉儲以後的日志

notifempty:當日志為空時不進行滾動

/var/run/nginx.pid: nginx pid位置,請檢視nginx.conf

postrotate/endscript:在截斷轉儲以後需要執行的指令

立即截斷可執行下面

注:

由于logratate已經加到cron.daily(/etc/cron.daily/logrotate),不再需要加到計劃任務中

按天儲存一周的Nginx日志壓縮檔案,配置檔案為「/etc/logrotate.d/nginx」:

如果你等不及CRON,可以通過如下指令來手動執行:

當然,正式執行前最好通過Debug選項來驗證一下,這對調試也很重要:

BTW:類似的還有Verbose選項,這裡就不多說了。

問題:sharedscripts的作用是什麼?

大家可能注意到了,我在前面Nginx的例子裡聲明日志檔案的時候用了星号通配符,也就是說這裡可能涉及多個日志檔案,比如:access.log和error.log。說到這裡大家或許就明白了,sharedscripts的作用是在所有的日志檔案都輪轉完畢後統一執行一次腳本。如果沒有配置這條指令,那麼每個日志檔案輪轉完畢後都會執行一次腳本。

問題:rotate和maxage的差別是什麼?

它們都是用來控制儲存多少日志檔案的,差別在于rotate是以個數為機關的,而maxage是以天數為機關的。如果我們是以按天來輪轉日志,那麼二者的差别就不大了。

問題:為什麼生成日志的時間是淩晨四五點?

前面我們說過,Logrotate是基于CRON運作的,是以這個時間是由CRON控制的,具體可以查詢CRON的配置檔案「/etc/crontab」,可以手動改成如23:59等時間執行:

如果使用的是新版CentOS,那麼配置檔案為:/etc/anacrontab。

問題:如何告訴應用程式重新打開日志檔案?

以Nginx為例,是通過postrotate指令發送USR1信号來通知Nginx重新打開日志檔案的。但是其他的應用程式不一定遵循這樣的約定,比如說MySQL是通過flush-logs來重新打開日志檔案的。更有甚者,有些應用程式就壓根沒有提供類似的方法,此時如果想重新打開日志檔案,就必須重新開機服務,但為了高可用性,這往往不能接受。還好Logrotate提供了一個名為copytruncate的指令,此方法采用的是先拷貝再清空的方式,整個過程中日志檔案的操作句柄沒有發生改變,是以不需要通知應用程式重新打開日志檔案,但是需要注意的是,在拷貝和清空之間有一個時間差,是以可能會丢失部分日志資料。

     本文轉自yzy121403725 51CTO部落格,原文連結:http://blog.51cto.com/lookingdream/1794169,如需轉載請自行聯系原作者