Rsyslog远程日志服务器搭建核心是服务端监听514端口并按源IP分目录存储,客户端用@@TCP转发至服务端;需加载imtcp模块、定义RemoteLogs模板、授权目录、重启服务并验证端口监听与网络连通性。

用 Rsyslog 搭建远程日志服务器实现集中化管理,核心是让多台客户端把日志发到一台服务端,并按来源隔离存储、避免混杂。整个过程分两块:服务端接收并分类存日志,客户端配置转发规则。不加密的 TCP 方式已能满足大多数中小场景,配置清晰、资源占用低。
服务端:监听 + 分目录存日志
服务端要能收日志,还得知道“谁发来的、存哪、怎么命名”。关键不是只开个端口,而是整套规则闭环。
- 加载 TCP 接收模块(生产环境推荐 TCP,比 UDP 可靠):
在 /etc/rsyslog.conf 或 /etc/rsyslog.d/10-listen.conf 中添加:module(load="imtcp")<br>input(type="imtcp" port="514")
- 定义模板,按客户端 IP 自动分目录:
添加模板规则(放在模块之后、规则之前):$template RemoteLogs,"/var/log/remote/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%.log"<br>*.* ?RemoteLogs & ~
%FROMHOST-IP% 是自动提取的真实源 IP,& ~ 表示匹配后终止后续处理,防止日志重复写入本地文件。 - 提前创建目录并授权:
sudo mkdir -p /var/log/remote<br>sudo chown syslog:adm /var/log/remote
目录权限不对会导致日志写入失败,且不会报错,容易卡在排查环节。 - 重启生效并验证监听:
sudo systemctl restart rsyslog<br>sudo ss -tlnp | grep :514
看到 rsyslogd 占用 514 端口即表示监听成功。
客户端:可靠转发,别丢日志
客户端只需一条转发规则,但细节决定成败——用错协议、缺端口、没重启,都会导致“看似配了,实则没发”。
- 在 /etc/rsyslog.d/50-remote.conf(推荐新建独立文件,不改主配置)中添加:
*.* @@192.168.1.100:514
注意:@@ 表示 TCP(带连接确认和重传),@ 是 UDP(无保障,易丢)。生产环境必须用 @@。 - 确保目标 IP 和端口网络可达:
客户端执行telnet 192.168.1.100 514
或nc -zv 192.168.1.100 514
,通了再继续。 - 防火墙放行:
服务端需开放 514/tcp(如sudo ufw allow 514/tcp
或sudo firewall-cmd --add-port=514/tcp --permanent
)。 - 改完必须重启:
sudo systemctl restart rsyslog
reload 不会重载转发规则,只有 restart 才生效。
验证与排障要点
配置完不是就结束了,几个典型问题常被忽略:
- 服务端收不到?先看客户端
journalctl -u rsyslog -n 50 -f
,常见报错 “connection refused” 多因服务端没监听或防火墙拦了。 - 日志收到但乱码或格式错?检查服务端系统 locale 是否为 UTF-8(
locale | grep UTF
),非 UTF-8 环境下中文日志可能显示为问号或方块。 - 所有日志都堆在一个文件里?确认模板中用了 %FROMHOST-IP% 而不是写死路径;也检查是否漏了 & ~,否则日志还会照常写进 /var/log/messages。
- 磁盘爆满?给 /var/log/remote/ 配置 logrotate,否则日志永不清除。

















