logrotate日志切割压缩Nginx Tomcat Redis#
使用背景情况
运维中日志处理是一个超级常见的任务,可能会经常性的挑取日志内容,比如天级的日志或者是周级,也或者是具体时段的,但是,如果日志两很大时候,日志过滤变得会很繁琐,还会造成空间浪费,资源浪费,特推出日志切割软件进行切割日志,
一、logrotate介绍#
logrotate软件是一个日志管理工具,用于非分隔日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间。一般centos系统已经自带安装好了。
logrotate是基于crontab运行的,其脚本是/etc/cron.daily/logtotate,日志轮转是系统自发完成的,实际运行时,logrotate会调用配置文件/etc/logrotate.conf。每日任务执行,可以在/etc/logrotate.d目录里放置自定义好的配置文件,其中文件也会被 logrotate 读取。指明每个日志文件的特定规则。/var/lib/logrotate.status中默认记录logrotate上次轮询日志文件的时间
二、安装logrotate#
一般系统都默认安装了,如果没有安装用yum安装一下就可以了
yum –y install logrotate
三、使用案例#
3.1切割Tomcat的Catalina.out#
cat /etc/logrotate.d/tomcat#第一种
/usr/local/tomcats/*/logs/catalina.out
{
rotate 7 # 指定日志文件删除之前的转储次数,7表示保留7次备份
daily # 指定转储周期为每天
dateext # 使用日期为转储文件的后缀
copytruncate # 用于还在打开中的日志文件,把当前日志备份并截断
compress # 通过gzip压缩转储以后的日志
ifempty # 即使是空文件也转储,这个是logrotate的缺省选项
missingok # 如果日志不存在则忽略该警告信息
postrotate # postrotate/endscript,在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
find /usr/local/tomcats/*/logs \( -name "*.txt" -o -name "*.log" \) -mtime +0 -exec rm -rf {} \;
endscript
}
#第二种
/opt/tomcat/logs/catalina.out {
rotate 14
daily
copytruncate
compress
notifempty
missingok
size 10M
}
如果等不及cron自动执行日志轮转,想手动强制切割日志,需要加-f参数;不过正式执行前最好通过Debug选项来验证一下(-d参数),这对调试也很重要
执行方式
/usr/sbin/logrotate -f /etc/logrotate.d/nginx(配置文件名称)
/usr/sbin/logrotate -d -f /etc/logrotate.d/tomcat (配置文件名称)
3.2 redis 日志备份压缩#
cat /etc/logrotate.d/redis
{
rotate 14
daily
dateext
copytruncate
compress
ifempty
missingok
postrotate
find /var/log/redis \( -name "*.txt" -o -name "*.log" \) -mtime +0 -exec rm -rf {} \;
endscript
}
3.3 nginx日志切割#
vim /etc/logrotate.d/nginx
/var/log/weblog/*.log {//日志路径
daily //指定转储周期为每天
compress //通过gzip 压缩转储以后的日志
rotate 7 //保存7天的日志
missingok //如果日志文件丢失,不要显示错误
notifempty //当日志文件为空时,不进行轮转
dateext //使用当期日期作为命名格式,exp: nginx_access.log-20190120
sharedscripts //运行postrotate脚本
postrotate //执行的指令
if [ -f /run/nginx.pid ]; then
kill -USR1 `cat /run/nginx.pid`
fi
endscript //结束指令
}
3.4 PHP-FPM日志的配置实例#
vim /etc/logrotate.d/php
/usr/local/php/var/log/*.log {
daily
compress
rotate 7
missingok
notifempty
dateext
sharedscripts
postrotate
if [ -f /usr/local/php/var/run/php-fpm.pid ]; then
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
fi
endscript
}
四、参数说明#
参数 |
---|
compress |
compressoptions |
uncompresscmd |
daily |
dateext |
delaycompress |
ifempty |
copytruncate |
mailfirst/maillast |
monthly |
nocompress |
nomail |
ifempty |
olddir directory |
postrotate/endscript |
prerotate/endscript |
rotate count |
size size |
start count |
weekly |
yearly |
create mode owner group |
extension ext |