暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

logrotate自动轮换切割压缩和清理历史日志场景介绍

IT那活儿 2023-09-22
904
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

logrotate简介
logrotate是一个linux系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间/大小进行切割、压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。

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


适用场景
在生产中常常面临日志文件增长较快,不断消耗磁盘空间,甚至撑满磁盘空间影响生产服务运行。比如:
  • 生产中主机日志目录几乎都挂载在根目录/下,/空间往往比较小,主机频繁操作会导致主机日志增长较快撑满/目录导致主机无法执行操作命令;
  • 应用服务日志也面临同样的问题,部分生产应用服务可能未设置日志大小和按日期自动轮换,导致单个应用服务日志较大,或者日志增长较快应用服务目录空间被打满,导致应用服务不可用。
  • 人工处理日志可能会涉及到用户权限问题,人工频繁强制删除可能会导致出现故障时也无法回溯问题原因。

logrodate就能够完美自动解决这些问题


配置文件选项介绍

3.1 /etc/logrotate.conf 主配置文件

3.2 /etc/logrotate.d/ 该目录下的所有文件都会自动被读入到logrotate.conf文件中
  • compress             --> 压缩日志文件的所有非当前版本;

  • daily,weekly,monthly --> 按指定计划轮换日志文件;

  • delaycompress        --> 压缩所有版本,除了当前和下一个最近的;

  • endscript            --> 标记 prerotate 或 postrotate 脚本的结束;

  • errors "emailid"     --> 给指定邮箱发送错误通知;

  • missingok            --> 如果日志文件丢失,不要显示错误;

  • notifempty           --> 如果日志文件为空,则不轮换日志文件;

  • olddir "dir"         --> 指定日志文件的旧版本放在 “dir” 中;

  • postrotate           --> 引入一个在日志被轮换后执行的脚本;

  • prerotate            --> 引入一个在日志被轮换前执行的脚本;

  • rotate 'n'           --> 在轮换方案中包含日志的 n 个版本;

  • sharedscripts        --> 对于整个日志组只运行一次脚本;

  • size='logsize'       --> 在日志大小大于 logsize(例如 10K,5M)时轮换。

日志轮换实例
下面以生产中的系统内置日志 var/log/messages、/var/log/secure的配置文件为例

# 指定需要轮转处理的日志文件
/var/log/messages
/var/log/secure
{
    # 日志文件轮转周期,可用值为: daily/weekly/yearly
    daily
    # 新日志文件的权限
    create 0644 root root
    # 轮转次数,即最多存储7个归档日志,会删除最久的归档日志
    rotate 2
    # 以当前日期作为命名格式
    dateext
    # 轮循结束后,已归档日志使用gzip进行压缩
    compress
    # 忽略错误信息
    missingok
    # 日志文件为空,轮循不会继续执行
    notifempty
    # 当日志文件大于指定大小时,才继续执行,单位为bytes(默认)/k/M/G
    size = 100M
    copytruncate
}


查看配置切割生效时间
cat /etc/anacrontab 此文件有生效时间。
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45 #延迟时间45分钟
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22 #生效时间范围是3点到22点
#period in days delay in minutes job-identifier command
1       5       cron.daily nice run-parts /etc/cron.daily
7       25      cron.weekly nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly nice run-parts /etc/cron.monthly

这里配置好的messages、secure切割日志配置文件,生效时间是在03:00到22:00点之间,随机延迟时间是45分钟(时间可根据实际情况自定义更改)。


常用参数介绍及演练

logrotate [OPTION...] <configfile>

  • -d, --debug :debug模式,测试配置文件是否有错误;
  • -f, --force :强制转储文件;
  • -m, --mail=command :压缩日志后,发送日志到指定邮箱;
  • -s, --state=statefile :使用指定的状态文件;
  • -v, --verbose :显示转储过程。
logrotate 可在任何时候通过手动命令调用:
  • logrotate  -fv /etc/logrotate.d/shsnc-logrotate_log  #为特定的配置文件调用
  • 下面是执行后生产的压缩包

END


本文作者:事业二部(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论