如何在 Linux 中配置 syslog 服务器
最后更新于:本页内容
什么是 syslog 服务器?
syslog 服务器 是一个系统,用于接收、存储和分析由 Linux 服务器、网络设备、防火墙和应用程序发送的 syslog 消息。syslog 服务器将所有日志集中到一个位置,而不是单独检查每个设备上的日志,从而实现高效的故障排除、监控和安全审计。
Linux 支持多种 syslog 守护进程,包括:
syslog 服务器监听:
- UDP 514:快速但不可靠
- TCP 514:可靠的日志传输
- TCP/TLS:安全加密的 syslog 传输
了解更多关于 syslog 的信息
Linux syslog 架构的工作原理
在配置 syslog 服务器之前,了解 syslog 在 Linux 中的流动方式非常重要。典型的 syslog 流程包括:
- 应用程序/服务生成日志
- Syslog 守护进程(rsyslog/syslog-ng/journald)收集、解析和处理日志
- 输出模块将日志转发到远程 syslog 服务器或本地存储
Linux syslog 守护进程如 rsyslog 支持 RFC 3164 和 RFC 5424。网络设备通常使用 RFC 3164,而现代 Linux 应用程序通常使用 RFC 5424,该协议包括优先级、设施、严重性、时间戳、主机名和结构化数据。
配置 syslog 服务器的先决条件
配置服务器之前:
- 安装 syslog 守护进程,如 rsyslog、syslog-ng,或确保 systemd-journald 正在运行。
- 检查日志源与 syslog 服务器之间的网络连接。
- 确保防火墙规则允许入站 syslog 流量(UDP/TCP 514 或 TCP 6514)。
- 使用 root 或 sudo 权限进行配置更改。
- 启用时间同步(chrony 或 NTP)以保持准确的时间戳。
配置 Rsyslog 作为 syslog 服务器
Rsyslog 是大多数现代 Linux 发行版中的默认 syslog 守护进程。
步骤 1: 安装 rsyslog(如果尚未安装)
语法:
sudo apt install rsyslog # Ubuntu/Debian
sudo yum install rsyslog # RHEL/CentOS
第2步:启用UDP/TCP接收
编辑 /etc/rsyslog.conf 并取消注释:
语法:
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
第3步: 为远程日志创建自定义日志文件
将此内容添加到 /etc/rsyslog.d/remote.conf:
语法:
$template RemoteLogs,"/var/log/remote/%HOSTNAME%.log"
*.* ?RemoteLogs
第4步: 重启 rsyslog
sudo systemctl restart rsyslog
您的服务器现在已准备好通过UDP/TCP 514接收日志。
配置 syslog-ng 作为 syslog 服务器
syslog-ng 是一个灵活的高性能日志守护进程。
第1步: 安装 syslog-ng
语法:
sudo apt install syslog-ng
sudo yum install syslog-ng
第2步: 配置源、目标和日志路径
编辑 /etc/syslog-ng/syslog-ng.conf:
语法:
source s_net { udp(port(514)); tcp(port(514)); };
destination d_remote { file("/var/log/remote/$HOST.log"); };
log { source(s_net); destination(d_remote); };
第3步: 重启 syslog-ng
语法:
sudo systemctl restart syslog-ng
配置 systemd-journald 进行远程日志记录
虽然 systemd-journald 本身不支持远程日志接收,但它可以将日志转发到远程 syslog 服务器。自 systemd 254+ 版本起,systemd-journal-remote 支持原生远程日志接收;然而,在大多数生产环境中,尤其是需要多厂商日志聚合的环境,转发日志到 rsyslog 或 syslog-ng 仍然是标准做法。
第1步: 编辑 journald.conf
打开 /etc/systemd/journald.conf 并启用转发:
语法:
ForwardToSyslog=yes
第2步: 重启 systemd-journald
语法:
sudo systemctl restart systemd-journald
第3步: 配置 rsyslog/syslog-ng 接收转发的日志
(请根据上述步骤操作。)
为 syslog 打开防火墙端口
如果启用了 Firewalld,允许 syslog 流量,
语法:
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --permanent --add-port=514/tcp
sudo firewall-cmd --reload
如果使用 UFW(Ubuntu/Debian)
sudo ufw allow 514/udp
sudo ufw allow 514/tcp
验证 syslog 服务器连接性
-
使用 logger 命令从客户端机器测试
logger "Test message from client"
-
检查远程日志文件
tail -f /var/log/remote/*.log
-
使用 netcat 测试端口连通性
nc -vz <syslog-server-ip> 514
-
检查服务器上的日志:
sudo tail -f /var/log/remote/*.log
如果日志出现,说明服务器已正确接收 syslog。
日志轮转
在 syslog 服务器上配置日志轮转,以防止日志文件无限增长并占用磁盘空间。对于高可用部署,考虑启用 rsyslog 磁盘辅助队列(例如,使用 queue.type="LinkedList"),该队列在网络中断期间本地缓冲日志,恢复连接后再转发。这有助于防止在不稳定或高流量环境中丢失日志。
解决 syslog 服务器问题
如果 syslog 未到达:
-
检查 rsyslog 是否在监听
sudo ss -tulnp | grep 514
-
验证 SELinux
允许 syslog 守护进程写入日志:
sudo setsebool -P syslogd_disable_trans 0
允许 rsyslog 绑定标准端口(UDP 和 TCP 514):
sudo semanage port -a -t syslogd_port_t -p udp 514 sudo semanage port -a -t syslogd_port_t -p tcp 514
这些命令确保 SELinux 不会阻止日志写入或端口绑定,这些是 syslog 无法到达服务器的常见原因。
-
检查配置中的拼写错误
sudo rsyslogd -N1
-
验证客户端配置
确保客户端具有正确的转发规则:
*.* @<server-ip>:514 # UDP *.* @@<server-ip>:514 # TCP
一旦您的 syslog 服务器启动并运行,下一步是让日志易于搜索、关联和审计。
配置完 syslog 服务器后:使用 EventLog Analyzer 增强监控
在 Linux 中设置 syslog 服务器确保设备可以将日志转发到集中目的地,但查看、过滤、关联和分析这些日志仍需大量手动工作。
EventLog Analyzer 将您配置的 syslog 服务器转变为完整的 syslog 监控解决方案。它不再依赖终端中的 grep 过滤器、临时脚本或分散的日志文件,而是将所有接收的 syslog 事件整合到统一的日志管理控制台。它根据严重性、设施和来源等属性自动解析日志,使得解读来自路由器、防火墙、服务器和应用程序的大量数据更加容易。
| 功能 | 您的 Linux syslog 服务器 | 使用 EventLog Analyzer |
|---|---|---|
| 日志收集 | 已配置 | syslog 源的自动发现 |
| 查看日志 | tail -f 和 grep | 支持实时流式传输的可搜索仪表板 |
| 过滤 | 手动正则表达式模式 | 通过 IP、严重性、设施的点选过滤器 |
| 威胁检测 | 不可用 | 具有实时警报的关联规则 |
| 合规报告 | 手动日志导出 | 针对 PCI DSS、HIPAA、ISO 27001 的预构建报告 |
| 保留与归档 | 手动日志轮换配置 | 自动化、加密、防篡改的归档 |
安全且集中式的 syslog 收集
EventLog Analyzer 内置的 syslog 监听器(UDP/TCP/TLS)安全接收来自分布式环境的日志,并提供消息速率、设备贡献和数据包流状态等指标。配置好 Linux syslog 服务器后,无需单独的收集器或额外配置。
从基础日志转发到智能分析:
- 集中式日志可视化: 将来自 Linux 系统 和网络设备的 syslog 消息汇聚到单一仪表板,无需手动浏览 /var/log 文件。
- 自动解析与分类: EventLog Analyzer 将原始 syslog 结构化为可读字段,帮助您快速理解问题,无需命令行解码。
- 即时过滤: 使用 IP、严重性、关键字或事件类型应用实时过滤,几秒内筛选相关日志。
- 实时故障排除: 查看带有元数据的流式 syslog 事件,提供类似 tail -f 的实时故障排除体验,并具备可操作的智能。
- 威胁检测: 通过关联规则检测登录失败激增、配置篡改、异常访问尝试和横向移动。
- 合规报告: 将 syslog 事件映射到 PCI DSS、GDPR、HIPAA、ISO 27001 等法规,生成审计准备报告。
配置好 Linux syslog 服务器后,EventLog Analyzer 提供集中可视化、强大的威胁检测和自动化工作流,将原始 syslog 转化为可操作的洞察。
常见问题解答
要在 Linux 中配置 syslog 服务器,请安装或启用如 rsyslog 的 syslog 守护进程,打开其配置文件(此处为 /etc/rsyslog.conf),启用 imudp 或 imtcp 等模块以接收远程日志。然后定义日志路由规则,设置日志目录权限,重启服务,并允许防火墙通过端口 514。这样即可将您的 Linux 机器变成中央 syslog 接收器。
使用 logger 命令:
logger "Test message"
如果启用了远程转发,使用以下命令向 syslog 服务器发送测试消息:
logger -n <server_ip> -P 514 "Test message".
然后检查目标日志文件中是否有该消息。
syslog 配置文件通常位于,
- /etc/rsyslog.conf
- /etc/rsyslog.d/*.conf
- /etc/syslog-ng/syslog-ng.conf
运行 systemctl status rsyslog 查看 syslog 服务是否处于活动状态。此外,您可以检查 /var/log/ 下的日志文件,或使用 ps aux | grep rsyslog 确认 rsyslog 进程是否运行。
要将日志发送到远程 syslog 服务器,编辑 /etc/rsyslog.conf(或 /etc/rsyslog.d/ 中的文件),添加如下转发规则:
*.* @<server_ip>:514 for UDP or
*.* @@<server_ip>:514 for TCP.
保存文件并重启 rsyslog 以应用更改。










