rsyslog 如何把日志通过 TCP 转发到本地 syslog 主机的指定端口(如 5000)?

rsyslog 通过 TCP 转发日志到指定主机端口:发送端用 @@host:port 配置,接收端开启 imtcp 模块监听对应端口。本文给出发送端和接收端的完整配置。

最佳实践
rsyslog 如何把日志通过 TCP 转发到本地 syslog 主机的指定端口(如 5000)?封面

发送端一行配置:*.* @@127.0.0.1:5000@@ 表示 TCP,@ 是 UDP)。接收端需要加载 imtcp 模块并监听 5000 端口。

发送端配置

编辑 /etc/rsyslog.d/forward.conf(新建):

# 所有日志通过 TCP 转发到本地 5000 端口
*.* @@127.0.0.1:5000

语法说明:

  • *.*:所有 facility、所有级别;
  • @@:TCP 协议(@ 是 UDP);
  • 可换成具体主机名或 IP。

接收端配置(监听 5000 端口)

# /etc/rsyslog.d/receiver.conf
module(load="imtcp")
input(type="imtcp" port="5000")

生效与验证

# 两端都执行
rsyslogd -N1                    # 语法检查
sudo systemctl restart rsyslog

# 测试:发送端产生一条日志
logger "测试消息"

# 接收端确认
tail -f /var/log/syslog

可靠性增强

*.* @@127.0.0.1:5000
$ActionQueueType LinkedList      # 内存队列+磁盘辅助
$ActionQueueFileName fwdRule
$ActionResumeRetryCount -1       # 无限重试
$ActionQueueSaveOnShutdown on    # 关机时保存队列

目标不可达时消息进入队列,恢复后继续发送。

观测云对照

把 syslog 转发到观测云 DataKit 的 syslog 接收器(默认 514 端口,可自定义),日志直接进入观测云平台统一检索、分析和告警,无需自建接收端 rsyslog。

常见问题(FAQ)

Q:TCP 和 UDP 选哪个?
A:TCP 可靠(有确认和重传),UDP 快但可能丢。重要日志用 TCP 或 RELP。

Q:防火墙需要开什么?
A:接收端放行 TCP 5000:sudo ufw allow 5000/tcp

Q:只想转发部分日志?
A:把 *.* 换成过滤条件,如 :programname, isequal, "myapp" @@... 只转发 myapp 的日志。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台