logrotate日志管理工具

Posted wushuaishuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logrotate日志管理工具相关的知识,希望对你有一定的参考价值。

一.概述

logrotate是一个Linux系统默认安装了的日志文件管理工具,用来把旧文件轮转、压缩、删除,并且创建新的日志文件。我们可以根据日志文件的大小、天数等来转储,便于对日志文件管理。

logrotate是基于cron来运行的,其cron脚本是/etc/cron.daily/logrotate,日志转储是系统自动完成的。实际运行时,logrotate会调用配置文件 /etc/logrotate.conf,可以在 /etc/logrotate.d 目录里放置自定义好的配置文件,用来覆盖logrotate的缺省值。


二.配置文件详解

/etc/logrotate.conf 是主配置文件
/etc/logrotate.d 是一个目录,该目录下的所有文件都会被主动的读到 /etc/logrotate.conf 中执行

配置项说明:

配置项 说明
compress 通过 gzip 压缩转储旧的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断,是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据
nocopytruncate 备份日志文件但是不截断
create mode owner group 使用指定的文件模式创建新的日志文件,如:create 0664 root utmp
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩
missingok 在日志转储期间,任何错误将被忽略
errors address 转储时的错误信息发送到指定的 Email 地址
ifempty 即使日志文件是空文件也转储,这个是 logrotate 的缺省选项
notifempty 如果日志文件是空文件的话,不转储
mail E-mail 把转储的日志文件发送到指定的 E-mail 地址
nomail 转储时不发送日志文件到 E-mail 地址
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储之前需要执行的命令可以放入这个对中,这两个关键字必须单独成行
postrotate/endscript 在转储之后需要执行的命令可以放入这个对中,这两个关键字必须单独成行
sharedscripts 所有的日志文件都转储完毕后统一执行一次脚本
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5个备份
size(minsize) logsize 当日志文件到达指定的大小时才转储,size 可以指定单位为k或M,如:size 500k,size 100M
dateext 指定转储后的日志文件以当前日期为格式结尾,如
dateformat dateformat 配合dateext使用,紧跟在下一行出现,定义日期格式,只支持%Y %m %d %s这4个参数,如:dateformat -%Y%m%d.%s

三.实战案例

1.nginx

cat > /etc/logrotate.d/nginx << eof
/usr/local/nginx/logs/*log {
    daily
    # 每天转储
    rotate 30
    # 保存30个备份
    missingok
    # 在日志转储期间,任何错误将被忽略
    notifempty
    # 文件为空时不转储
    compress
    # 通过 gzip 压缩
    dateext
    # 日志文件以当前日期为格式结尾
    sharedscripts
    # 所有日志文件转储完毕后执行一次脚本
    postrotate
    # 转储之后执行命令,和endscript成对使用
        /bin/kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid 2>/dev/null) 2>/dev/null || :
    endscript
    # 转储之后执行命令,和postrotate成对使用
}
eof

2.redis

cat > /etc/logrotate.d/redis << eof
/var/log/redis/*.log {
    weekly
    rotate 10
    copytruncate
    delaycompress
    compress
    notifempty
    missingok
}
eof

3.supervisor

cat > /etc/logrotate.d/supervisor << eof
/var/log/supervisor/*.log {
       missingok
       weekly
       notifempty
       nocompress
}
eof

4.yum

cat > /etc/logrotate.d/yum << eof
/var/log/yum.log {
    missingok
    notifempty
    yearly
    create 0600 root root
}
eof

5.httpd

cat > /etc/logrotate.d/httpd << eof
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}
eof

四.命令参数说明

使用 man logrotate 或者 logrotate --help 来查看相关命令参数

logrotate --help
Usage: logrotate [OPTION...] <configfile>
  -d, --debug              调试模式,输出调试结果,并不执行。隐式-v参数
  -f, --force              强制转储文件
  -m, --mail=command       发送邮件命令而不是用‘/bin/mail‘发
  -s, --state=statefile    状态文件,对于运行在不同用户情况下有用
  -v, --verbose            显示转储过程的详细信息

如果等不及cron自动执行日志转储,可以强制转储文件(-f 参数) ,正式执行前最好使用调试模式(-d 参数)

/usr/sbin/logrotate -f /etc/logrotate.d/nginx
/usr/sbin/logrotate -d -f /etc/logrotate.d/nginx

五.参考资料

运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)



以上是关于logrotate日志管理工具的主要内容,如果未能解决你的问题,请参考以下文章

logrotate日志管理工具

日志管理工具之logrotate

logrotate 日志管理

Linux自带 Logrotate 日志切割工具配置详解

Linux自带的logrotate 来管理日志

Linux下logrotate日志轮转操作梳理