日志文件管理工具 logrotate

作者: admin 分类: IT运维 发布时间: 2018-05-23 11:16

logrotate介绍

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。另外,旧日志也可以通过电子邮件发送,不过该选项超出了本教程的讨论范围。

logrotate安装

主流的Linux发行版中都自动安装了logrotate,如果最小化安装的版本中没有,可以使用yum进行安装。

Logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate,日志轮转是系统自动完成的。

# yum install logrotate crontabs 

logrotate这个任务默认放在cron的每日定时任务cron.daily下面 /etc/cron.daily/logrotate

logrotate配置文件

logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改;

[root@***logrotate.d]# cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
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
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
	minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

日志文件的轮循设置在独立的配置文件中,通常放在/etc/logrotate.d/目录下;

例如tomcat的日志配置如下:

[root@***logrotate.d]# cat /etc/logrotate.d/tomcat 
/usr/local/tomcat/logs/catalina.out {
  daily
  rotate 5
  missingok
  dateext
  compress
  notifempty
  copytruncate
}

logrotate配置文件详细说明

daily: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’,‘monthly’;

rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除;

missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误;

dateext:  切换后的日志文件会附加上一个短横线和YYYYMMDD格式的日期,没有这个配置项会附加一个小数点加一个数字序号;

compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩;

nocompress :不压缩切换后的日志文件;

delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用;

notifempty: 如果日志文件为空,轮循不会进行;

copytruncate:在复制当前日志文件后,将日志文件清空;而不是将当前日志文件改名后创建一个新的;

create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件;

postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行;

 

详细参数配置说明

compress 通过gzip 压缩转储以后的日志
nocompress 不做gzip压缩处理
create mode owner group 轮转时指定创建新文件的属性,如create 0777 nobody nobody
nocreate 不建立新的日志文件
delaycompress 和compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
missingok 如果日志丢失,不报错继续滚动下一个日志
ifempty 即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。
notifempty 当日志文件为空时,不进行轮转
mail address 把转储的日志文件发送到指定的E-mail 地址
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

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注