使用 logrotate 转储日志
2015-08-21 by dongnan
环境
操作系统: CentOS 6.6
日志应用: nginx 1.6 (源码方式安装)
目标
使用 logrotate
转储 nginx
日志。
步骤
创建配置文件
在 /etc/logrotate.d
目录下创建一个 nginx
的配置文件。
vim /etc/logrotate.d/nginx
配置文件内容类似如下
# see "man logrotate" for details
/var/log/nginx/admin/admin.log
/var/log/nginx/cdn/cdn.log
/var/log/nginx/www/www.log
/var/log/nginx/www/m.log #文件不存在
{
daily
rotate 15
missingok
notifempty
compress
dateext
dateformat -%Y%m%d
sharedscripts
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ];then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}
参数说明
- daily: 指定转储周期为每天
weekly
为周 、monthly
为月。 - rotate 15: 指定日志文件删除之前转储的次数,
0
指没有备份,15
指保留15个备份。 - missingok: 日志不存在,不会输出错误信息。
- notifempty: 如果是空文件的话不转储。
- compress: 通过
gzip
压缩转储的日志文件。 - postrotate/endscript: 在转储以后需要执行的命令,可以放入这对关键字之间,这两个关键字必须单独成行。
转储日志
/usr/sbin/logrotate -f /etc/logrotate.d/nginx
生成日志文件
ls /var/log/nginx/www/
www.log www.log-20150820.gz
设置任务计划
每天对日志转储一次
cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
Haproxy日志转储
配置文件
cat /etc/logrotate.d/haproxy
/var/log/haproxy/haproxy.log {
daily
rotate 5
missingok
notifempty
compress
dateext
dateformat -%Y%m%d
sharedscripts
postrotate
#kill -HUP `cat /var/run/haproxy.pid`
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
参数详见 nginx 示例。
debug参数
命令
logrotate -d -f /etc/logrotate.d/nginx
reading config file /etc/logrotate.d/nginx
reading config info for /var/log/nginx/www.log
Handling 1 logs
rotating pattern: /var/log/nginx/www.log
forced from command line (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/www.log
log does not need rotating
not running postrotate script, since no logs were rotated
参数
-d, --debug
Turns on debug mode and implies -v. In debug mode,
no changes will be made to the logs or to the logrotate state file.