rsyslog 8.2608.0 介绍与选型指南

rsyslog 高性能日志 daemon 的定位、四层架构、功能特性与同类选型对比:上游 8.2608.0 与 Ubuntu 22.04 自带 8.2112.0 的版本差异说明,对比 syslog-ng/journald/Fluent Bit/Vector,数据均联网溯源(查询日期 2026-10-20)。

rsyslog监控rsyslog2026/10/20

rsyslog 8.2608.0 介绍与选型指南

目标:讲清 rsyslog——"the rocket-fast system for log processing"——的定位、核心架构、功能特性与同类日志系统选型对比,帮助读者判断什么场景该选 rsyslog、什么场景该选别的。本文为认知篇,全部信息联网溯源自官方文档、GitHub 仓库与 Release 记录(查询日期 2026-10-20),不在本地做部署实测;安装、配置与命令的逐条实测见本专栏后续三篇。

一、环境信息

本文是纯联网溯源的认知篇,信息来源与查询日期如下,正文中不再重复标注:

  • 官方站点:https://www.rsyslog.com/ (含 Downloads、Docs、FAQ,查询日期 2026-10-20)
  • 官方文档站:https://www.rsyslog.com/doc/ (RainerScript、模块手册、队列手册,查询日期 2026-10-20)
  • GitHub 仓库:https://github.com/rsyslog/rsyslog (Release 记录、仓库描述、License、星数,查询日期 2026-10-20)
  • 上游最新稳定版:rsyslog 8.2608.0,GitHub Release 标签 v8.2608.0 发布时间 2026-08-18(来源:GitHub releases.atom 订阅源,查询日期 2026-10-20)
  • Ubuntu 22.04 (jammy) 仓库版本:8.2112.0-2ubuntu2.5(jammy-updates/main;在 Ubuntu 22.04.4 机器上 apt-cache policy rsyslog 实查,查询日期 2026-10-20)
  • 竞品版本(用于选型对比,均为 GitHub releases.atom 查询日期 2026-10-20):syslog-ng 4.12.0、Fluent Bit 5.1.4、Vector 0.60.0

💡 说明:上游最新版(8.2608.0)与 Ubuntu 22.04 自带版本(8.2112.0)相差约四年半的发布窗口。这是发行版「随版本冻结、仅回移植安全补丁」策略的正常结果:jammy 源里的 8.2112.0 会持续收到安全更新(当前已迭代到 2ubuntu2.5),但不会引入上游新特性。两套版本如何取舍,见本专栏《Ubuntu 22.04 安装 rsyslog 8.2112.0 指南》的版本选型说明。

二、软件概述

rsyslog 是一个用 C 语言编写的高性能系统日志 daemon,官方仓库的自我描述是 "High-performance log ingestion and ETL engine"(高性能日志摄取与 ETL 引擎),官方站点沿用多年的口号则是 "the rocket-fast system for log processing"(如火箭般快速的日志处理系统)。它是 Debian、Ubuntu、RHEL、CentOS、Fedora、openSUSE 等主流发行版的默认 syslog 实现——在一台典型的 Ubuntu 22.04 服务器上,/var/log/syslog、/var/log/auth.log 里的每一条记录,都是 rsyslog 收下来写盘的。

从名字看,rsyslog 的前缀 "r" 是 "rocket-fast" 的缩写,它起源于经典的 sysklogd 项目,在 v3 之后彻底重写为多线程架构,v5 引入队列引擎,v7 引入 RainerScript 配置语言,v8 成为当前主线(2008 年至今的大版本号统一为 8.x,小版本号采用「年.月」式命名:8.2608.0 即 2026 年 8 月版)。

rsyslog 的角色可以概括为三层:

  1. 本机日志的收口者:接收内核日志(imkmsg)、systemd journal(imjournal)、Unix socket 应用日志(imuxsock)、文件日志(imfile),按规则写入本地文件;
  2. 日志的转发路由器:通过 UDP/TCP/RELP 把日志转发到中心节点,支持 TLS 加密、failover 备援队列;
  3. 日志的 ETL 引擎:解析(mmnormalize/mmjsonparse)、改写字段、过滤路由,再输出到 Kafka(omkafka)、Elasticsearch(omes)、Redis、数据库(ommysql/ompgsql)、程序管道(omprog)等下游。

