当前位置:首页>Linux>Linux 配置 rsyslog 日志集中收集:Syslog Server 与客户端完整配置

Linux 配置 rsyslog 日志集中收集:Syslog Server 与客户端完整配置

  • 2026-10-11 06:09:49
Linux 配置 rsyslog 日志集中收集:Syslog Server 与客户端完整配置
在日常运维、安全审计和 SOC 日志分析场景中,经常需要把多台 Linux 服务器的系统日志统一发送到一台日志服务器集中保存。这样可以避免逐台登录服务器查看日志,也方便后续对接 SIEM、Wazuh、ELK、日志审计平台等系统。

本文介绍如何使用 Linux 常见的 rsyslog 实现日志集中收集,包括:

  • 配置一台 Linux 作为 Syslog Server

  • 配置其他 Linux 主机作为客户端

  • 支持 TCP / UDP 日志接收

  • 按客户端 IP 自动分目录保存日志

  • 配置防火墙、测试、排障和日志轮转

rsyslog 的主配置文件通常是 /etc/rsyslog.conf,额外配置一般放在 /etc/rsyslog.d/*.conf 目录中。官方文档也说明,rsyslog 可以通过 imtcp 模块接收 TCP Syslog,通过 imudp 模块接收 UDP Syslog,并通过内置的 omfwd 模块将日志转发到远端服务器。


一、架构说明

本文示例架构如下:

Linux Client 1  ─┐
Linux Client 2  ─┼── TCP/UDP 514 ──>  Syslog Server
Linux Client 3  ─┘                     /var/log/remote/<客户端IP>/<日期>.log

示例 IP:

Syslog Server:192.168.1.100
Linux Client:192.168.1.101、192.168.1.102

推荐使用 TCP 方式转发日志,原因是 TCP 比 UDP 更可靠,适合生产环境。UDP 配置简单,但在网络异常、流量较大或链路不稳定时可能丢日志。


二、服务端配置:Syslog Server

以下操作在日志服务器 192.168.1.100 上执行。

1. 安装 rsyslog

Debian / Ubuntu:

sudo apt update
sudo apt install -y rsyslog

CentOS / RHEL / Rocky Linux / AlmaLinux:

sudo yum install -y rsyslog

或:

sudo dnf install -y rsyslog

启动并设置开机自启:

sudo systemctl enable --now rsyslog

查看服务状态:

sudo systemctl status rsyslog

2. 创建服务端远程日志配置

新建配置文件:

sudovim /etc/rsyslog.d/10-syslog-server.conf

写入以下内容:

# ==============================
# rsyslog Syslog Server 配置
# 同时支持 TCP 和 UDP 514
# ==============================

# 启用 UDP 接收
module(load="imudp")
input(type="imudp" port="514" ruleset="remote")

# 启用 TCP 接收
module(load="imtcp")
input(type="imtcp" port="514" ruleset="remote")

# 远程日志保存路径模板
# 按客户端 IP 和日期分目录保存
template(
    name="RemoteLogs"
    type="string"
    string="/var/log/remote/%fromhost-ip%/%$YEAR%-%$MONTH%-%$DAY%.log"
)

# 远程日志处理规则
ruleset(name="remote") {
    action(
        type="omfile"
        dynaFile="RemoteLogs"
        createDirs="on"
        dirCreateMode="0755"
        fileCreateMode="0640"
    )

    # 防止远程日志继续进入本机其他日志规则,避免重复写入
    stop
}

保存退出。

这里的保存路径示例:

/var/log/remote/192.168.1.101/2026-07-01.log
/var/log/remote/192.168.1.102/2026-07-01.log

3. 检查 rsyslog 配置语法

执行:

sudo rsyslogd -N1

如果看到类似下面的内容,说明配置语法正常:

rsyslogd: version ..., config validation run...
rsyslogd: End of config validation run. Bye.

如果有报错,需要根据提示检查配置文件格式、括号、引号等。


4. 重启 rsyslog

sudo systemctl restart rsyslog

确认 514 端口已经监听:

sudo ss -lntup | grep514
sudo ss -lnuap | grep514

正常情况下可以看到类似:

tcp   LISTEN 0  ... 0.0.0.0:514
udp   UNCONN  0  ... 0.0.0.0:514

5. 配置防火墙

如果服务端开启了防火墙,需要放行 514 端口。

Ubuntu / Debian 使用 ufw

放行 TCP:

sudo ufw allow 514/tcp

放行 UDP:

sudo ufw allow 514/udp

查看规则:

sudo ufw status

CentOS / RHEL / Rocky Linux / AlmaLinux 使用 firewalld

放行 TCP:

sudo firewall-cmd --permanent--add-port=514/tcp

放行 UDP:

sudo firewall-cmd --permanent--add-port=514/udp

重新加载防火墙:

sudo firewall-cmd --reload

查看规则:

sudo firewall-cmd --list-ports

rsyslog 官方文档也提醒,启用 UDP 接收时通常需要同步调整防火墙规则,部分环境还可能涉及 SELinux 策略。


三、客户端配置:Linux Client

以下操作在需要发送日志的客户端服务器上执行。

假设 Syslog Server 地址为:

192.168.1.100

1. 安装并启动 rsyslog

Debian / Ubuntu:

sudo apt update
sudo apt install -y rsyslog

CentOS / RHEL / Rocky Linux / AlmaLinux:

sudo yum install -y rsyslog

或:

sudo dnf install -y rsyslog

启动并设置开机自启:

sudo systemctl enable --now rsyslog

2. 配置客户端通过 TCP 转发日志

推荐生产环境使用 TCP。

新建客户端转发配置文件:

sudovim /etc/rsyslog.d/90-forward-to-syslog-server.conf

写入:

# ==============================
# rsyslog Client 日志转发配置
# 使用 TCP 发送到 Syslog Server
# ==============================

*.* action(
    type="omfwd"
    target="192.168.1.100"
    port="514"
    protocol="tcp"

    # 远端不可用时持续重试
    action.resumeRetryCount="-1"

    # 开启队列,避免网络短暂异常时日志直接丢失
    queue.type="LinkedList"
    queue.size="10000"
)

保存退出。

说明:

*.*      表示转发所有 facility 和所有 level 的日志
target   指定 Syslog Server 地址
port     指定端口,默认 Syslog 常用 514
protocol 指定协议,推荐 tcp

omfwd 是 rsyslog 用于远程转发日志的输出模块,官方文档说明它支持 UDP、TCP 和 TLS 等方式,且该模块是内置模块,通常不需要额外加载。


3. 可选:使用 UDP 转发日志

如果只想使用 UDP,可以将客户端配置改为:

# 使用 UDP 发送日志到 Syslog Server
*.* action(
    type="omfwd"
    target="192.168.1.100"
    port="514"
    protocol="udp"
)

也可以使用传统简写方式:

*.* @192.168.1.100:514

如果使用 TCP,传统简写方式是两个 @:

*.* @@192.168.1.100:514

说明:

@   表示 UDP
@@  表示 TCP

生产环境建议使用前面的 action(type="omfwd" ...) 写法,可读性更好,也方便后续扩展队列、重试、TLS 等参数。


4. 检查客户端配置语法

sudo rsyslogd -N1

确认无报错后重启 rsyslog:

sudo systemctl restart rsyslog

查看服务状态:

sudo systemctl status rsyslog

四、测试日志发送

1. 在客户端发送测试日志

TCP 测试:

logger -T-n192.168.1.100 -P514"test tcp syslog from client"

UDP 测试:

logger -d-n192.168.1.100 -P514"test udp syslog from client"

也可以直接写入本机 syslog,由 rsyslog 自动转发:

logger "hello from $(hostname)"

2. 在服务端查看日志

在 Syslog Server 上查看远程日志目录:

sudols-R /var/log/remote/

查看某个客户端日志:

sudo tail -f /var/log/remote/192.168.1.101/$(date +%F).log

如果能看到客户端发送的内容,说明配置成功。

示例日志:

2026-07-01T10:20:30+08:00 client01 root: hello from client01

五、常见排障方法

1. 服务端没有监听 514 端口

检查配置文件:

sudo rsyslogd -N1

检查服务状态:

sudo systemctl status rsyslog

检查监听端口:

sudo ss -lntup | grep514
sudo ss -lnuap | grep514

如果没有监听,重点检查:

module(load="imtcp")
input(type="imtcp" port="514")

module(load="imudp")
input(type="imudp" port="514")

2. 客户端发送后服务端收不到

在客户端测试网络连通性:

TCP:

nc-vz192.168.1.100 514

UDP:

nc-vzu192.168.1.100 514

检查防火墙:

sudo ufw status

或:

sudo firewall-cmd --list-ports

检查服务端是否有日志写入:

sudofind /var/log/remote/ -type f -mtime-1

查看 rsyslog 服务日志:

sudo journalctl -u rsyslog -xe

3. 配置文件修改后不生效

每次修改配置后,都建议执行:

sudo rsyslogd -N1
sudo systemctl restart rsyslog

确认配置文件后缀必须是 .conf,并且放在:

/etc/rsyslog.d/

4. 日志目录没有自动创建

检查服务端配置中是否包含:

createDirs="on"

同时检查 /var/log/remote 的权限:

sudomkdir-p /var/log/remote
sudochown root:root /var/log/remote
sudochmod755 /var/log/remote

重启 rsyslog:

sudo systemctl restart rsyslog

六、配置日志轮转

远程日志集中保存后,日志量会逐渐增大,建议配置 logrotate 定期压缩和清理。

新建配置文件:

sudovim /etc/logrotate.d/remote-syslog

写入:

/var/log/remote/*/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root root
    sharedscripts
    postrotate
        /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
    endscript
}

