1、logrotae是什么
Linux 操作系统上切割日志可以通过 logrotate
来实现。
相比其他日志切割软件来看,使用 logrotate
有以下优点:
- logrotate
是Linux操作系统上自带的一款开源的日志切割软件,因此你无需安装
logrotate
自身已经集成进操作系统的定时任务中,因此你无需再配置定时任务logrotate
自身支持日志压缩logrotate
的全局配置文件为/etc/logrotate.conf
2、使用logrotae定时进行日志转储
linux 操作上的一些系统服务默认已经配置了日志切割规则,可以通过查看
/etc/logrotate.d/
目录下的文件来查看操作系统上新部署了一项应用程序,或需要对其他的日志文件配置切割规则,你可以自定义
logrotate
的配置文件使其生效。这里以/var/log/audit/audit.log
日志为例[root@server ~]# cat /etc/logrotate.d/audit /var/log/audit/*.log { missingok # 日志切割时缺少该日志不会报错 weekly # 每周切割一次 rotate 10 # 切割后最多保留10个文件 size +100M # 当前日志容量超过100M时,立即进行日志切割 compress # 切割后的日志进行压缩 dateext # 切割后的日志以时间'年月日'为后缀 notifempty # 日志为空时不进行切割 create 0600 root root # 切割时创建一个新日志文件,模式为0600,日志属组为root root }
参数释义
压缩
compress
:使用压缩,默认的压缩方式为gzip
compresscmd
:自定义压缩的命令,默认压缩方式为gzip
uncompresscmd
:自定义解压的命令,默认解压工具为gunzip
compressext
:压缩时使用后缀,默认gzip
压缩格式下后缀为.gz
compressoptions
:压缩选项,默认使用gzip
;如果使用其他压缩选项,需要设置compressoptions
与之匹配delaycompress
:延迟压缩,实际压缩生效的时间发生在下一次日志切割之时nodelaycompress
:不使用延迟压缩,即轮转时压缩(默认配置)nocompress
:不实用压缩
归档方式
copy
:轮转时复制完整的日志文件,常用来做当前日志文件的镜像备份。当指定copy
选项时,create
选项会失效copytruncate
:轮转时复制完整的日志文件并清空原来的日志文件(相当于echo > logfile
),新写入的日志会继续往清空后的日志文件中写入。但在日志copy
和truncate
的过程中写入的日志可能会丢失。当指定copytruncate
选项时,create
选项会失效nocopy
:轮转时不会复制原日志文件nocopytruncate
:轮转时复制原日志文件后不会清空原日志文件的内容create
:轮转时创建一个新的日志文件,可以设置创建文件的权限、所有者、及属组nocreate
:轮转时不会创建新的日志文件createolddir
:轮转时如果指定的目录不存在,则会创建,支持设置目录的权限、所有者和属组nocreateolddir
:轮转时指定的目录不存在时不会进行创建
归档路径
olddir directory
:配置目录后,轮转后的日志会保存在指定的目录下noolddir
:轮转后的日志保存在日志原有的目录下
归档删除
shred
:删除日志时使用shred -u(粉碎式删除)
的方式(默认关闭)shredcycles count
:删除日志前会先重写覆盖日志文件,达到设定的次数后才进行删除noshred
:删除日志时使用unlink
的方式删除(还没搞懂这个删除逻辑)
归档规则
hourly
:每小时进行一次日志切割daily
:每天进行一次日志切割weekly
:每周进行一次日志切割monthly
:每月进行一次日志切割yealy
:每年进行一次日志切割size
:按日志大小进行切割rotate count
:日志轮转时保存的归档文件数量start count
:日志轮转时从指定的count开始,例如,start 9
,则日志轮转后会跳过0-8
生成xxx.9
这样的日志,maxage count
:轮转后的日志超过设定的日期会被删除,只有被轮转的日志才会应用到此规则maxsize size
:设置maxsize后,如果被轮转的日志大小超过设置的 size,则会在设置的轮转时间(例如:weekly)之前进行日志轮转minsize size
:设置minsize后,如果被轮转的日志大小不满足设置的size,即便到了设置的轮转时间也不会触发日志轮转
日期格式
dateext
:切割后日志的后缀名以 "YYYYMMDD" 为格式nodateext
:轮转日志时不使用后缀名为日期的格式dateformat
:自定义日志后缀的时间格式,仅%Y %m %d %H %s
可以被使用。 例如dateformat %m/%d/%Y
dateyesterday
:切割日志时使用昨天的时间而不是今天的时间extension
:日志文件在轮转后使用指定的 ext 扩展名。如果使用压缩,通常ext还会加上压缩文件的扩展名,通常是.gz
。例如,你有一个日志文件名为mylog.foo
,你可以通过extension ext
将日志轮转为mylog.1.foo.gz
而不是mylog.foo.1.gz
轮转规则
ifempty
:日志为空时也会按照规则进行轮转notifempty
:日志为空时不进行轮转missingok
:轮转的日志不存在时,继续下一个日志的轮转,不会报错nomissingok
:轮式时日志不存在,会有报错提示 (默认配置)
邮件配置
mail address
:配置邮件地址后,会将轮转的日志信息发送到邮箱nomail
:不发送轮转的日志信息到任何邮箱 (默认配置)mailfirst
:配置邮箱后,轮转后将本次生成的日志文件发送到邮箱maillast
:配置邮箱后,将上一次轮转的日志文件发送到邮箱 (默认配置)
归档时执行的脚本
include file_or_directory
:轮转前会尝试读取 include 配置的文件或目录,如果配置的是目录,则目录下的所有文件都会被加载到轮转的配置中;但对于文件扩展名以taboo
结尾的文件或配置路径为多个目录、管道等时,加载配置时会被忽略prerotate/endscript
:日志轮转前会执行自定义的命令(脚本)。通常,轮转的日志的完整路径会作为传入的第一个参数postrotate/endscript
:日志轮转后会执行自定义的命令(脚本)。通常,轮转的日志的完整路径会作为传入的第一个参数firstaction/endscript
:执行prerotate/endscript
前且最少一个日志会被轮转时执行该语句,整个模式会作为第一个参数传递给该语句,当语句执行异常时,不会再向下执行lastaction/endscript
:执行postrotate/endscript
前且最少一个已经被轮转后执行该语句,整个模式会作为第一个参数传递给该语句,当语句执行异常时,仅仅展示错误信息preremove/endscript
:仅仅当删除轮转过的日志前执行该语句。即将被删除的日志名会作为参数被传递进该语句sharedscripts
:共享模式。启用共享模式后,当prerotate
和postrotate
语句执行时匹配到多个日志时,prerotate
和postrotate
语句仅仅只会执行一次。正常模式下,轮转时匹配到的每个日志文件都会单独执行一次prerotate
和postrotate
语句。nosharedscripts
:轮转时匹配到多个日志文件时,每个日志文件都会执行一次prerotate
和postrotate
语句。(默认配置)
3、进行配置的验证
# 测试配置文件的语法是否合法
[root@server ~]# logrotate --debug --force /etc/logrotate.d/audit
reading config file /etc/logrotate.d/audit
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /var/log/audit/*.log forced from command line (10 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/audit/audit.log
log needs rotating
rotating log /var/log/audit/audit.log, log->rotateCount is 10
dateext suffix '-20211124'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
fscreate context set to system_u:object_r:auditd_log_t:s0
renaming /var/log/audit/audit.log to /var/log/audit/audit.log-20211124
creating new /var/log/audit/audit.log mode = 0600 uid = 0 gid = 0
compressing log with: /bin/gzip