logrotate是基于crontab运行的,其脚本是/etc/cron.daily/logtotate,日志轮转是系统自发完成的,实际运行时,logrotate会调用配置文件/etc/logrotate.conf。可以在/etc/logrotate.d目录里放置自定义好的配置文件,用来覆盖logrotate.conf的缺省值。
生产中主机日志目录几乎都挂载在根目录/下,/空间往往比较小,主机频繁操作会导致主机日志增长较快撑满/目录导致主机无法执行操作命令; 应用服务日志也面临同样的问题,部分生产应用服务可能未设置日志大小和按日期自动轮换,导致单个应用服务日志较大,或者日志增长较快应用服务目录空间被打满,导致应用服务不可用。 人工处理日志可能会涉及到用户权限问题,人工频繁强制删除可能会导致出现故障时也无法回溯问题原因。
logrodate就能够完美自动解决这些问题。
3.1 /etc/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
{
# 日志文件轮转周期,可用值为: daily/weekly/yearly
daily
# 新日志文件的权限
create 0644 root root
# 轮转次数,即最多存储7个归档日志,会删除最久的归档日志
rotate 2
# 以当前日期作为命名格式
dateext
# 轮循结束后,已归档日志使用gzip进行压缩
compress
# 忽略错误信息
missingok
# 日志文件为空,轮循不会继续执行
notifempty
# 当日志文件大于指定大小时,才继续执行,单位为bytes(默认)/k/M/G
size = 100M
copytruncate
}
# /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 -fv /etc/logrotate.d/shsnc-logrotate_log #为特定的配置文件调用

下面是执行后生产的压缩包


本文作者:事业二部(上海新炬中北团队)
本文来源:“IT那活儿”公众号





