logrotate簡介:
logrotate 程序是一個日志文件管理工具。用來把舊的日志文件刪除,並創建新的日志文件,我們把它叫做“轉儲”。我們可以根據日志文件的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程序來執行。logrotate 程序還可以用於壓縮日志文件,以及發送日志到指定的E-mail 。
logrotate配置:
主配置文件:
/etc/logrotate.conf
內容如下:
# see "man logrotate" for details # rotate log files weekly-->指定日志轉儲周期為每周 weekly # keep 4 weeks worth of backlogs-->指定日志文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份,即切分次數 rotate 4 # create new (empty) log files after rotating old ones-->是否創建新的日志文件在切分完老的日志后 create # use date as a suffix of the rotated file-->使用日期作為切分文件的前綴 dateext # uncomment this if you want your log files compressed-->是否對日志文件進行壓縮 #compress # RPM packages drop log rotation information into this directory-->包含/etc/logrotate.d下面所有的配置項 include /etc/logrotate.d # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here.
然后在/etc/logrotate.d/目錄下可自行定義要切割的日志文件,先看一個系統默認的syslog的配置:
/var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { sharedscripts postrotate //在轉儲以后需要執行的命令,這個關鍵字必須單獨成行 /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
再來看一個切分nginx的日志配置:
/var/logs/nginx/*.log { rotate 180 //轉儲次數 copytruncate //用於還在打開中的日志文件,把當前日志備份並截斷 daily //轉儲周期:每天 dateext //轉儲前綴 compress //啟用壓縮 missingok //如果日志文件丟失,繼續下一個而不輸出報錯信息 }
再來看一個Logstash的日志切分配置:
/var/log/logstash/*.log /var/log/logstash/*.err /var/log/logstash/*.stdout { daily rotate 7 copytruncate compress delaycompress //和compress一起使用時,轉儲的日志文件到下一次轉儲時才壓縮 missingok notifempty //如果是空文件的話,不轉儲 }
可以根據需要,自行在/etc/logrotate.d/下定義即可,定義好后,配合crontab可實現日志自動切割:
0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.conf > /dev/null 2>&1
一般情況下,主配置文件無需修改。