日志转储

288 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

我们上一篇文章讲解了Linux的系统日志是怎么记录的,当时可能会有小伙伴有疑问,那就是日志记录太多了怎么办,它会不会占用太多磁盘空间?本篇文章就是来讲解这个问题的,如何进行日志转储。

1.日志转储工具

logrotate 程序是一个日志文件管理工具。Linux通过这个程序来完成日志的转储,有些小伙伴会将日志转储成为日志更替,我个人觉得都可以,只要大家明白你表达的意思即可。

那么logrotate程序又是如何进行日志转储的呢?回想下我们前面日志记录的程序是不是有一个配置文件,同理logrotate程序也有一个配置文件。/etc/logrotate.conf这个文件规定了日志具体应该怎么转储。

日志轮替原理.jpg

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):

日志轮替参数说明.jpg 你可以将具体的文件转储规则写在两个地方: 第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目录里面,你可以给要执行特定转储规则的日志文件新建一个转储规则文件,这个规则文件叫什么名字无所谓,重点是这个文件里面你要写上需要转储的日志文件和转储规则,具体内容写法和第一个例子一样。