携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
我们上一篇文章讲解了Linux的系统日志是怎么记录的,当时可能会有小伙伴有疑问,那就是日志记录太多了怎么办,它会不会占用太多磁盘空间?本篇文章就是来讲解这个问题的,如何进行日志转储。
1.日志转储工具
logrotate 程序是一个日志文件管理工具。Linux通过这个程序来完成日志的转储,有些小伙伴会将日志转储成为日志更替,我个人觉得都可以,只要大家明白你表达的意思即可。
那么logrotate程序又是如何进行日志转储的呢?回想下我们前面日志记录的程序是不是有一个配置文件,同理logrotate程序也有一个配置文件。/etc/logrotate.conf这个文件规定了日志具体应该怎么转储。
2./etc/logrotate.conf文件讲解
我们现在一起来看下/etc/logrotate.conf文件
# see "man logrotate" for details
# rotate log files weekly 每周对日志文件进行一次轮替
weekly
# keep 4 weeks worth of backlogs 共保存4份日志文件,当建立新的日志文件时,旧的将会被删除
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
# system-specific logs may be also be configured here.
文件里面的内容已经帮大家翻译了,大家可以看到我们日志默认的转储规则。logrotate 程序会根据/etc/logrotate.conf文件对日志文件进行管理。
3.对指定日志文件进行转储
看到了这里,有些同学可能会想,我能不能对指定的日志文件进行转储,而不用默认的转储规则,答案是可以的。 具体的转储规则可以如下图所示(图示并非所有转储规则,仅供参考,图片来源是韩顺平老师的ppt):
你可以将具体的文件转储规则写在两个地方:
第1个地方,直接写在/etc/logrotate.conf(个人不推荐,因为看起来很杂乱)
# see "man logrotate" for details
# rotate log files weekly 每周对日志文件进行一次轮替
weekly
# keep 4 weeks worth of backlogs 共保存4份日志文件,当建立新的日志文件时,旧的将会被删除
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
# system-specific logs may be also be configured here.
#单独为某个日志文件设置轮替规则,这个优先级会更高
/var/log/wtmp{
monthly #每月对日志文件进行轮替
create 0664 root utmp #建立新的日志文件,权限是0664,拥有者是root,所属组是utmp
minsize 1M #日志文件轮替大小是1M,也就是日志大小要达到1M才会轮替,否则就算时间达到一个月,也不进行日志转储
rotate 1 #仅保留一个日志备份,也就是只有wtmp和wtmp.1日志保留
}
在/etc/logrotate.conf你要指定要转储的日志文件,如例子例子里面的/var/log/wtmp就是要转储的文件,大括号里面的内容就是转储的规则。大括号里面的转储规则优先级高于默认的转储规则。 第2个地方,将日志转储规则写在/etc/logrotate.d目录里面
[root@controller logrotate.d]# vim netsecure #文件名不是一定要叫这个,重点是里面的内容
#写上转储的规则
/var/log/netsecure{ #/var/log/netsecure是你要转储的日志文件
create #这个要写
dateext
daily
rotate 5
compress
size 4k #如果没超过4k,手动转储也没用
}
#手动转储(不想等一天的话,可以手动转储,前提是你日志文件已经达到或超过了你指定的大小了)
[root@controller log]# logrotate /etc/logrotate.d/netsecure
在/etc/logrotate.d目录里面,你可以给要执行特定转储规则的日志文件新建一个转储规则文件,这个规则文件叫什么名字无所谓,重点是这个文件里面你要写上需要转储的日志文件和转储规则,具体内容写法和第一个例子一样。