💡 技术拓展:日志传输协议不止一种,rsyslog 与同类系统常见选项对比——

协议原理/特点适用场景
UDP 514 (RFC 3164)传统 BSD syslog,无连接、不保证送达网络设备日志、容忍丢包的高吞吐场景
TCP 明文 (RFC 6587)有连接但无加密内网可靠转发
TLS over TCP (RFC 5425)TCP + 证书加密跨网段、公网、合规要求
RELPrsyslog 社区自研的可靠事件日志协议,带应用层 ACK不允许丢日志的转发链路
Redis/Kafka 等日志进消息队列而非 syslog 协议大规模缓冲削峰、流式消费

rsyslog 全部支持:UDP/TCP/TLS 是 imudp/imtcp + omfwd 的基本能力,RELP 由 imrelp/omrelp 提供,Kafka/Redis 由对应输出模块提供。本文选型对比中的竞品对协议的支持程度不同,见第七章量化对比。

三、核心架构

rsyslog 的架构是一条「输入 → 解析/过滤 → 输出」的流水线,全部组件都是可插拔模块,配置文件里 module(load=...) 装载了哪个模块,哪条流水线才存在。整体分为四层(来源:官方文档站 Modules 与 RainerScript 手册,查询日期 2026-10-20):

3.1 输入模块层(im* 前缀)

输入模块决定「日志从哪里进来」。常用输入模块:

  • imuxsock:监听本地 Unix socket(默认 /dev/log),接收应用通过 syslog(3) API 或 logger 命令投递的日志;
  • imjournal:直接读取 systemd journal,作为与 journald 的桥接(Ubuntu 桌面版/服务器版默认启用 imuxsock + imjournal 组合);
  • imfile:监视任意文本日志文件(如 Nginx access log、Java 应用 log4j 输出),把文件内容作为 syslog 消息流引入;
  • imudp / imtcp:监听网络端口(默认 UDP/TCP 514),作为中心日志服务器接收远端转发;
  • imkafka / imrelp / impstats:从 Kafka 消费、RELP 接收、周期输出自身统计信息。

3.2 解析与过滤层(RainerScript + parser)

v8 的过滤核心是 RainerScript——一种脚本化配置语言,支持 if ... then ... else、属性比较($msg contains 'error')、表达式、规则集(ruleset)与流程控制。它是 rsyslog 相比传统 syslog 的最大能力差异:传统 syslog 的 filter 只能按 facility.priority 选择,RainerScript 可以对消息的任意字段做正则/包含/数值比较后再路由。

3.3 输出模块层(om* 前缀)

输出模块决定「日志去哪里」。常用输出模块:

  • omfile:写本地文件(/var/log/syslog、/var/log/auth.log 等都由它落地),支持动态文件名模板;
  • omfwd:UDP/TCP 转发到远端,支持 target 轮询、TLS;
  • omkafka:输出到 Kafka(需编译时启用或安装 rsyslog-kafka 包);
  • omes / omelasticsearch:输出到 Elasticsearch/OpenSearch;
  • ommysql / ompgsql / ommongodb:直接写数据库;
  • omprog:把日志通过 stdin 管道交给外部程序处理;
  • omrelp / omsnmp / ommail:RELP 转发、SNMP trap、邮件告警。

3.4 队列引擎层(main queue + action queue)

队列是 rsyslog 高吞吐与不丢日志的关键:主队列(main queue)位于规则集引擎之后,每个 action 还可以有自己的 action queue。队列有三种模式——direct(无队列直通)、in-memory(内存队列,可选 disk-assisted 落盘辅助)、disk(纯磁盘队列)。当下游(如 Kafka、ES)短暂不可用时,队列先把日志缓冲在内存/磁盘,恢复后自动重发,这是「不丢日志」架构承诺的实现基础(来源:官方 Queues 文档,查询日期 2026-10-20)。

