Linux 日志管理工具 | logrotate

logrotate 用来转储日志文件,分割压缩日志,删除旧的,创建新的

logrotate 一般系统会自带,不需要自己安装

logrotate 处理日志,依靠 cron 每天在执行时间自动执行


下面一段就描述了对 bootlog 的转储方式

# cat /etc/logrotate.d/bootlog

/var/log/boot.log
{
    missingok 		# 没有日志时跳过
    daily 		# 每天转储一次
    copytruncate 	# 日志备份并截断
    rotate 90 		# 转储次数
    notifempty 		# 日志为空时不处理
    dateext 		# 用当前日期命名
}

配置文件

  • 主配置是 /etc/logrotate.conf,自动执行的日志转储都通过主配置文件引入。

  • 默认引入的是 /etc/logrotate.d/ 目录,通常都放在这里。

  • 状态记录文件,/var/lib/logrotate/logrotate.status

  • 自动执行 logrotate,依赖 /etc/cron.daily/logrotate

  • 主配置中定义了公用的配置,根据需求进行配置

    • 轮询日志文件,每周一次。 weekly

    • 转储保存日志数量。rotate 4

    • 转储旧日志后,创建一个新日志文件。create

    • 转储日志用当前日期命名。dateext

    • 压缩转储后的日志。compress

  • 自定义配置项后,会覆盖主配置的默认值


配置参数说明

  • compress 用 gzip 压缩转储后的日志

  • nocompress 不压缩转储文件

  • copytruncate 日志文件备份并截断,先备份再清空,中间时间差可能会丢失日志

  • nocopytruncate 备份日志文件但不截断

  • create <mode owner group> 指定新建文件属性(权限 用户 用户组)

  • nocreate 不创建新文件

  • delaycompress 转储的文件到下一次才压缩

  • nodelaycompress 转储的同时压缩

  • missingok 日志不存在时跳过,继续下一个日志

  • errors <address> 转储的错误信息发送到指定邮箱

  • ifempty 日志为空时也进行转储

  • notifempty 日志为空时不转储

  • mail <address> 转储的日志文件发送到指定邮箱

  • nomail 转储时不发送日志文件

  • olddir <directory> 转储日志文件放到指定目录

  • noolddir 转储日志和当前日志放在同一目录

  • sharedscripts 执行 postrotate 脚本,所有日志转储后统一执行一次脚本

  • prerotate...endscript 转储前执行的脚本,需独立一行

  • postrotate...endscript 转储后执行脚本,需独立成行

  • daily 转储周期为每天一次

  • weekly 转储周期为每周一次

  • monthly 转储周期为每月一次

  • rotate <count> 转储文件保存个数,

  • dateext 转储文件命名格式为当前日期

  • dateformat <.%m> 转储文件命名格式,结合 dateext 使用,有 %Y、%m、%d、%s 四种格式

  • size <file size> 文件超过指定大小才会转储(如:100k、2M、5(byte))

  • minsize 作用同 size


默认运行时间

  • 运行时间由 cron 配置 /etc/anacrontab 决定
# 随机延迟 45min
RANDOM_DELAY=45
# 有效时间为 3-22 点
START_HOURS_RANGE=3-22
# /etc/cron.daily 执行周期为 1 天,延迟时间为 5min
1   5   cron.daily      nice run-parts /etc/cron.daily
  • 没关机的情况下,会在每天 3:05 ~ 3:50 之间执行

  • 有效时间内关机的情况下,会在开机 5min 后开始执行


logrotate 命令

logrotate [OPTION] <configfile>
  • -d, --debug,debug 模式,测试文件是否有错

  • -f, --force,强制转储

  • -v, --verbose,显示转储过程

  • -m, --mail=commend,压缩日志后发送到指定邮箱

  • -s, --state=statefile,指定状态文件


手动转储

  • 执行 /etc/logrotate.d/ 下的配置文件
logrotate -f -v /etc/logrotate.d/bootlog
  • 也可以执行其他目录自定义的配置文件,注意文件要有执行权限
logrotate -f -v /usr/batch/test
  • 想要固定时间执行,则把任务放在 crontab 中
0 23 * * * logrotate -f -v /usr/batch/test


自定义时可以参考现有文件,并结合可用参数,实现需求内容。

/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
posted @ 2023-03-21 15:05  菜乌  阅读(3212)  评论(0编辑  收藏  举报