在 Linux 系统中,syslog 和 rsyslog 经常被一起提到,但它们的含义和定位并不相同。下面从概念、关系、功能对比几个方面说明区别。
一、基本概念
1. syslog(协议 + 传统守护进程)
- syslog 最早是 BSD 系统中的日志规范(RFC 3164,后来有 RFC 5424)。
- 它包含两个含义:
- 日志协议:定义日志格式、设施(facility)、级别(severity)
- syslogd 守护进程:最早的日志服务程序(如
syslogd)
- 传统
syslogd 功能非常简单:
2. rsyslog(增强版日志系统)
- rsyslog = “reliable syslog”
- 是 syslog 的增强替代实现
- 完全兼容 syslog 协议
- 现在是大多数 Linux 发行版(RHEL/CentOS/Ubuntu 等)的默认日志服务
二、核心区别对比
| 对比项 |
syslog(传统 syslogd) |
rsyslog |
| 是否默认 |
老系统使用 |
现代 Linux 默认 |
| 协议兼容 |
syslog |
syslog(完全兼容) |
| 配置复杂度 |
简单 |
功能强但配置稍复杂 |
| 远程日志 |
支持(基础) |
支持(TCP/TLS/RELP) |
| 性能 |
一般 |
高(队列、多线程) |
| 输出目标 |
文件、远程 |
文件、远程、数据库、MQ 等 |
| 过滤能力 |
弱 |
强(基于表达式) |
| 可靠性 |
可能丢日志 |
支持可靠传输 |
三、功能增强(rsyslog 独有)
rsyslog 在 syslog 基础上增加了:
- 多线程处理
- 日志队列(内存/磁盘)
- TCP + TLS 加密日志传输
- RELP 协议(不丢日志)
- 模板(template)格式化日志
- 写入数据库(MySQL / PostgreSQL)
- 与 systemd journal 集成
示例:
*.* @@logserver.example.com:514
表示通过 TCP 发送所有日志。
四、和 systemd-journald 的关系
现代 Linux 通常是:
程序 → systemd-journald → rsyslog → /var/log/messages
- journald:二进制日志,查询方便
- rsyslog:传统文本日志,兼容旧系统
五、一句话总结
syslog 是日志标准和老实现,rsyslog 是 syslog 的现代、增强、默认实现。
如果你愿意,我也可以:
- 对比 rsyslog vs syslog-ng
- 给你一份 rsyslog 实战配置示例
- 讲 如何排查日志不生效问题