说明:

daily        每天轮转
rotate 30    保留 30 天
compress     压缩旧日志
missingok    文件不存在不报错
notifempty   空文件不轮转

手动测试 logrotate:

sudo logrotate -d /etc/logrotate.d/remote-syslog

如果确认没问题,可以强制执行一次:

sudo logrotate -f /etc/logrotate.d/remote-syslog

七、生产环境安全建议

1. 优先使用 TCP

生产环境建议使用 TCP 转发日志。UDP 虽然简单,但不保证可靠传输,网络抖动时可能丢日志。

2. 限制来源 IP

Syslog Server 不建议向公网开放 514 端口,只允许指定客户端服务器访问。

firewalld 示例:

sudo firewall-cmd --permanent--add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="514" accept'
sudo firewall-cmd --reload

ufw 示例:

sudo ufw allow from 192.168.1.0/24 to any port 514 proto tcp

3. 使用内网或 VPN 传输

如果日志跨公网传输,建议走专线、VPN、WireGuard、IPsec,或配置 rsyslog TLS 加密。

4. 不要只依赖客户端本地日志

集中日志服务器的价值在于:即使客户端服务器被入侵、日志被删除,日志服务器上仍然可能保留攻击痕迹。

5. 日志服务器单独加固

建议对 Syslog Server 做以下加固:

限制 SSH 登录来源
开启磁盘监控
配置日志轮转
定期备份关键日志
接入 SIEM / Wazuh / ELK
配置时间同步 NTP

八、完整配置汇总

Syslog Server 配置

文件:

/etc/rsyslog.d/10-syslog-server.conf

内容:

module(load="imudp")
input(type="imudp" port="514" ruleset="remote")

module(load="imtcp")
input(type="imtcp" port="514" ruleset="remote")

template(
    name="RemoteLogs"
    type="string"
    string="/var/log/remote/%fromhost-ip%/%$YEAR%-%$MONTH%-%$DAY%.log"
)

ruleset(name="remote") {
    action(
        type="omfile"
        dynaFile="RemoteLogs"
        createDirs="on"
        dirCreateMode="0755"
        fileCreateMode="0640"
    )
    stop
}

重启服务:

sudo rsyslogd -N1
sudo systemctl restart rsyslog

Client 配置

文件:

/etc/rsyslog.d/90-forward-to-syslog-server.conf

内容:

*.* action(
    type="omfwd"
    target="192.168.1.100"
    port="514"
    protocol="tcp"
    action.resumeRetryCount="-1"
    queue.type="LinkedList"
    queue.size="10000"
)

重启服务:

sudo rsyslogd -N1
sudo systemctl restart rsyslog

测试:

logger "hello from $(hostname)"

服务端查看:

sudo tail -f /var/log/remote/*/$(date +%F).log

九、总结

通过 rsyslog 可以快速搭建一套轻量级 Linux 日志集中收集系统。整体流程可以概括为:

服务端启用 imtcp / imudp 接收日志
客户端使用 omfwd 转发日志
服务端按客户端 IP 和日期保存日志
通过 logger 测试日志链路
通过 logrotate 做日志轮转

对于生产环境,建议优先使用 TCP,并限制 Syslog Server 的访问来源。如果日志需要跨公网传输,应进一步配置 VPN 或 TLS 加密,避免日志在传输过程中泄露。

参考资料:rsyslog 官方配置文档、imtcp / imudp / omfwd 模块文档,以及 Red Hat 远程日志配置文档。

最新文章

随机文章