Linux 中的 Rsyslog:配置与设置
最后更新于:本页内容
什么是 Rsyslog?
Rsyslog 是一个高性能、开源的 日志收集 和转发系统,广泛应用于 Linux 环境。它高效处理系统日志、应用日志、网络设备日志 和安全事件,具有强大的可靠性和灵活的路由能力。其速度、插件生态系统和丰富的配置选项使其适用于小型部署和企业级日志记录。
Rsyslog 作为一个增强型的 syslog 服务器 和客户端,扩展了原始 syslog 标准,具备多线程处理、安全日志传输、基于队列的可靠性、结构化日志格式 以及与各种存储和分析平台的集成等功能。大多数 Linux 发行版将 Rsyslog 作为默认日志服务,集中收集本地和远程日志。
Rsyslog 如何工作?
Rsyslog 采用模块化、流水线驱动的架构,包含三个关键阶段:
- 输入: 输入模块负责从各种来源收集日志。例如,imjournal 用于 systemd 日志,imtcp 用于基于 TCP 的日志流,imudp 用于 UDP syslog,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. 创建模板
模板允许完全控制输出格式,有助于为log management tools保持日志一致性。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" ) - 实施负载均衡以将日志分布到多个中央服务器。
- 使用日志轮换来管理磁盘空间。
- 应用过滤器和 template 来组织日志并减少杂乱。
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,接收来自 Linux/Unix 服务器、网络设备、防火墙和通过 Rsyslog 转发的应用程序的日志。该解决方案将原始 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











