Ubuntu日志存储优化方法
一 系统级日志 journald 优化
- 限制总体积与单文件大小:编辑 /etc/systemd/journald.conf,设置如 SystemMaxUse=1G、SystemMaxFileSize=100M,按需调整;保存后执行 sudo systemctl restart systemd-journald 生效。
- 立即回收空间:查看占用 sudo journalctl --disk-usage;按时间保留 sudo journalctl --vacuum-time=7d;按大小保留 sudo journalctl --vacuum-size=500M;按服务保留 sudo journalctl --vacuum-time=7d -u nginx.service。
- 建议同时配置保留下限与运行时上限(如 SystemKeepFree=500M、RuntimeMaxUse=200M),避免磁盘被日志打满。
二 应用与 Syslog 日志轮转 logrotate
- 编辑服务专属配置:在 /etc/logrotate.d/rsyslog(或应用配置如 /etc/logrotate.d/apache2)中设置轮转策略,示例:
/var/log/syslog {
daily
size 100M
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root adm
}
- 关键参数说明:
- size 与 daily/weekly/monthly 可组合,任一条件先满足即轮转;
- maxsize 可在周期内强制滚动;minsize 要求达到最小尺寸且时间条件满足才滚动;
- compress/delaycompress 节省空间;missingok/notifempty/create 提升稳健性。
- 测试与生效:调试 sudo logrotate -d /etc/logrotate.d/rsyslog;强制执行 sudo logrotate -f /etc/logrotate.d/rsyslog;logrotate 默认由 /etc/cron.daily/logrotate 每日运行。
三 日志级别与输出路径优化
- 降低日志噪声:在 /etc/rsyslog.conf 或 /etc/rsyslog.d/*.conf 调整设施/优先级,例如将 *.info 调整为 *.warning,减少低级别日志写入。
- 分离与集中:按设施拆分输出(如 auth,authpriv. → /var/log/auth.log*,cron. → /var/log/cron.log*),便于保留策略与访问控制;必要时将日志转发到集中目录(如 /var/log/centralized/)以便统一分析与归档。
- 谨慎操作:修改前备份配置;变更后 sudo systemctl restart rsyslog 使配置生效。
四 自动化分析与告警
- 轻量日报:安装 logwatch,配置 /usr/share/logwatch/default.conf/logwatch.conf(如 MailTo=you@example.com),通过系统定时器每日发送摘要。
- 自定义指标与阈值:用 Shell 脚本统计 ERROR 数量并写入趋势文件,配合 cron 定时执行,超过阈值时触发邮件告警。
- 大规模集中分析:部署 ELK Stack(Elasticsearch+Logstash+Kibana) 或 Graylog,对集中日志进行解析、索引、可视化与告警。
五 日常维护与应急清理
- 快速定位大文件:执行 sudo du -sh /var/log 找出占用空间最大的日志目录与文件。
- 安全清理:优先使用 journalctl --vacuum-time/–vacuum-size 回收 journal 空间;对应用日志优先用 logrotate 轮转与压缩,必要时可 > /var/log/app.log 清空内容(避免直接删除正在写入的文件)。
- 变更风险控制:修改 rsyslog/journald 配置务必先备份;涉及服务重启请在维护窗口进行,并观察 systemctl status 与日志写入是否正常。