流水线全景:im* 输入 → 规则集(过滤/RainerScript)→ main queue → 多个 action(各带可选 action queue)→ om* 输出。

四、功能特性

以下特性清单来自官方文档站功能页与模块手册(查询日期 2026-10-20),按运维使用频率排序:

  • 多线程与高吞吐:C 语言实现、多线程输入/输出、队列化流水线,官方定位即为高性能转发与 ETL(GitHub 仓库描述:"High-performance log ingestion and ETL engine",查询日期 2026-10-20;官方性能基准页 https://www.rsyslog.com/performance/ 提供量化数据);
  • RainerScript 配置语言:if/then/else 过滤、规则集、stop 指令、属性重写,v8 主推的配置形态,替代 v5 及以前的 $ 开头 legacy 指令;
  • 模块化插件体系:输入/输出/解析/消息修改四类模块按需装载,未装载即零开销;
  • 多格式支持:RFC 3164(BSD syslog)、RFC 5424(新 syslog)、JSON(mmjsonparse)、任意正则(mmnormalize + liblognorm 规则库);
  • 可靠传输:TCP、TLS(GnuTLS/OpenSSL 双实现)、RELP 应用层确认;
  • 磁盘缓冲:disk-assisted queue 让转发链路在下游宕机时先把日志落到磁盘,恢复后续传;
  • 日志文件轮转配合:与 logrotate 的 postrotate kill -HUP 机制原生兼容;
  • 消息签名与加密落盘:支持对日志文件做数字签名(防篡改审计场景);
  • 统计自观测:impstats 模块周期输出队列深度、处理速率等内部指标,可对接 Prometheus 文本格式。

License 与治理:GitHub 仓库主 License 检测为 LGPL-3.0(仓库内另含 GPL-3.0、Apache-2.0 许可的组件代码,来源:GitHub 仓库页 License 区域,查询日期 2026-10-20)。项目由 rsyslog 社区维护,核心维护者 Rainer Gerhards 即项目创始人,同时有 Adiscon GmbH(rsyslog 商业支持公司)持续投入,社区版与企业版同源。

五、快速开始(最小可用示例)

本章为官方文档形态的「最小可用示例」,帮助读者在读安装篇之前建立配置直觉;示例均可在 Ubuntu 22.04 自带的 8.2112.0 上运行,逐条实测过程见本专栏《rsyslog 8.2112.0 配置参数详解》与《rsyslog 8.2112.0 常用 CLI 命令与工具详解》。

rsyslog v8 的最小配置由三段构成——装载模块、定义模板、写规则。一个「把收到的一切日志按自定义格式写入文件」的最小配置如下(形态取自官方文档 https://www.rsyslog.com/doc/ 的 RainerScript 与 omfile 手册):

# 装载输入与输出模块
module(load="imuxsock")   # 本地 Unix socket 输入(/dev/log)
module(load="imudp")      # UDP 网络输入

# 定义输出模板:时间 主机名 应用 进程 消息
template(name="mytpl" type="string"
         string="%timegenerated% %HOSTNAME% %syslogtag%%msg%\n")

# UDP 514 收到的日志写入 /var/log/remote.log,套用自定义模板
input(type="imudp" port="514" ruleset="remote")
template(name="remote" type="list") { constant(value="/var/log/remote.log") }

if $fromhost-ip != '127.0.0.1' then {
    action(type="omfile" file="/var/log/remote.log" template="mytpl")
}

验证闭环的三条命令(在服务器上实际执行的完整回显见配置详解篇):

logger -n 127.0.0.1 -P 514 -d "hello rsyslog"   # 模拟远端通过 UDP 投递一条日志
tail -n 1 /var/log/remote.log                    # 查看是否按模板格式落盘
rsyslogd -N1 -f /etc/rsyslog.conf                # 发布前先做配置语法校验

💡 说明:生产上不要直接改 /etc/rsyslog.conf 主文件,发行版约定把自定义规则放进 /etc/rsyslog.d/*.conf(按文件名顺序合并加载),这样包升级不会覆盖你的配置。这一目录结构在安装篇有完整实测。

六、适用场景与限制

6.1 适用场景

结合官方文档定位与运维实践,rsyslog 的主战场是:

  1. 系统日志中枢:几十到几千台服务器的 syslog 集中接收点(UDP/TCP 514),落地分类存储——这是它作为发行版默认组件的天然分工;
  2. 转发路由器:把分散日志按 facility/host/内容过滤后分发到不同下游(文件、Kafka、ES、数据库);
  3. 文件日志采集器:用 imfile 把不直接说 syslog 协议的应用日志(Nginx/Java/自研程序)引入日志链路,替代在每台机器上再装一个采集 Agent 的方案;
  4. 轻量 ETL 节点:用 mmnormalize/mmjsonparse 做格式归一化后输出结构化 JSON——rsyslog 官方新的自我定位 "log ingestion and ETL engine" 即指此;
  5. 不丢日志的缓冲层:disk-assisted queue 让它在下游故障时顶住缓冲压力。

与监控告警类系统的分工:rsyslog 只管「日志」这一根数据管道。指标监控用 Prometheus/Zabbix 一族、探针采集用 Telegraf 一族、Web 化巡检用 Icinga/Cacti 一族(本平台有《Icinga 2.16.5 介绍与选型指南》与《Cacti 1.2.31 介绍与选型指南》可对比参考)。rsyslog 常作为这些系统所产出/所需日志的搬运与落盘层出现在同一台服务器上。

6.2 限制与注意

  • 无 Web UI、无检索引擎:rsyslog 落盘即结束,检索要靠 grep/journalctl,或在下游接 Loki/ES;想要「开箱即查」的体验,需要的是日志检索平台而不是 rsyslog;
  • 配置学习曲线陡:RainerScript 表达力强但细节多(队列参数、规则集继承、模板嵌套),误配置可能导致日志重复或丢失,发布前必须用 rsyslogd -N1 校验;
  • 改错系统主配置影响面大:rsyslog 承载系统日志,主配置写错轻则丢日志、重则磁盘写爆(无限循环转发的经典事故),隔离实验务必用独立配置文件拉第二实例;
  • 版本碎片化:发行版自带版本普遍落后上游多个发布周期(如 jammy 的 8.2112.0 vs 上游 8.2608.0),跨机环境需注意配置语法在老版本上的兼容性;
  • 性能强依赖配置:同样是 rsyslog,队列直通模式与磁盘队列模式吞吐可差一个数量级,官方性能数据与实际表现需按配置复测。

七、同类选型对比

日志管道类工具的选型,本质是在「系统日志语义、采集广度、转发可靠性、资源占用、下游生态」五个维度上取舍。下表数据均于查询日期 2026-10-20 从各项目 GitHub releases.atom 与仓库页溯源(rsyslog 星数来自仓库页 HTML 的 stargazerCount 字段):

7.1 量化对比总表

维度rsyslogsyslog-ngjournaldFluent BitVector
定位系统级 syslog daemon + ETL 引擎系统级 syslog daemon + 日志服务器systemd 内置日志守护嵌入式/边缘日志采集器高性能日志/指标采集路由器
实现语言CCC(systemd 体系)CRust
查询日最新版8.2608.0(2026-08-18)4.12.0随 systemd 发布5.1.40.60.0
版本节奏约 2 月一版(YYMM 命名)约 2-3 月一版随 systemd 半年大版月度小版 + 季度大版月度版
GitHub 星数2339约 2400 量级随 systemd 仓库约 6800 量级约 19500 量级
发行版默认地位Debian/RHEL 系默认 syslogSUSE/部分企业发行版systemd 系默认 journal需另装需另装
配置语言RainerScript(v8)+ legacy $ 指令syslog-ng 配置语法(filter/parser/destination 三段式)无(只收不改路由)YAML(pipeline/processor)TOML(source/transform/sink)
syslog 语义(RFC 3164/5424)原生、最完整原生、完整原生产出,路由能力弱有限支持有限支持
可靠传输TLS/RELP/磁盘队列TLS/磁盘缓冲无网络转发TLS/重试/磁盘缓冲TLS/检查点/磁盘缓冲
下游生态Kafka/ES/HDFS/DB/Redis/HTTP 等Kafka/ES/DB/HTTP 等无(靠转发端)200+ 内置插件极丰富的 sink 矩阵
资源占用(同负载)低(C,常驻几十 MB)低-中(C)极低(随 systemd 常驻)极低(设计目标 <1MB 基线可调)中(Rust 常驻更高)
许可LGPL-3.0(含 GPL-3.0/Apache-2.0 组件)GPL-2.0(社区版)/ 商业版LGPL-2.1+Apache-2.0MPL-2.0

💡 技术拓展:日志采集器(Agent)与日志服务器(Server)是两类角色——rsyslog/syslog-ng 两头都做;journald 只做本机 journal;Fluent Bit/Vector 是纯采集端。选型先分清角色再比功能,否则会把「采集器吞吐」和「服务器转发可靠性」错配。

7.2 关键差异解读与选型建议

  • rsyslog vs syslog-ng:两者是同一生态位的直接竞品(都是 C 写的系统级 syslog daemon,都跨发行版可用)。rsyslog 的差异化在队列引擎(disk-assisted queue 的细粒度控制)、RainerScript 的表达力与发行版默认装机量;syslog-ng 的差异化在 filter/parser/destination 三段式语法的可读性与商业版(One Identity)的企业支持。同构场景二选一即可,从发行版默认出发选 rsyslog 改造成本最低;
  • rsyslog vs journald:不是替代关系。journald(systemd 体系)负责本机 journal 的结构化存储与 journalctl 检索,rsyslog 通过 imjournal 把 journal 内容引到传统文本日志或远端转发——Ubuntu 22.04 的默认布局就是两者共存的产物。只有 journal、不要文本日志和转发的小型单机,可以只用 journald;
  • rsyslog vs Fluent Bit/Vector:后两者是云原生时代的新一代采集器,优势在插件广度(Vector 的 sink 矩阵、Fluent Bit 的 200+ 插件)、Kubernetes 生态贴合与结构化处理;劣势是不具备发行版默认 syslog daemon 的「地基」地位,RFC 3164/5424 语义与 RELP 这类传统 syslog 传输的支持不如 rsyslog 完整。K8s/容器日志选 Fluent Bit 或 Vector,传统服务器 syslog 中枢与转发链路选 rsyslog;
  • 一条经验法则:机器上已经有 rsyslog 在跑(发行版默认),优先把需求交给 rsyslog 的模块解决,只有当需求超出「日志」范畴(比如要同时采指标、trace)或进入 K8s 动态环境时,才引入 Fluent Bit/Vector 作为第二采集层。

7.3 社区活跃度与版本节奏

  • 版本节奏(来源:GitHub releases.atom,查询日期 2026-10-20):8.2512.0(2025-12-22)→ 8.2602.0(2026-02-16)→ 8.2604.0(2026-04-23)→ 8.2606.0(2026-06-25)→ 8.2608.0(2026-08-18),稳定保持约两个月一个稳定版的节奏,版本号「年.月」命名让新旧一目了然;
  • 社区规模(来源:GitHub 仓库页,查询日期 2026-10-20):rsyslog/rsyslog 仓库星数 2339、仓库描述 "High-performance log ingestion and ETL engine"。星数低于 Fluent Bit/Vector 这类云原生新贵,但这符合其特性——它是「系统底座型」软件,绝大多数用户通过发行版包获取,活跃度更多体现在发行版安全更新的持续回移植(jammy 的 8.2112.0 已迭代 5 个 ubuntu 补丁号)与官方邮件列表/文档站的长期维护上;
  • 商业支持:Adiscon 提供 rsyslog 商业版(含专业排障支持与 Windows 版代理 WinSyslog/EventReporter),社区版与商业版同源,企业需要 SLA 时有明确付费通道。

八、参考链接