Syslog 日志轮转与备份的关键在于可靠实现,需通过 logrotate 自动化轮转、启用 syslog-ng 磁盘队列防丢失、同步备份配置与状态文件、并结合远程归档满足合规要求。

Syslog 日志轮转与备份不是“做不做”的问题,而是“怎么做才可靠”的问题。关键在于兼顾可用性、可追溯性和存储效率,避免日志堆积挤占磁盘,又不因配置疏漏导致关键事件丢失。
用 logrotate 实现自动化轮转
logrotate 是大多数 Linux 发行版默认预装的成熟工具,适合作为日志生命周期管理的第一道防线。
- 配置文件建议放在 /etc/logrotate.d/syslog-ng 或 /etc/logrotate.d/rsyslog,而非直接修改主配置,便于维护和隔离
- 典型策略示例中,daily + rotate 7 + compress 覆盖日常运维需求;若日志量大,可改用 size=100M 替代时间周期
- delaycompress 很重要:它确保最新一轮日志(如 syslog.1)暂不压缩,方便紧急时快速 grep 查阅,下一轮才压缩为 syslog.2.gz
- 务必加上 postrotate 段落,例如调用 /usr/bin/systemctl reload rsyslog.service 或 syslog-ng -s,确保服务识别新日志文件句柄
保留未发送日志的磁盘队列
对于使用 syslog-ng 的场景,磁盘队列是防止网络中断或目标不可达时日志丢失的核心机制。
- 在 destination 配置中启用 reliable(yes),并指定独立的 dir("/var/lib/syslog-ng/disk-buffer")
- 避免将磁盘队列目录设在根分区或 /var 分区——推荐挂载专用小容量 SSD 分区,防止队列填满影响系统其他服务
- 定期检查该目录大小:du -sh /var/lib/syslog-ng/disk-buffer;若持续增长,说明下游(如远程服务器或 Elasticsearch)写入异常,需及时排查
配置与状态文件必须同步备份
日志内容会滚动,但配置和处理状态一旦损坏,整个日志链就可能断裂。
- 每次修改 /etc/syslog-ng/syslog-ng.conf 或 /etc/rsyslog.conf 后,立即执行:tar -czf config-$(date +%Y%m%d-%H%M).tar.gz /etc/syslog-ng /var/lib/syslog-ng/syslog-ng.persist
- syslog-ng.persist 文件记录了每个日志源的读取偏移,重启后依赖它继续消费,丢失会导致重复或跳过日志
- 建议将备份推送到异地或对象存储(如 S3 兼容接口),不能只存本地——单点故障风险极高
远程归档作为长期备份兜底
本地轮转解决空间问题,远程归档解决合规与审计留存要求。
- syslog-ng 可直连远程目标:配置 destination d_remote { http("https://logs.example.com/api/v1" ...); };,支持 TLS 和认证
- rsyslog 推荐使用 omelasticsearch 或 omfwd 模块,将日志发往集中式平台(如 ELK、Loki),同时开启索引快照功能实现周期归档
- 若无专用平台,可用 rsync + cron 每日增量同步到另一台机器:rsync -a --delete /var/log/ user@backup-host:/backup/logs/

















