rsyslog统一日志收集系统核心是让多台linux服务器将日志发送至中心服务器,按来源ip和程序名分类存储;中心端需启用tcp监听514端口并配置remotelog模板,客户端用@@转发关键日志,配合防火墙放行、时间同步与权限管控确保稳定运行。

用 rsyslog 搭建统一日志收集系统,核心是让多台 Linux 服务器把日志发到一台中心服务器,再按来源分类存储、便于查看和后续分析。它不依赖复杂组件,轻量、稳定、原生支持,适合大多数中小规模运维场景。
一、中心服务器:开启接收并按 IP 分类存日志
在选定的那台日志服务器上操作:
- 确保已安装 rsyslog(多数系统默认自带;如无,运行 sudo apt install rsyslog 或 sudo yum install rsyslog)
- 编辑 /etc/rsyslog.conf,取消以下两行注释启用 TCP 接收(更可靠,推荐):
$ModLoad imtcp
$InputTCPServerRun 514 - 新建配置文件 /etc/rsyslog.d/01-remote.conf,加入模板与规则:
$template RemoteLog,"/var/log/remote/%FROMHOST-IP%/%PROGRAMNAME%.log"
*.* ?RemoteLog & ~
这样所有远程日志会按发送方 IP 和程序名(如 sshd、nginx)自动分目录存放,& ~ 防止重复写入本地日志 - 创建存储目录并设权限:
sudo mkdir -p /var/log/remote
sudo chown root:root /var/log/remote
sudo chmod 700 /var/log/remote - 重启服务:sudo systemctl restart rsyslog,再用 sudo ss -tnlp | grep :514 确认监听成功
二、客户端:只转发关键日志,减少冗余流量
在每台需上报日志的业务服务器上配置:
- 编辑 /etc/rsyslog.d/99-log-forward.conf(避免覆盖主配置)
- 添加转发规则,例如只传认证类日志(最常用且安全敏感):
auth,authpriv.* @@192.168.1.100:514
注意是双 @@,表示走 TCP 协议;把 192.168.1.100 替换为你的中心服务器真实 IP - 如需同时传系统错误和内核消息,可追加一行:
kern.err;*.err @@192.168.1.100:514 - 保存后执行 sudo systemctl restart rsyslog,稍等片刻即可在中心服务器的 /var/log/remote/客户端IP/ 下看到对应日志文件
三、验证与日常维护要点
别只靠重启就认为万事大吉,这几步检查能快速定位常见问题:
- 网络连通性:从客户端执行 telnet 192.168.1.100 514,能连通说明防火墙放行了 TCP 514 端口(服务端需开 firewall-cmd --add-port=514/tcp --permanent && firewall-cmd --reload)
- 时间同步:所有服务器运行 timedatectl status,确保时间偏差 ≤1 秒,否则日志时间戳混乱,排查时容易误判
- 日志滚动:中心服务器上建议搭配 logrotate 管理 /var/log/remote/ 目录,避免单个日志无限增长,例如按天切割、保留 30 天
- 最小权限原则:/var/log/remote 目录权限保持 700,非 root 用户不应有读取权限,尤其 authpriv 日志含敏感信息
四、后续可扩展方向
这套基础架构跑稳后,可根据需要平滑升级:
- 想快速检索和画图?把 rsyslog 输出接进 Fluentd → Elasticsearch → Kibana,实现全文搜索和仪表盘
- 要轻量级指标联动?用 Prometheus + Loki 替代 ELK,资源占用更低,适合边缘或容器环境
- 需结构化归档审计?在 rsyslog 后接 MySQL,把 auth 日志字段解析后入库,支持 SQL 查询 sudo 行为、登录频次等
- Windows 设备也要纳管?在 Windows 上装 NXLog CE,配置 TCP 发送到同一台 rsyslog 服务器,无需额外协议网关











