日志切割概述
日志文件包含了关于系统中发生的事件的有用信息,在排查过程中或者系统性能分析时经常被用到。
对应忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间。
Logrotate可以自动对日志进行截断(轮转)、压缩以及删除旧日志文件。
日志切割作用
- 防止日志文件过大
- 定期删除旧日志文件
工具安装及使用
安装Logrotate
CentOS、Redhat系统默认安装了Logrotate,如需安装如下:
查看logrotate是否安装
rpm -ql logrotate
查看logrotate命令所属安装包
yum search logrotate
安装logrotate命令
yum -y install logrotate
配置Logrotate
查看logrotate安装文件
rpm -ql logrotate
/etc/cron.daily/logrotate #
/etc/logrotate.conf #logrotate的配置文件,用于配置主切割规则
/etc/logrotate.d #logrotate的子配置文件,用于配置子切割规则
/etc/rwtab.d/logrotate
/usr/sbin/logrotate #logrotate的程序
/usr/share/doc/logrotate-3.8.6
/usr/share/doc/logrotate-3.8.6/CHANGES
/usr/share/doc/logrotate-3.8.6/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate
/var/lib/logrotate/logrotate.status
配置文件详解
- 默认配置文件
- 配置文件解释
cat /etc/logrotate.conf | grep -v "^#" | grep -v "^$"
weekly #定义日志每周一轮轮转
rotate 4 #定义日志保留4个备份
create #定义日志创建新的空白日志文件替代旧文件
dateext #定义日志使用日期为文件名后缀,禁用此项默认数字为后缀
include /etc/logrotate.d #加载指定目录下配置文件,此目录下保存的是日志切割策略规则
/var/log/wtmp { #定义那个目录下日志的轮转
monthly #此目录下的个性化设置,定义每月轮转一次
create 0664 root utmp #此目录下的个性化设置,定义创建的新日志文件权限、属主、数组
minsize 1M #此目录下的个性化设置,定义日志文件超过1M后才会切割
rotate 1 #此目录下的个性化设置,定义日志保留1个备份
compress #此目录下的个性化设置,定义日志文件压缩启动,后缀为.gz
}
/var/log/btmp {
missingok #此目录下的个性化设置,设置在日志轮转期间任何错误都会被忽略
monthly
create 0600 root utmp
rotate 1
}
其他可配置参数
- 切割周期
- hourly:每小时一次
- daily:每天一次
- weekly:每周一次
- monthly:每月一次
- 切割文件后缀
- dateext:切割文件的后缀为日期
- nodateext:切割日志的后缀为数字
- 切割大小
- minsize 1M:日志大小超过1M才会轮转
- size 100M:当日志大小大于等于100M才会轮转
- 其他配置
compress //通过gzip 压缩转储以后的日志
nocompress //不做gzip压缩处理
copytruncate //用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
nocopytruncate //备份日志文件不过不截断
create mode owner group //轮转时指定创建新文件的属性,如create 0777 nobody nobody
nocreate //不建立新的日志文件
delaycompress //和compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress //覆盖 delaycompress 选项,转储同时压缩。
missingok //如果日志丢失,不报错继续滚动下一个日志
errors address //专储时的错误信息发送到指定的Email 地址
ifempty //即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。
notifempty //当日志文件为空时,不进行轮转
mail address //把转储的日志文件发送到指定的E-mail 地址
nomail //转储时不发送日志文件
olddir directory //转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir //转储后的日志文件和当前日志文件放在同一个目录下
sharedscripts //运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
prerotate //在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
postrotate //在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行
daily //指定转储周期为每天
weekly //指定转储周期为每周
monthly //指定转储周期为每月
rotate count //指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
dateext //使用当期日期作为命名格式
dateformat .%s //配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
size(或minsize) log-size //当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
当日志文件 >= log-size 的时候就转储。 以下为合法格式:(其他格式的单位大小写没有试过)
size = 5 或 size 5 (>= 5 个字节就转储)
size = 100k 或 size 100k
size = 100M 或 size 100M
应用Logrotate
创建日志轮转规则
cat > /etc/logrotate.d/my_test << EOF
/tmp/my_test/my.log {
daily
missingok
nodateext
create
rotate 2
compress
}
EOF
测试日志轮转规则
logrotate -fv /etc/logrotate.d/my_test
-f:强制轮转
-v:显示轮转过程
查看轮转结果
ll /tmp/my_test/
total 8
-rw-r--r--. 1 root root 0 Jan 9 00:07 my.log
-rw-r--r--. 1 root root 28 Jan 9 00:07 my.log.1.gz
-rw-r--r--. 1 root root 20 Jan 9 00:04 my.log.2.gz
设置定时任务
- 单个任务轮转
(echo "0 1 * * * logrotate -fv /etc/logrotate.d/my_test > /dev/null 2>&1"; crontab -l) | crontab
- 多个任务轮转
将切割策略放入对应的cron文件夹下即可
/etc/cron.deny #控制不让哪些用户使用cron任务
/etc/cron.d #系统自动定期做的cron任务
/etc/cron.daily #每天切割cron任务
/etc/cron.hourly #每小时切割cron任务
/etc/cron.monthly #每月切割cron任务
/etc/cron.weekly #每周切割cron任务
- 注意
如果日志轮转规则写入“/etc/logrotate.d/”下,Linux操作系统也会自动执行。