rsyslog 如何把日志通过 TCP 转发到本地 syslog 主机的指定端口(如 5000)?
rsyslog 通过 TCP 转发日志到指定主机端口:发送端用 @@host:port 配置,接收端开启 imtcp 模块监听对应端口。本文给出发送端和接收端的完整配置。
发送端一行配置:*.* @@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 的日志。