Ubuntu Syslog存储空间管理
一 快速止血与定位
- 查看整体磁盘与日志占用
- 查看分区使用:df -h
- 查看大日志排行:sudo du -ah /var/log | sort -rh | head -n 20
- 安全释放空间(优先于删除文件)
- 清空正在写入的日志:sudo truncate -s 0 /var/log/syslog /var/log/auth.log
- 清理已轮转的旧日志:sudo find /var/log -name “*.gz” -mtime +7 -delete
- 快速判断“谁在疯狂写日志”
- 实时看最新内容:sudo tail -n 1000 /var/log/syslog | less
- 按错误/警告聚焦:sudo grep -iE “error|warn|fail” /var/log/syslog | tail -n 200
- 如系统使用 journald,一并检查其占用
- 查看占用:sudo journalctl --disk-usage
- 快速回收:sudo journalctl --vacuum-time=7d 或 sudo journalctl --vacuum-size=500M
二 长期治理 配置 logrotate 管理 syslog
- 编辑 rsyslog 的轮转策略
- 参数要点
- size:达到指定大小立即轮转
- maxsize:在周期内达到指定大小即轮转(与 daily/weekly 组合使用)
- rotate:保留的历史份数
- compress/delaycompress:压缩旧日志,delaycompress 常用于保留最新一份未压缩便于排查
- missingok/notifempty:容错与空文件不轮转
- create:轮转后重建文件并设定权限属主
- postrotate:通知 rsyslog 重新打开日志文件(避免句柄问题)
- 测试与生效
- 语法/演练:sudo logrotate -d /etc/logrotate.d/rsyslog
- 强制执行:sudo logrotate -f /etc/logrotate.d/rsyslog
- 无需重启 rsyslog;postrotate 会触发通知
三 控制 systemd journald 日志体积
- 编辑配置文件:sudo nano /etc/systemd/journald.conf
- 常用关键项
- SystemMaxUse=10G:持久化日志最大占用
- RuntimeMaxUse=10G:运行时(内存)日志最大占用
- MaxRetentionSec=2week:最长保留时间
- 使配置生效:sudo systemctl restart systemd-journald
- 按需回收:sudo journalctl --vacuum-size=500M 或 --vacuum-time=7d
四 源头治理与扩展建议
- 降低日志噪声(rsyslog)
- 编辑 /etc/rsyslog.conf 或 /etc/rsyslog.d/50-default.conf,收紧级别
- 例如:*.info;mail.none;authpriv.none;cron.none 调整为 *.warning;mail.none;authpriv.none;cron.none
- 容器场景
- 限制 Docker 容器日志大小(避免单个容器日志无限膨胀)
- 远程集中化
- 将日志发往远程日志服务器,减轻本机磁盘压力
- 在 rsyslog 配置中:. @remote_server_ip:514(UDP)或 @@remote_server_ip:514(TCP)
- 监控与告警
- 定期检查 /var/log 增长,结合监控报警,提前干预异常日志风暴