Syslog 与 journald
最后更新于:本页内容
Syslog:概述
Syslog 是用于标准化消息记录的传统且最广泛使用的协议。它最初于 1980 年代开发,定义了日志消息的格式、严重级别和设施代码。
它作为一个供应商中立的标准存在,定义了日志应如何格式化和传输,而不管处理它的程序是什么。因此,syslog 消息通常为纯文本,且在不同操作系统和 网络设备之间易于阅读。
Syslogd:传统的 syslog 守护进程
Syslogd 是在 Unix 和早期 Linux 系统中实现 syslog 协议的基础程序。其主要功能是读取日志消息并将其路由到 /var/log/ 目录中的特定纯文本文件。消息随后根据其设施和严重级别进行路由。
虽然它提供了初步的日志记录机制,但其依赖 UDP 协议进行网络传输,存在传输过程中数据丢失的风险。它还缺乏复杂的过滤功能,导致噪声过多和日志数据量过大。因此,它最终被淘汰,现代 Linux 发行版开始用下一代守护进程如 rsyslog 和 syslog-ng 替代它。
现代 syslog 守护进程:Syslog-ng 和 rsyslog
由于原始 syslogd 程序存在显著限制,它被下一代守护进程取代。两个最常见的守护进程如下:
Syslog-ng
Syslog-ng,即 syslog 下一代,是一个强大且高度灵活的 syslog 守护进程,以其清晰的面向对象配置结构和强大的路由能力著称。它通过面向对象的配置定义可重用组件或模块,如源、过滤器和目标,从而区别于传统 syslog。这些模块随后与日志语句链接,使复杂的数据流易于审计和管理。
Syslog-ng 还包含强大的解析器,将非结构化的纯文本 syslog 消息转换为结构化格式,如 JSON,为分析平台和 SIEM 工具提供可操作的洞察。它使用 UDP 以及安全的 TCP 协议进行日志传输,同时支持 TLS 加密,确保日志管道端到端的安全。
Rsyslog
Rsyslog 是大多数 Linux 发行版上的默认 syslog 守护进程。它以高性能、模块化日志记录和强兼容性著称。Rsyslog 也被称为日志处理的火箭般快速系统,采用模块化架构,利用专用输入模块(im*)和输出模块(om*)连接任何源和任何目标。
在日志格式方面,rsyslog 支持原始 BSD syslog 格式以及包含结构化数据字段的现代 IETF syslog 协议。它还使用模板,允许高度自定义输出,实现如 JSON 这样的结构化日志格式,便于与现代日志分析系统集成。它使用 RELP,这是一种基于 TCP 的应用层协议,确保日志传输过程中不丢包。
这些现代守护进程也已成为 Linux 日志系统的关键组件,具备实时过滤、磁盘排队和安全网络转发等高级功能。
什么是 journald?
Journald,也称为 systemd-journald,是 systemd 套件中的集中式日志组件。它收集并存储来自所有系统组件的日志数据,统一存放在称为 systemd 日志的单一位置。它捕获内核(kmsg)、初始启动过程(initrd)、标准 syslog 调用和 systemd 服务单元的日志。
它以结构化、索引的二进制格式存储日志,而非像 syslog 那样的纯文本文件。这允许快速查询,避免了手动日志轮换的需求。日志通常持久存储在 /var/log/journal/ 目录中。它使用强大的命令行工具 journalctl 来访问和过滤日志。它兼容现代 syslog 系统,也可以将日志转发到传统 syslog 守护进程,如 syslog-ng 和 rsyslog。
Syslog 与 journald 如何协同工作
使用 systemd 的 Linux 系统采用协作且分层的架构,利用核心的 journald 服务以及 现代 syslog 守护进程如 syslog-ng 和 rsyslog。journald 与 syslog 守护进程之间的交互使系统既能受益于 journald 的结构化、高性能本地收集,又能利用 syslog 守护进程的高级过滤和网络转发功能。该分层架构涉及以下组件及其各自角色。
Journald 作为主要收集器
内核、systemd 下运行的服务和应用程序生成的所有日志消息首先被定向到 journald 服务。Journald 以结构化二进制格式收集这些日志,并存储在其自己的存储库中,即 /var/log/journal/。
Journald 作为转发器
在收集日志的同时,journald 还将日志写入一个特定的 Unix 域套接字,通常位于 /run/systemd/journal/syslog。该套接字作为消息通道,将日志转发给守护进程。
现代守护进程作为日志接收器
Syslog-ng 和 rsyslog 是常见的守护进程,配置为从转发套接字读取日志。Rsyslog 使用其 imjournal 输入模块监控该套接字,而 syslog-ng 使用其 systemd-journal 源获取日志。一旦现代 syslog 守护进程(rsyslog 或 syslog-ng)接收日志,它们会对日志进行过滤、处理并路由到最终目的地。目的地包括本地文本文件(/var/log/messages 或 /var/log/auth.log),日志被写入其中,syslog 服务器用于存储,或 SIEM 工具用于分析。
Journald 与 syslog:比较
以下是 journald 与 syslog(如 syslog-ng 和 rsyslog 守护进程)之间的一些主要区别。
| 功能 | Journald(systemd-journald) | Syslog 守护进程(rsyslog 或 syslog-ng) |
|---|---|---|
| 主要关注点 | 作为 systemd 套件中的日志收集、索引和搜索组件。 | 作为日志收集器,用于远程转发、过滤和存储日志。 |
| 架构 | 涉及一个与 systemd init 系统完全集成的单一组件。 | 涉及模块化架构。 |
| 跨平台 | 仅适用于带有 systemd 组件的 Linux。 | 被大多数操作系统和网络设备使用。 |
| 配置语法 | 需要最少的配置。 | 涉及用于过滤和路由的复杂配置文件(例如,rsyslog 的 RainerScript)。 |
| 日志格式 | 日志以结构化、压缩的二进制格式存储和索引。 | 日志以人类可读的纯文本字符串存储。 |
| 结构化数据字段 | 涉及丰富的元数据,并自动记录数百个字段,如启动 ID、单元名称、PID、用户和优先级,每条日志条目均包含这些信息。 | 涉及有限的元数据,主要记录时间戳、主机名、设施和严重性。 |
| 日志存储 | 日志存储在 /var/log/journal/ 或 /run/log/journal/ 路径下。 | 日志存储在 /var/log/ 目录中,包括 syslog、messages 和 auth.log 等文件。 |
| 日志传输 | 日志以原生方式压缩存储。不支持远程传输。 | 使用磁盘排队和先进协议,如 TCP, TLS 和 RELP,确保日志的可靠和有保障传输。 |
| 日志持久性 | 默认是易失性的,即除非明确配置持久存储,否则重启时日志可能丢失。 | 默认是持久性的,即日志会立即写入文件系统。 |
| 查询 | 日志被索引,允许基于任何结构化字段快速过滤和搜索。 | 搜索涉及使用 grep 等工具逐行扫描整个文件。 |
| 命令行工具 | 使用 journalctl,这是一个用于查询、过滤和索引搜索的高级工具。 | 使用标准 Linux 命令行工具,如 cat、grep 和 less。 |
| 日志轮转 | 自我管理,内部处理存储限制、压缩和轮换。 | 需要外部工具,如 logrotate,来管理文件大小。 |
| 网络转发 | 传统上不转发日志,依赖 syslog 守护进程完成此功能。 | 是核心功能,针对使用 TCP、TLS 和 RELP 的可靠远程转发进行了优化。 |
Journald 在 syslog 监控中的作用
可以使用其命令行工具 journalctl 利用 Journald 访问日志以执行以下功能:
本地系统故障排除
用于主动快速诊断主机上的近期问题,使用结构化查询。这有助于监控系统健康并收集主机系统遥测信息,这对于 syslog 管理 至关重要。
结构化过滤
用于使用特定元数据字段过滤日志,如 _COMM(命令名)、_PID(进程 ID)或 _UNIT(systemd 服务名)。这有助于过滤并获取所需数据,减少噪声并优化 syslog 分析。
日志管理(操作系统级别)
用于直接访问 systemd 服务、内核和初始启动过程的日志,以进行 syslog 安全监控。还允许在启用持久存储时分离并查看之前系统启动的日志,实现日志保留和存储以供 syslog 审计。
Syslog 守护进程在 syslog 监控中的作用
syslog-ng 和 rsyslog 等 syslog 守护进程支持以下功能,以实现高效的 syslog 监控:
结构化日志处理
守护进程可以从多种来源摄取日志,例如 systemd journald、syslog 代理、转发器和中继器,并将非结构化日志数据转换为 JSON 等结构化格式。这种标准化至关重要,因为它使中央监控工具能够解析和分析数据,无论其原始格式如何。守护进程还允许基于设施和严重性以及消息内容进行高级、细粒度的日志过滤,从而确保在日志接收端减少噪声并优化带宽。这确保了syslog 服务器和 SIEM 工具仅接收对安全监控至关重要的有用信息。
集中式日志转发
Syslog 守护进程作为高效的日志转发器,收集、存储、解析、索引并将来自各种来源的日志转发到中央日志管理或 SIEM 工具进行 syslog 分析和监控。它们还可以执行预处理操作,如消息重写以掩盖敏感数据,或在转发前完全丢弃无关日志,从而节省带宽并降低中央服务器的存储成本。它们还利用TCP 或 TLS 协议、RELP 和磁盘排队确保日志可靠传输,避免日志在传输过程中丢失。
Syslog 服务器功能
处于接收模式的守护进程作为高效的 syslog 服务器,收集、过滤和重写日志以进行 syslog 分析。通过 grep 等命令行工具,守护进程帮助搜索和查询日志,实现增强的syslog 监控和管理。此外,它们还存储、归档和保留日志以满足合规审计要求。
Syslog 服务器集中收集所有 syslog 设备的日志,包括防火墙、路由器以及 Unix 或 Linux 机器,确保高效的日志管理和分析。
EventLog Analyzer 作为中央目标
虽然 journald 擅长本地收集,syslog 守护进程负责转发,但两者都不提供安全团队所需的关联、仪表板或合规报告。ManageEngine EventLog Analyzer 作为所有 syslog 数据的中央目的地和综合枢纽,无缝利用 Linux 日志系统的功能。它收集、解析并规范化从 rsyslog 和 syslog-ng 等守护进程转发的日志数据,其中包括 journald 处理过的日志。
EventLog Analyzer 还通过高级搜索和过滤选项消除了 journalctl 和基本 grep 搜索的本地限制。它还提供仪表板、报告、检测规则和合规审计的警报模块,实现仅靠 syslog 守护进程和 journald 无法完成的监控。
EventLog Analyzer 的一些高级功能包括:
- 统一可视化: 将 syslog 和 journald 事件整合到单一可搜索的仪表板中。
- 实时威胁关联: 超越简单搜索,关联多个事件并实时检测复杂的多阶段攻击。
- 可操作的安全性: 将原始日志条目转化为连贯且可操作的安全分析数据,用于威胁调查和响应。
- 自动合规:: 生成针对 HIPAA、PCI DSS 和 GDPR 等标准的预构建报告,支持日志归档和保留功能。
接下来是什么?
常见问题解答
Journald 日志是由现代 Linux 系统上的 systemd-journald 服务收集的集中式结构化日志消息。它们包括内核、服务和应用程序输出,并以索引的二进制格式存储,允许通过 journalctl 实用程序快速搜索。
不,syslog 和 journald 不一样,但它们协同工作。Journald 是集成在 systemd 中的现代二进制日志系统,而 syslog(syslog-ng 或 rsyslog)是较旧的标准文本协议,主要用于写入日志文件或通过网络转发日志。
syslog 和 journald 之间的主要区别包括:
| 功能 | journald | Syslog |
|---|---|---|
| 主要来源 | Linux 系统上所有 systemd 服务的日志。 | 各类 syslog 服务器、设备和应用程序的日志。 |
| 日志格式 | 结构化二进制索引,带丰富元数据。 | 纯文本日志。 |
| 访问工具 | 使用 journalctl,功能强大的命令行工具。 | 使用 Linux 命令行工具,如 cat、grep 和 less。 |
可以,在现代系统中,journald 作为主要收集器,可以配置为将消息转发到本地 syslog 守护进程,从而实现两个系统的日志管理。











