Linux 中的 Rsyslog:配置与设置
最后更新于:本页内容
什么是 Rsyslog?
Rsyslog 是一个高性能、开源的 日志收集 和转发系统,广泛应用于 Linux 环境。它高效处理系统日志、应用程序日志、网络设备日志 和安全事件,具有强大的可靠性和灵活的路由能力。其速度、插件生态系统及丰富的配置选项使其适用于小型部署和企业级日志记录。
Rsyslog 作为一个增强型的 syslog 服务器 和客户端,扩展了原始 syslog 标准,具备多线程处理、安全日志传输、基于队列的可靠性、结构化日志格式 以及与多种存储和分析平台的集成。大多数 Linux 发行版将 Rsyslog 作为默认日志服务,集中收集 本地和远程来源的日志。
Rsyslog 如何工作?
Rsyslog 采用模块化、流水线驱动的架构,包含三个关键阶段:
- 输入: 输入模块负责从各种来源收集日志。示例包括用于 systemd 日志的 imjournal,基于 TCP 的日志流 imtcp,UDP syslog 的 imudp,以及文件监控的 imfile。调整每个输入以控制日志进入系统的方式。
- 处理: 接收日志后,Rsyslog 会主动应用过滤和转换——如严重性和设施过滤、主机和应用路由、消息解析与规范化、标记和队列缓冲——使用精确的过滤器和规则,全面控制每条消息的处理方式。
- 输出: Rsyslog 支持多种目标,包括文件、syslog 服务器、数据库、云端点和 SIEM 工具。
其多线程设计支持并行处理,适合分布式环境中的高容量日志摄取。
例如, 下面是一条失败的 SSH 登录记录:
Jan 10 11:42:01 server1 sshd[2384]: Failed password for root from 192.168.10.25 port 54532 ssh2
Rsyslog 通过 imjournal 捕获该日志,在处理阶段解析和分类,应用过滤器或标记(如 auth-failure),最终将其发送到配置的输出,如 /var/log/secure 或中央日志服务器。
探索我们全面的 syslog 指南,了解服务器基础、日志收集方法及安全实践,帮助您充分利用日志管理。
Rsyslog 端口和协议
Rsyslog 默认使用标准 syslog 端口:
- UDP 514 – 传统 syslog
- TCP 514 – 可靠 syslog
- TCP 6514 – 基于 TLS 的 syslog
- TCP 20514 – RELP(可靠事件日志协议)
可根据您的网络和安全需求自定义端口。
在安全环境中,建议使用 TCP 6514 或 RELP 20514 以确保加密和认证通信。
Rsyslog 的功能:
Rsyslog 包含多项功能,适用于严苛的基础设施、安全和合规需求:
性能
- 多线程架构,实现高吞吐量并行日志处理。
- 基于磁盘和内存的队列,用于处理突发流量并防止消息丢失。
- 速率限制,防止过载并保护日志收集器。
安全性
- 可靠的 TCP 和 TLS 加密传输,确保安全且经过认证的传递。
- 支持结构化日志(JSON、RFC 5424),保证完整性和一致格式。
灵活性
- 通过 mmnormalize 进行解析和规范化,标准化多样日志格式。
- 动态模板,用于创建自定义输出格式。
- 支持传统和现代 syslog 标准,实现完全兼容。
- 基于模块的数据库、云服务和分析平台集成。
这些功能使 Rsyslog 能够既作为轻量级日志记录器,也作为全功能企业日志路由器。
Rsyslog 配置
Rsyslog 配置文件位于:
语法:
/etc/rsyslog.conf (for global settings)
/etc/rsyslog.d/ (for additional rule files and modular configuration files)
关键配置组件:
1. 加载模块
模块启用特定功能,如 TCP 接收、文件监控和数据库输出。
语法:
module(load="imtcp")
module(load="imudp")
module(load="omfile")
2. 定义输入
输入指定 Rsyslog 如何接收日志。例如:
语法:
input(type="imtcp" port="514")
这允许服务器通过 TCP 接收传入的 syslog 消息。
3. 编写规则集
规则集将过滤器和操作组合在一起。它们使得根据日志的来源或内容进行不同路由成为可能。规则集在构建中继层或将安全日志与一般系统日志分开时尤其有用。
4. 配置操作
操作定义消息的处理方式,包括写入文件、发送到远程 syslog 服务器、发布到云端点或插入数据库。例如:
语法:
action(type="omfile" file="/var/log/custom.log")
5. 创建模板
模板允许完全控制输出格式,有助于为日志管理工具保持日志的一致性。Rsyslog 的配置系统强大且灵活,这也是许多企业团队采用它进行大规模日志路由的原因。
语法:
template(name="simpleFormat" type="string"
string="%timestamp% %msg%\n")
action(type="omfile"
file="/var/log/simple.log"
template="simpleFormat")
如何在 Linux 上使用 Rsyslog 设置集中式日志记录
使用 Rsyslog 的集中式日志记录允许您将多个 Linux 服务器的日志聚合到一个位置。这不仅简化了监控和故障排除,还通过确保日志被一致地捕获和存储,增强了安全性和合规性。集中式日志记录的组成部分:
- Rsyslog 服务器(中央服务器)– 接收来自多个客户端的日志。
- Rsyslog 客户端(远程主机)– 将日志发送到中央服务器。
- 网络协议 – TCP 或 UDP,可选使用 TLS 以增强安全性。
以下是使用 Rsyslog 设置集中式日志记录的分步指南
第 1 步:在所有服务器上安装 Rsyslog
在客户端服务器和中央服务器上安装 Rsyslog。
-
Debian/Ubuntu:
语法:
sudo apt update语法:
sudo apt install rsyslog -y -
RHEL/CentOS/Fedora:
语法:
sudo yum install rsyslog -y启用并启动 Rsyslog,使其在系统启动时自动运行:
语法:
sudo systemctl enable rsyslog sudo systemctl start rsyslog
第 2 步:配置客户端转发日志
每个客户端服务器必须将日志转发到中央服务器。编辑 /etc/rsyslog.conf 或在 /etc/rsyslog.d/ 下创建新文件。
Rsyslog 客户端服务器配置示例:
语法:
*.* @@central-server-ip:514
- *.* -> 捕获所有设施和严重级别。
- @@ -> 使用 TCP 以保证传输可靠(@ 表示 UDP)。
- Central-server-ip -> 替换为您的中央服务器 IP。
- 514 -> 默认 syslog 端口。
重启客户端上的 Rsyslog:
sudo systemctl restart rsyslog
在生产环境中使用 TCP 以保证日志传输。
第 3 步:配置中央服务器接收日志
启用 TCP 和 UDP 接收,并定义日志存储目录。
中央服务器配置示例:
语法:
# Load UDP and TCP modules
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
# Organize logs per client and program
$template ClientLogs,"/var/log/clients/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?ClientLogs
- imudp 和 imtcp → 通过 UDP 和 TCP 接收日志。
- template → 将日志保存在结构化文件夹中,便于管理。
重启中央服务器上的 Rsyslog:
sudo systemctl restart rsyslog
第4步:测试配置
-
Send a test log from a client:
语法:
logger "Test message from client server" -
Verify it on the central server:
语法:
tail -f /var/log/clients/client-server-hostname/messages.log
在高流量环境中,
-
Enable queues to avoid log loss during spikes.
main_queue( queue.type="LinkedList" queue.size="10000" queue.dequeuebatchsize="1000" ) - 实施负载均衡以将日志分布到多个中央服务器。
- 使用日志轮换来管理磁盘空间。
- 应用过滤器和模板以组织日志并减少杂乱。
Rsyslog 与 Syslog-ng 的比较
Rsyslog 和 syslog-ng 是用于收集、处理和转发 Linux 环境中日志的流行 syslog 服务器。虽然两者都扩展了传统 syslog 功能,但在性能、配置和可扩展性方面存在差异。
Rsyslog 设计用于高性能和可扩展性。它利用多线程架构,能够每秒处理大量事件,非常适合动态、高流量环境。其模块化设计允许自定义输入、解析和输出处理,并且能够无缝集成 EventLog Analyzer、Elastic Stack 和 Kafka 等 SIEM 解决方案。
另一方面,syslog-ng 注重结构化配置和可读性。其基于块的配置(source、destination、filter、log)使复杂设置易于管理和理解。在许多典型配置中,syslog-ng 的吞吐量低于 Rsyslog。然而,它在高级解析方面表现出色——包括模式匹配和 JSON 支持,并且其商业版提供企业功能,适合合规性要求较高的环境。
| 功能 | Rsyslog | syslog-ng |
|---|---|---|
| 架构 | 模块化、多线程,设计用于高流量日志处理 | 模块化,采用结构化面向对象配置 |
| 性能 | 高效,能够每秒处理数百万条消息 | 高效,但对大规模突发流量稍逊一筹 |
| 配置风格 | 灵活,支持传统和现代配置语法 | 结构化,采用块状语法(source、destination、log) |
| 协议支持 | 支持 UDP、TCP、TLS、RELP、HTTP 和 Kafka | 支持 UDP、TCP、TLS、RELP、HTTP、AMQP 和 Kafka |
| 安全性 | 基于 TLS 的加密以实现安全日志转发 | 支持 TLS 和 OpenSSL 以确保连接安全 |
| 可扩展性 | 原生模块支持数据库、云和 SIEM。 | 内置 + 商业插件(PE)。 |
| 许可 | 完全开源,遵循 GPLv3 许可 | 双重许可:社区版(GPLv2)+ 企业版(商业) |
| 用例 | 适用于高吞吐量环境、分布式部署、SIEM 管道 | 适用于合规驱动的部署、需要高级集成的企业环境 |
两款工具都是强大的日志解决方案,但 Rsyslog 的速度和多功能性使其更适合大规模云原生环境,而 syslog-ng 则更适合需要可读配置和企业支持的用户。
EventLog Analyzer 如何增强 Rsyslog?
Rsyslog 是一款功能强大且灵活的 syslog server,适用于 Linux 环境,在系统级别高效收集、解析和转发日志。然而,随着环境规模的扩大,组织通常需要超出 Rsyslog 原生范围的功能,丰富 Rsyslog 转发的数据并将其转化为可操作的洞察。
集中式日志管理:
EventLog Analyzer 通过作为集中式 syslog 接收器无缝集成 Rsyslog,接收通过 Rsyslog 转发的来自 Linux/Unix 服务器、网络设备、防火墙和应用程序的日志。该解决方案将原始 syslog 数据转化为可视化仪表盘、趋势和安全洞察,让您全面了解混合环境中的活动。
高级解析、索引和规范化:
虽然 Rsyslog 可执行基本过滤和模板操作,EventLog Analyzer 通过添加元数据、事件分类和构建索引存储,支持对整个基础设施的快速直观搜索。
实时告警与关联:
EventLog Analyzer 扩展了 Rsyslog 的传输能力,实时分析传入日志。它通过自动关联和告警检测可疑活动、配置错误和安全漏洞,帮助安全团队迅速响应。
合规就绪报告:
EventLog Analyzer 通过提供针对 PCI DSS、HIPAA、SOX、ISO 27001 和 GDPR 等关键法规的自动化报告,简化合规流程,免除手动操作。
日志保留与取证:
EventLog Analyzer 提供防篡改归档、日志保留策略和历史搜索功能,并支持远超 Rsyslog 原生范围的取证调查。
通过结合 Rsyslog 强大的日志转发功能与 EventLog Analyzer 的高级分析和安全功能,组织能够获得可扩展的端到端日志管理工作流。
常见问题解答:
Rsyslog 是 Linux 中的高级日志守护进程,用于收集、过滤、格式化和存储系统日志。它支持多种协议,实现集中式日志记录,并且相比传统的 syslog 守护进程,提供高性能的日志处理。Rsyslog 广泛用于监控系统活动、排查问题以及维护 Linux 环境中的审计跟踪。
Syslog 是传统的 Linux 日志系统,用于捕获基本的系统和应用事件并将其本地存储。虽然简单易用,但缺乏现代企业环境所需的高级功能、可扩展性和安全性。
Rsyslog 是 syslog 的增强版,适合企业使用。它支持高容量、多线程日志处理、高级过滤以及通过 TCP 或 TLS 的安全日志转发。Rsyslog 可以将日志路由到多个目标,包括远程服务器、数据库或 SIEM 工具,非常适合集中式日志管理、合规报告和实时安全监控。
你可以通过查看存储在 /var/log 目录下的日志文件来检查 Linux 中的 Rsyslog 日志。在 Debian/Ubuntu 上,查看 /var/log/syslog;在 RHEL/CentOS 上,查看 /var/log/messages。使用 tail 命令进行实时监控:
语法:
sudo tail -f /var/log/syslog
你也可以使用 journalctl -u rsyslog 来查看由 systemd 管理的日志。这些命令有助于验证日志收集并排查 Rsyslog 问题。
重启 Rsyslog 可确保任何配置更改生效。你可以使用以下命令重启服务:
语法:
sudo systemctl restart rsyslog (or) sudo service rsyslog restart
要检查 Rsyslog 状态,请使用:
语法:
sudo systemctl status rsyslog










