Logrotate 是一个用于管理系统日志文件的工具,广泛应用于类 Unix 系统中(如 Linux)来防止日志文件占用过多磁盘空间。通过定期的轮转(rotation)、压缩、删除和归档日志文件,logrotate 保持系统的日志管理高效且可维护。
1. 基本概念
- 日志轮转(Log Rotation):logrotate 通过将旧日志文件轮转为新的文件,从而防止单个日志文件变得过大。轮转后的旧文件通常可以被压缩或删除。
- 自动化管理:logrotate 自动化了日志文件的管理,无需手动清理。它支持根据大小、时间或者其他规则来自动轮转日志。
- 配置文件驱动:logrotate 通过配置文件控制轮转策略,并为每个日志文件设置不同的管理规则。
2. 核心功能
- 日志文件轮转:将现有的日志文件重命名(例如将
logfile
重命名为logfile.1
),并创建新的日志文件供系统继续写入。 - 压缩:支持对旧日志文件进行压缩,以节省磁盘空间。常见的压缩方法包括 gzip。
- 日志保留:可配置保留一定数量的旧日志文件,超出该数量后自动删除最早的日志。
- 定期轮转:基于时间或日志文件大小定期执行轮转操作。例如,可以配置每周轮转一次,或者当日志文件达到特定大小时进行轮转。
- 归档或删除:支持将旧的日志文件归档到特定位置,或在达到一定年龄后删除它们。
- 日志信号处理:日志轮转后,可以通过发信号通知应用程序继续使用新的日志文件。例如,
postrotate
脚本可以发送 SIGHUP 信号来重启服务,使服务重新打开新的日志文件。
3. 工作流程
- logrotate 根据配置文件中定义的规则,定期检查系统中的日志文件。
- 如果日志文件符合轮转条件(如达到指定大小或时间),logrotate 会将旧日志文件重命名或压缩。
- 创建新的日志文件,原来的进程可以继续写入。
- 根据配置保留一定数量的旧日志,删除过期日志。
- 可配置执行额外的脚本来通知服务进程,或者对日志进行其他处理。
4. 配置文件
logrotate 的配置文件位于 /etc/logrotate.conf
,同时 /etc/logrotate.d/
目录下存放的是不同服务或应用的日志轮转规则。
配置文件示例
/var/log/nginx/*.log {
daily # 每天轮转一次
missingok # 如果日志文件不存在则跳过不报错
rotate 7 # 保留7个备份文件
compress # 压缩旧的日志文件
delaycompress # 延迟到下次轮转时再压缩
notifempty # 如果日志为空则不轮转
create 0640 www-data www-data # 轮转后创建新的日志文件,并设置权限和所属用户
postrotate # 轮转后执行的命令
/usr/sbin/nginx -s reload
endscript
}
常用选项说明
daily
,weekly
,monthly
:设置日志轮转频率,分别为每天、每周、每月轮转一次。size
:根据日志文件大小进行轮转,例如size 100M
表示文件超过 100MB 时轮转。compress
,delaycompress
:是否对日志进行压缩,以及是否延迟压缩。rotate
:设置保留的旧日志文件的数量。notifempty
:如果日志文件为空,则跳过轮转。create
:轮转后创建新的日志文件,并指定文件权限和所有者。postrotate
,prerotate
:在日志轮转前后执行的自定义命令。
5. 常见用例
- 系统日志管理:通过 logrotate 自动化管理
/var/log
目录下的系统日志,防止日志文件占用过多空间。 - Web 服务器日志:nginx、Apache 等服务器生成的访问日志和错误日志可通过 logrotate 自动归档和压缩,保持日志管理的简洁。
- 数据库日志管理:数据库如 MySQL、PostgreSQL 生成大量日志,使用 logrotate 定期轮转和清理有助于保持磁盘空间的高效利用。
6. 扩展功能
- 定制轮转脚本:除了标准配置外,logrotate 允许用户编写自定义脚本在轮转之前或之后执行。例如,重启服务或将日志文件备份到远程服务器。
- 集成系统任务调度:logrotate 通常与 cron 或系统任务调度程序集成,定期运行以检查并处理日志。
7. 总结
logrotate 是一种强大且灵活的日志管理工具。它不仅适用于系统日志,也可以用于应用程序和服务生成的日志文件管理。通过 logrotate,用户可以自动化管理日志文件的大小和数量,减少手动干预,保障系统的稳定性和日志文件的可维护性。