linux系統上有一個非常好用的輪替服務-logrotate。透過這個服務,可以對日誌檔案進行輪替管理。當日誌文件過大時,可以將其切割成多個小的日誌文件,也可以對其進行壓縮處理。 nginx預設的日誌文件access.log以及error.log日誌文件,是不會自行進行輪替的。所以,常常會用logrotate對nginx的日誌進行輪替管理。
logrotate
對於logrotate這個程式的運行,是掛在系統的定時任務中每日執行的。
# cat /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status ……
下面,我們來看看logrotate的設定檔/etc/logrotate.conf。
# 通过man logrotate查看更多信息 # 下面是默认配置 weekly <=== 默认一周进行一次轮替操作 rotate 4 <=== 默认保存4份日志文件 create <==== 当轮替完成后,创建一个新的日志文件 dateext <=== 轮替的文件名前加上日期以便管理 #compress <=== 默认对轮替的文件不进行压缩,如果想压缩,就把#去掉 #将/etc/logrotate.d目录下的文件加载进来 include /etc/logrotate.d # 下面是两个日志文件轮替的规则 /var/log/wtmp { <=== 指定文件名 monthly <=== 一个月进行一次轮替 create 0664 root utmp <=== 新的日志文件权限及所有人,所属组设置 minsize 1M <=== 日志文件至少有1M时候才进行轮替 rotate 1 <=== 只保留一份日志文件 } /var/log/btmp { missingok <=== 如果日志文件不存在,则不报错,直接忽略 notifempty <=== 如果日文文件是空的则不进行轮替 monthly create 0600 root utmp rotate 1 }
在了解完logrotate的設定檔後,我們就可以自己弄一個日誌進行輪換練習了。首先,我們準備一個日誌檔案
# ll logrotate_learn.log -rwx------ 1 www www 223288003 Nov 12 09:05 logrotate_learn.log
這裡,我們最好給該日誌檔案加上-a屬性,只能向其新增內容。
# chattr +a logrotate_learn.log
接下來,我們要思考該日誌檔案的輪替規則了。這裡,我們打算每週進行一次輪替並對輪替的檔案進行壓縮處理,並且當檔案大小超過10M時候才進行輪替,另外,保留7份日誌檔案。這裡,還有一點要注意的是。因為該檔案有a屬性,所以輪替前需要將a屬性刪除,然後在輪替完成後再加上a屬性。那麼,現在我們需要寫配置規則了
vim /etc/logrotate.d/logrotate_learn # 轮替练习 /root/logrotate_learn.log { missingok notifempty weekly rotate 7 size=10M create 0700 www www compress sharedscripts prerotate /usr/bin/chattr -a /root/logrotate_learn.log endscript sharedscripts postrotate /usr/bin/chattr +a /root/logrotate_learn.log endscript }
下面,我們來進行輪替。
# logrotate [-vf] logfile 选项与参数: -v :启动显示模式,会显示logrotate 运作的过程喔! -f :不论是否符合,强制每个日志文件都进行rotate 的动作! # logrotate -v /etc/logrotate.d/logrotate_learn reading config file /etc/logrotate.d/logrotate_learn Allocating hash table for state file, size 15360 B …… # ll logrotate_learn.log* -rwx------ 1 www www 0 Nov 12 10:15 logrotate_learn.log -rwx------ 1 www www 20974585 Nov 12 10:15 logrotate_learn.log.1.gz
對nginx日誌檔案進行輪換管理
學完後如果對日誌檔案進行輪換管理後,我們現在進入實戰練習。
# ll /www/wwwlogs/ total 1852452 -rwx------ 1 www www 350288 Nov 12 02:50 access.log -rwx------ 1 www www 14016937 Nov 11 22:44 isunshinenet.com.error.log -rwx------ 1 www www 300416647 Nov 11 22:44 isunshinenet.com.log -rwx------ 1 www www 0 Sep 30 09:57 nginx_error.log
我們需要對這四個日誌檔案進行輪換管理,首先,建立好設定檔。
# 对nginx日志文件进行呢轮替 /www/wwwlogs/access.log /www/wwwlogs/nginx_error.log /www/wwwlogs/isunshinenet.com.error.log /www/wwwlogs/isunshinenet.com.log { missingok notifempty daily rotate 7 size=1M create 0700 www www sharedscripts postrotate if [ -f /www/server/nginx/logs/nginx.pid ];then /www/server/nginx/sbin/nginx -s reload fi endscript }
至此,我們就完成了nginx日誌的輪替管理了,每天系統都會自行偵測,需要進行輪替時,就會進行輪替管理。
以上是linux運維之logrotate日誌輪替-對nginx日誌進行輪替的詳細內容。更多資訊請關注PHP中文網其他相關文章!