日志清理工具 - logrotate

logrotate 是一个用于管理和轮换日志文件的工具,它主要用于控制日志文件的大小、防止日志文件占用过多的磁盘空间,以及自动删除旧的日志文件。logrotate 通常在 Linux 系统上运行,并且可以通过配置文件自动处理日志文件的轮换和压缩。

一、功能介绍

logrotate 具有以下主要功能:

  1. 日志轮换:当日志文件达到指定大小或时间时,logrotate 会将当前日志文件重命名,并开始一个新的日志文件。
  2. 日志压缩:可以在日志轮换之后对旧日志进行压缩,以节省磁盘空间。
  3. 日志删除:可以设置保留的旧日志文件的数量,并自动删除超出保留数量的旧日志。
  4. 日志的周期性管理:支持基于时间(如每天、每周、每月)或文件大小的日志轮换。
  5. 钩子脚本:可以在日志轮换前后执行自定义脚本,以进行额外的处理。

二、配置文件

logrotate 的配置文件通常位于 /etc/logrotate.conf,而其他日志文件的具体配置可能会放在 /etc/logrotate.d/ 目录下的各个配置文件中。

2.1 配置示例

下面是一个简单的 logrotate 配置示例:

/var/log/myapp/*.log {
    daily                # 每天轮换日志
    rotate 7             # 保留7个轮换的日志文件
    compress             # 轮换后压缩日志文件
    missingok            # 如果日志文件不存在,不报错
    notifempty           # 如果日志文件为空,不进行轮换
    create 0640 root root # 创建新的日志文件时的权限和属主
    postrotate           # 轮换后执行的命令
        systemctl reload myapp.service
    endscript
}

daily:指定日志文件轮换的频率(可选 dailyweeklymonthly 等)。

rotate:指定保留的旧日志文件数量。

compress:指定是否压缩旧的日志文件。

missingok:如果日志文件不存在,不报错也不中止操作。

notifempty:如果日志文件为空,不进行轮换。

create:创建新的日志文件时的权限和所有者。

postrotateendscript:轮换后执行的命令,例如重新加载服务以便新日志文件生效。

另外,针对那些不能关闭并重新打开日志文件的服务或应用程序可以使用copytruncate选项,当使用 copytruncate 选项时,logrotate 会执行以下操作:

  1. 复制当前日志文件:首先将当前的日志文件复制为一个新文件,通常带有日期或数字的后缀。
  2. 截断原日志文件:然后,将原来的日志文件截断(内容清空),以便继续接受新日志数据的写入。

2.2 使用方法

  1. 手动测试配置:可以通过命令 logrotate -d /etc/logrotate.conf 来测试配置文件,而不实际进行日志轮换。
  2. 强制轮换:使用 logrotate -f /etc/logrotate.conf 可以强制立即进行日志轮换,而不考虑日志文件是否达到配置的条件,正常可以去掉。
  3. 查看日志logrotate 的运行日志通常会记录在 /var/lib/logrotate/status 中。

通过合理的配置和使用 logrotate,可以有效地管理和维护系统的日志文件,确保系统的稳定性和日志管理的效率。

-- EOF --
最后更新于: 2024-09-01 10:50
发表于: 2021-12-22 10:28
标签: 运维