Ubuntu Syslog 日志存储策略选型与落地
一 架构与组件选择
- 现代 Ubuntu 同时存在两套日志栈:一是 systemd-journald(二进制、结构化、集中式),二是 rsyslog(文本文件、规则化输出到 /var/log/)。二者可协同工作:journald 负责采集与索引,rsyslog 负责按文件与业务维度落盘与转发。默认 Storage=auto,当 /var/log/journal 存在时使用持久化,否则仅保存在内存(重启丢失)。建议服务器环境启用持久化,以获得完整的审计与取证能力。对于高并发/结构化查询场景,优先利用 journald 的索引与二进制存储;对于传统运维与合规归档,依赖 rsyslog 的文本文件与 logrotate 更直观。
二 容量与保留策略设计
- 容量上限与保留时间建议以“上限约束 + 时间保留”双轨制设计:
- journald:通过 SystemMaxUse/RuntimeMaxUse 设置日志最大占用(如 1–10G),通过 MaxRetentionSec 设置最长保留(如 2weeks)。到达上限或超期自动清理最旧数据,便于严格控盘。
- rsyslog:通过 logrotate 的 size/maxsize + rotate 组合间接控制总量。例如:单个文件 100M、保留 100 个,理论总量约 10G(实际会有波动)。也可按天轮转并限制份数(如 daily + rotate 7)。
- 快速对照
- 严格控盘:journald 配额(SystemMaxUse/MaxRetentionSec)
- 易运维与归档:rsyslog + logrotate(size/maxsize + rotate)
- 统一查询:journald 为主,rsyslog 文本为辅
- 示例目标:本地总日志容量不超过 10G,关键文本日志保留 ≥7 天,审计类保留 ≥2 周。
三 推荐方案与配置示例
四 运维与应急要点
- 观测与容量评估
- 查看 journal 占用:journalctl --disk-usage
- 按条件清理:journalctl --vacuum-size=500M 或 --vacuum-time=1week
- 变更与演练
- 测试 logrotate 规则:logrotate -d /etc/logrotate.d/rsyslog(调试不生效),确认无误后再执行
- 突发爆量处置
- 临时释放空间:truncate -s 0 /var/log/syslog(先定位根因,再清理)
- 若由 Docker 容器产生大量日志,限制驱动与大小(如 json-file:max-size=10m,max-file=3)
- 安全与合规
- 限制访问权限(如 /var/log 下关键文件 0640 root adm),必要时启用 journald 的 ForwardSecureSealing=FSS 做防篡改取证(需额外密钥管理)。