Ubuntu日志轮转策略有哪些
导读:Ubuntu日志轮转策略全览 一 核心机制与触发条件 在 Ubuntu 中,日志轮转由 logrotate 统一管理,配置文件位于 /etc/logrotate.conf 与 /etc/logrotate.d/。系统通常通过 /etc/c...
Ubuntu日志轮转策略全览
一 核心机制与触发条件
- 在 Ubuntu 中,日志轮转由 logrotate 统一管理,配置文件位于 /etc/logrotate.conf 与 /etc/logrotate.d/。系统通常通过 /etc/cron.daily/logrotate 每日触发执行,并在 /var/lib/logrotate/status 记录最近轮转状态。常用触发与保留策略包括:按时间(如 daily/weekly/monthly/yearly)、按大小(size)、以及按保留个数(rotate)。例如:按天轮转并保留 7 天、或每周轮转并保留 4 周等。
二 常用策略与关键参数
- 下表汇总了实践中最常用、最实用的策略与参数(可按需组合使用):
| 策略/参数 | 作用与说明 | 典型示例 |
|---|---|---|
| 时间触发 | 按固定周期轮转 | daily / weekly / monthly / yearly |
| 大小触发 | 文件达到阈值即轮转 | size 100M;可与时间条件“或”逻辑组合 |
| 保留数量 | 控制历史副本个数 | rotate 7(保留7个旧日志) |
| 压缩归档 | 节省磁盘空间 | compress;配合 delaycompress 常用于 syslog |
| 空文件处理 | 空日志不轮转 | notifempty |
| 缺失文件处理 | 日志缺失不报错 | missingok |
| 新建日志 | 轮转后创建新文件并设定权限属主 | create 0640 root adm |
| 复制后截断 | 避免重启应用,先复制再清空原文件 | copytruncate(适用于不便发信号的应用) |
| 轮转后通知 | 让进程重新打开日志文件 | postrotate … endscript(如向进程发送 HUP/USR1) |
| 日期后缀 | 以日期命名旧日志,便于追溯 | dateext;dateformat -%Y%m%d |
| 共享脚本 | 多个日志共享同一 postrotate | sharedscripts |
- 说明:
- 时间触发与大小触发可组合,满足任一条件即轮转(例如:daily 且 size 50M)。
- 对 rsyslog/syslog 等常驻服务,常用 postrotate 触发 HUP 重载,或使用 copytruncate 避免重启。
- delaycompress 常与 compress 搭配,避免刚轮转出的日志立即被压缩,便于短期排查。
三 典型配置示例
- 示例一 系统日志 rsyslog(按周轮转,保留一年)
/var/log/syslog {
weekly
rotate 52
compress
delaycompress
missingok
notifempty
create 0640 root adm
postrotate
/usr/lib/rsyslog/rsyslogd reload >
/dev/null
endscript
}
- 示例二 Nginx 访问日志(按天或超 100MB 轮转,保留 30 天,日期后缀)
/var/log/nginx/*.log {
daily
size 100M
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
dateext
dateformat -%Y%m%d
sharedscripts
postrotate
nginx -s reopen
endscript
}
- 示例三 应用日志(按天轮转,保留 7 天,复制后截断)
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
create 0640 root adm
}
- 提示:不同服务的权限属主(如 root adm、www-data adm)应与实际运行用户匹配,避免写入失败。
四 验证与运维要点
- 语法与模拟:使用 logrotate -d /path/to/conf 进行干跑(调试模式),检查规则是否生效且无语法错误。
- 强制执行:使用 logrotate -f /etc/logrotate.conf 或针对单个配置 -f /etc/logrotate.d/xxx 强制触发一次轮转,便于验证。
- 定时与状态:确认 /etc/cron.daily/logrotate 存在且可执行;查看 /var/lib/logrotate/status 了解最近轮转时间与结果。
- 应用通知:对需要重新打开日志的守护进程,优先使用 postrotate … endscript 发送信号(如 HUP/USR1);若不便发信号,再考虑 copytruncate。
- 权限与属主:确保 create 指定的 mode/owner/group 与应用运行身份一致,避免轮转后无法写入。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu日志轮转策略有哪些
本文地址: https://pptw.com/jishu/748023.html
