直接配置 rsyslog 实现核心服务日志聚合归档需三点:统一接收来源、按规则分类存储、配合外部机制归档;通过启用 imjournal 模块确保日志接入,用模板按主机+日期生成文件,结合 logrotate 实现每日轮转、压缩与30天清理,并可选配远程 TCP 转发集中归档。

直接配置 rsyslog 实现核心服务日志的聚合归档,关键在于三点:统一接收来源、按规则分类存储、配合外部机制完成归档。它本身不提供“自动压缩打包”或“跨天迁移”功能,但可通过模板 + 轮转 + 定时脚本组合达成目标。
一、确保所有核心服务日志进入 rsyslog 流程
Linux 系统中,多数核心服务(如 sshd、crond、kernel、systemd 服务)默认已通过 journald → rsyslog 或直接 syslog 接口输出日志。需确认:
- rsyslog 正在读取 journald:检查
/etc/rsyslog.conf是否启用imjournal模块(常见于新版系统); - 若使用传统 syslog 接口,确认服务未绕过 rsyslog(例如某些容器内进程直接写文件);
- 避免重复采集:禁用本地文件写入规则(如
*.* /var/log/messages),改由集中模板接管。
二、用模板实现按主机+日期聚合存储
在 /etc/rsyslog.d/99-aggregate.conf 中添加:
$template AggLog,"/var/log/aggregate/%HOSTNAME%-%$YEAR%%$MONTH%%$DAY%.log" *.* ?AggLog & ~
说明:
-
%HOSTNAME%区分不同服务器,%$YEAR%%$MONTH%%$DAY%实现每日一个文件; -
& ~阻止日志继续向下匹配其他规则(防止重复落盘); - 目录需提前创建并授权:
sudo mkdir -p /var/log/aggregate && sudo chown syslog:adm /var/log/aggregate。
三、用 logrotate 实现自动归档与清理
rsyslog 不处理压缩和过期清理,交给 logrotate 更可靠。新建配置 /etc/logrotate.d/rsyslog-aggregate:
/var/log/aggregate/*.log {
daily
missingok
rotate 30
compress
delaycompress
sharedscripts
postrotate
systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}效果:
- 每天切分一次,保留最近 30 天;
- 自动压缩旧文件(如
xxx.log.1.gz); -
postrotate通知 rsyslog 重新加载,避免句柄残留。
四、可选:远程集中归档(多机场景)
若有多台服务器,可在一台中心节点部署 rsyslog 服务端,客户端统一转发:
- 服务端启用 TCP 监听:
module(load="imtcp") input(type="imtcp" port="514"); - 服务端模板改为:
$template CentralAgg,"/var/log/central/%FROMHOST-IP%-%$YEAR%%$MONTH%%$DAY%.log"; - 客户端配置:
*.* @@log-server-ip:514(TCP 更稳,防丢日志)。
不复杂但容易忽略


















