如何通过Ubuntu日志优化磁盘使用
小樊
42
2025-12-29 14:30:45
Ubuntu日志优化磁盘使用的实操指南
一 快速定位占用
- 查看 systemd 日志占用:运行命令:sudo journalctl --disk-usage,确认是否由 journald 占用过多空间。
- 查看传统日志目录:运行命令:sudo du -sh /var/log,定位 /var/log 下的大文件或子目录。
- 实时监控与排查:用 tail -f /var/log/syslog、grep、awk 等快速筛查异常输出或高频日志来源。
二 清理与压缩现有日志
- 清理 systemd 日志(journald):
- 按时间保留:sudo journalctl --vacuum-time=7d(保留最近 7 天)。
- 按大小保留:sudo journalctl --vacuum-size=500M(保留最近 500MB)。
- 按服务清理:sudo journalctl --vacuum-by-service=ssh.service(示例为 ssh.service)。
- 清理传统文本日志(/var/log):
- 清空而非删除正在写入的日志:sudo truncate -s 0 /var/log/syslog;必要时对 /var/log/auth.log 等执行相同操作。
- 删除已轮转的旧文件:sudo rm /var/log/*.gz;如需删除 syslog.1 等历史轮转文件,建议先重启 rsyslog(sudo systemctl restart rsyslog)以避免写入冲突。
- 立即触发一次轮转(让 logrotate 压缩与清理生效):sudo logrotate -f /etc/logrotate.conf。
三 配置自动轮转与压缩 logrotate
- 编辑 rsyslog 的轮转策略:sudo nano /etc/logrotate.d/rsyslog,示例:
- 按大小触发:/var/log/syslog { size 100M; rotate 4; compress; delaycompress; missingok; notifempty; create 0640 root adm }
- 按天触发:/var/log/syslog { daily; rotate 7; compress; delaycompress; missingok; notifempty; create 0640 root adm }
- 说明:
- size 100M 表示文件达到 100MB 即轮转;daily 表示按天轮转。
- rotate 4/7 表示保留 4/7 个历史副本;compress 与 delaycompress 用于压缩节省空间;create 指定新日志文件的权限与属主。
四 从源头减少日志量
- 调整 rsyslog 日志级别:编辑 /etc/rsyslog.conf 或 /etc/rsyslog.d/50-default.conf,将 *.info;mail.none;authpriv.none;cron.none 调整为 *.warning;mail.none;authpriv.none;cron.none,减少 info 级别日志。
- 限制 journald 增长:编辑 /etc/systemd/journald.conf,按需设置如 SystemMaxUse=500M、SystemMaxFileSize=100M,保存后重启 systemd-journald(sudo systemctl restart systemd-journald)。
- 减少不必要服务日志:对不需要的服务执行 sudo systemctl disable service_name;对应用(如 Apache/Nginx)可在其配置中降低日志级别或关闭访问日志(视业务而定)。
- 启用异步日志(若应用支持):可降低同步写入带来的 I/O 压力。
五 建立长期维护机制
- 定时清理 journald:在 crontab -e 中添加任务,例如每天 01:00 保留最近 7 天:0 1 * * * journalctl --vacuum-time=7d。
- 定时触发 logrotate:例如每天 02:00 强制执行:0 2 * * * /usr/sbin/logrotate -f /etc/logrotate.conf。
- 持续监控:定期查看 journalctl --disk-usage 与 du -sh /var/log,并结合 logwatch、ELK Stack 或 Graylog 做可视化与告警。
注意事项
- 清理日志前建议备份关键日志;避免直接删除正在写入的日志文件,优先使用 truncate -s 0 或让 logrotate 处理。
- 修改 rsyslog 或 journald 配置后,按需重启服务(如 sudo systemctl restart rsyslog、sudo systemctl restart systemd-journald)。
- 生产环境调整日志级别与保留策略时,兼顾审计与合规要求,确保保留足够的历史用于故障排查与安全审计。