AI智能
改变未来

『学了就忘』Linux日志管理 — 92、日志轮替

[toc]

1、日志文件的命名规则

日志轮替最主要的作用就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。

那么旧的日志文件改名之后,如何命名呢?

主要依靠

/etc/logrotate.conf

配置文件中

dateext

参数:

  • 如果配置文件中拥有
    dateext

    参数,那么日志会用日期来作为日志文件的后缀。例如

    secure-20200616

    。这样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可。

  • 如果配置文件中没有
    dateext

    参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的

    secure

    日志会自动改名为

    secure.1

    ,然后新建

    secure

    日志,用来保存新的日志。当第二次进行日志轮替时,

    secure.1

    会自动改名为

    secure.2

    ,当前的

    secure

    日志会自动改为

    secure.1

    ,然后也会新建

    secure

    日志,用来保存新的日志,以此类推。

总结:日志轮替步骤

  • 首先要切割日志文件,通过
    /etc/logrotate.conf

    配置文件进行配置。

  • 进行轮替。比如设置一天一个日志文件,我只保留30个日志文件,也就是说保留最近30天的日志文件,那么第31天,就会保留第31天的日志文件,同时删除第一天的日志文件,相当于一个队列结构。

注意:

有些服务的日志自带切割文件的功能,但是还是推荐使用Linux系统的自带日志轮替配置。因为Linux系统的自带日志轮替配置包括文件的切换和轮替,但有些服务自带的日志管理,只包含日志文件的切割功能,那多余的日志文件,就需要手工进行删除,比如

apache

服务中自带的日志管理。

还有一个点就是

apache

服务有自己的日志管理,你学会了,也就只能熟练操作

apache

服务的日志文件,但是其他的服务如果也有自己的日志管理功能,那么我们要学会很多种服务的日志管理方式,会非常的麻烦。

Linux系统自己的日志轮替功能,也就是通过

/etc/logrotate.conf

配置文件进行配置的日志轮替,理论上无论什么日志,RPM包方式安装服务的日志,源码包方式安装服务的日志,

logrotate

配置文件都能够识别。

RPM包方式安装服务的日志会自动的加入

logrotate

轮替,一般不需要你介入。

而源码包方式安装服务的日志,需要手工把该服务的日志加入到

logrotate.conf

配置文件中。

2、logrotate配置文件说明

[root@localhost ~]# vim /etc/logrotate.conf# see "man logrotate" for details# rotate log files weekly# 每周对日志文件进行一次轮替。weekly# keep 4 weeks worth of backlogs# 保存4个日志文件,也就是说如果进行了5次日志轮替,就会删除第一个备份日志文件。rotate 4# create new (empty) log files after rotating old ones# 日志轮替时,自动创建新的日志文件。# 以cron.log为例,会把cron.log文件改成日期格式的文件名,# 然后在创建一个新的空的cron.log日志文件。create# use date as a suffix of the rotated file# 使用日期作为日志轮替文件的后缀。# RedHat 5 默认是不开启的, RedHat 6 以后默认是开启。dateext# uncomment this if you want your log files compressed# 日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩。# 也就是说除了现在正在存取的日志文件,其他的日志文件都是压缩格式的方式存储。# compress# 说明:# 以上日志信息配置为默认配置,如果需要轮替的日志没有设定独立的参数,那么都会遵守以上参数。# 你可以理解为logrotate的通用配置或者是环境变量,对所有的日志都生效。# 如果轮替日志配置了独立参数,那么独立参数优先级更高,也就是上面的通用配置失效。# RPM packages drop log rotation information into this directory# 包含/etc/logrotate.d/目录中所有的子配置文件。# 也就是说会把这个目录中所有子配置文件读取进来,进行日志轮替。# 换句话说就是/etc/logrotate.d目录中的文件,也是被logrotate管理的。include /etc/logrotate.d# 以下两个轮替日志有自己的独立参数,如果和默认的参数冲突,则独立参数生效。# no packages own wtmp and btmp -- we\'ll rotate them here# 以下参数仅对此目录有效。/var/log/wtmp {# 每月对日志文件进行一次轮替。monthly# 建立的新日志文件,权限是0664,所有者是root,所属组是utmp组。create 0664 root utmp# 日志文件最小轮替大小是1MB。# 也就是日志一定要超过1MB才会轮替,否则就算时间达到一个月,也不进行日志转储。minsize 1M# 保留一个日志备份。也就是只有wtmp和wtmp.1日志保留而已。# 换句话说也就是除了我本身日志文件,再多保存一个日志文件。rotate 1}# 以下参数只对/var/log/btmp生效。/var/log/btmp {# 果日志不存在,则忽略该日志的警告信息。missingokmonthlycreate 0600 root utmprotate 1}# system-specific logs may be also be configured here.

3、logrotate配置文件的主要参数

如下表:

参数 参数说明
daily
日志的轮替周期是每天。
weekly
日志的轮替周期是每周。
monthly
日志的轮替周期是每月。
rotate 数字
保留的日志文件的个数。0指没有备份。
compress
日志轮替时,旧的日志进行压缩。
create mode owner group
建立新日志,同时指定新日志的权限与所有者和所属组。如

create 0600 root utmp

mail address
当日志轮替时,输出的内容通过邮件发送到指定的邮件地址。如

mail xxxx@lamp.net

missingok
如果日志不存在,则忽略该日志的警告信息。
notifempty
如果日志为空文件,则不进行日志轮替。
minsize 大小
日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替。
size 大小
日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。如

size 100k

。(也就是只按大小,不按时间)

dateext
使用日期作为日志轮替文件的后缀。如

secure-20200616

sharedscripts
在此关键字之后的脚本只执行一次。(要使用下面两个参数,该参数一定要使用)
prerotate/endscript
在日志轮替之前执行脚本命令。

endscript

标示

prerotate

脚本结束。

postrotate/endscript
在日志轮替之后执行脚本命令。

endscript

标示

postrotate

脚本结束。

这些参数中较为不好理解的应该就是

prerotate/endscript

postrotate/endscript

参数了,我们利用

"man logrotate"

中的列子来解释下这两个参数。

例如:

# 日志轮替的是/var/log/httpd/中RPM包安装的apache正确访问日志和错误日志。/var/1og/httpd/access.log/var/1og/httpd/error.log{# 轮替5次。rotate 5# 信息发送到指定邮箱。mail www@sina.com# 日志大于100KB时才进行日志轮替,不再按照时间轮替。size 100k# 以下脚本只执行一次。sharedscripts# 在日志轮替结束之后,执行以下脚本。postrotate# 重启apache服务的相关服务。/usr/bin/killall -HUP httpd# 脚本结束。endscript}

提示:

  • prerotate

    postrotate

    主要用于在日志轮替的同时,执行指定的脚本,一般用于日志轮替之后重启服务。

  • 这里强调,如果你的日志是写入
    rsyslog

    服务的配置文件的,那么把新日志加入

    logrotate

    后,一定要重启

    rsyslog

    服务,否则你会发现虽然新日志建立了,但是数据还是写入了旧的日志当中。

  • 那是因为虽然
    logrotate

    知道日志轮替了,但是

    rsyslog

    服务却并不知道。

  • 同理,如果你的日志不是被
    rsyslog

    管理,如源码包安装的Apache、Nginx等服务,则需要重启Apache或Nginx服务,否则日志也不能正常轮替。

  • 所以通常操作的方式是,日志文件轮替完成之后,重启一下服务器,所有的相关服务都进行了重启,从而使轮替后的配置文件都能正常适用。
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 『学了就忘』Linux日志管理 — 92、日志轮替