• 对于注定会优秀的人来说,他所需要的,只是时间!
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!

Logrotate入门了解及生产实践

日志管理 eryajf 12个月前 (04-28) 588°C 已收录 0个评论
本文预计阅读时间 8 分钟

1,简单了解

logrotate在CentOS系统中是默认安装的日志轮替组件,通过如下命令可以看到主配置内容:

egrep -v '^$|^#' logrotate.conf
weekly
rotate 4
create
dateext
include /etc/logrotate.d
/var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

这个配置当中其他内容基本上可以忽略,主要内容是第6行的引用,我们新增一些日志管理策略也都可以在这个目录下创建相关策略来维护。

logrorate默认在系统的 /etc/cron.daily中存放了一个执行脚本,因此默认情况下脚本将会每天执行一次:

$cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

了解了这些基本信息之后,就可以对这个工具投入使用了,不过还需要了解一下配置文件中的参数意义,以便配制出符合自己需求的轮替脚本。

2,配置了解

  • compress:通过gzip,压缩转储以后的日志
  • nocompress:不需要压缩时,用这个参数
  • copytruncate:用于还在打开中的日志文件,把当前日志备份并截断
  • nocopytruncate:备份日志文件但是不截断
  • createmodeownergroup:转储文件,使用指定的文件模式创建新的日志文件
  • nocreate:不建立新的日志文件
  • delaycompresscompress:一起使用时,转储的日志文件到下一次转储时才压缩
  • missingok:在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
  • nodelaycompress:覆盖delaycompress选项,转储同时压缩。
  • errorsaddress:专储时的错误信息发送到指定的Email地址
  • ifempty:即使是空文件也转储,这个是logrotate的缺省选项。
  • notifempty:如果是空文件的话,不转储
  • mailaddress:把转储的日志文件发送到指定的E-mail地址
  • nomail:转储时不发送日志文件
  • dateext:转储后的日志文件以日期命名
  • olddirdirectory:转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
  • noolddir:转储后的日志文件和当前日志文件放在同一个目录下
  • prerotate/endscript:在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
  • postrotate/endscript:在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
  • daily:指定转储周期为每天
  • weekly:指定转储周期为每周
  • monthly:指定转储周期为每月
  • rotatecount:指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
  • size(或minsize):size当日志文件到达指定的大小时才转储,Size可以指定bytes(缺省)以及KB(sizek)或者MB(sizem)

以上是一些常用的配置,可以按需定义自己的配置文件。

3,生产案例

接下来介绍几个生产当中常用的例子,可以直接借鉴以使用。

1,NGINX日志

NGINX日志的处理是一种常见的场景,处理的方式用的较多的是结合logrotate来进行处理,当然也可以基于NGINX自身的配置文件策略对日志进行自动切割,此种方案可以参考另外一篇文章:从NGINX自身配置文件中定义访问日志按时间切割,这里则介绍logrotate方案的具体配置方式。

/etc/logrotate.d下添加如下配置:

$ cat /etc/logrotate.d/nginx

/data/log/access.log
/data/log/error.log
{
    daily
    dateext
    missingok
    rotate 7
    notifempty
    create 755 www
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

这个案例是针对这种提供了平滑过渡日志写操作的脚本,其他类似的应用日志也可以套用这个地方的配置。

当我们配置添加之后,等不了系统的执行,想要自己看一下效果,可用如下命令手动运行:

logrotate -f /etc/logrotate.d/nginx

2,catalina日志

catalina是一个代指,与上边配置相对的,特指那种始终写到一个文件里,自身没有任何轮替策略,也无法通过调用所有平滑过渡来处理的情况下,可以使用如下配置对日志进行处理。

配置如下:

$ cat /etc/logrotate.d/catalina
/data/log/catalina.log 
{
    missingok
    copytruncate
    compress
    dateext
    notifempty
    daily
    rotate 7
    create 755 root root
}

这个配置文件看起来与上边的区别除了脚本的处理之外,还多了一个重要的配置是 copytruncate,如果你在配置了rotate策略之后,发现日志转储了,但是写的对象也转移到了转储之后的文件了,那么应该就是漏了这个配置项。

3,日志量大

有时候可能业务量非常大,默认的按天切割就有点不大能够满足我们的需求,磁盘可能很快就要满了,这个时候可以将策略自定义为每小时执行一次。

$ cat /etc/logrotate.d/nginx

/data/log/access.log
/data/log/error.log
{
    hourly
    dateext
    missingok
    rotate 7
    notifempty
    create 755 www
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

然后记得把执行脚本往小时执行池子里拷贝一份:

$ cp /etc/cron.daily/logrotate /etc/cron.hourly/

当然也可将策略调整为按大小进行切割,这个方案也是可以的,这里就不做示例了。


weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Logrotate入门了解及生产实践
喜欢 (0)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!永远不要忘记,激情的奋进,就是美好的未来!

您必须 登录 才能发表评论!