syslog-ng 与 systemd 的 journald
2018 年 4 月 30 日 | Douglas DeMaio | 无许可


这篇博客是为 openSUSE Leap 15 发布而准备的一系列技术博客的一部分。所有博客都提供了关于 openSUSE Leap 以及发行版中可用软件包的使用案例。祝您阅读愉快。
作者:Peter Czanik
人们经常问我该使用什么:systemd 的 journald 还是 syslog-ng? 快速答案是两者都有可能,但这取决于您如何使用您的计算机。如果您只有一台独立的机器,journald 可能就足够了。甚至还有一个不错的桌面应用程序可以查看日志。但是,一旦您有多个机器需要管理,使用 syslog-ng 就会有很多优势。
即使您使用 syslog-ng,本地系统日志也会被 journald 收集。它是 systemd 的一个组成部分,无法卸载。幸运的是,syslog-ng 可以从 journal 读取日志消息。如果 journald 存储了关于某个事件的附加键值对,syslog-ng 也可以读取这些信息。
那么,为什么要安装 syslog-ng? 简短的答案是:集中日志记录。
为什么集中收集日志如此重要? 一个原因是易用性,因为集中日志记录创建了一个检查日志的单一位置,而不是成千上万的设备。 另一个原因是可用性——即使设备本身由于某种原因不可用,您也可以检查设备的日志消息。 第三个原因是安全性;当您的设备被黑客入侵时,检查日志可以发现黑客的痕迹。
journald 也具有一些集中日志记录功能,但 syslog-ng 提供了更多的功能和更好的性能
-
journald 最初是为桌面上的本地日志设计的——日志的数量并不多。 另一方面,syslog-ng 从一开始就被设计用于高性能的集中日志收集。
-
syslog-ng 可以从更多的来源收集日志,包括管道、套接字和文件。文件源尤其重要,因为许多应用程序(例如 Web 服务器)将日志记录到文件,并且以 journald 无法处理的速率进行记录。
-
syslog-ng 不仅仅是简单的日志存储。它可以以多种方式处理日志消息:解析它们以创建用于更轻松的警报和报告的键值对,用地理信息(GeoIP)丰富它们,重写它们以进行匿名化(参见 PCI-DSS 或 GDPR),或根据目标的需要重新格式化它们。
-
syslog-ng 中的过滤可以实现非常精确的日志路由,确保所有日志都到达正确的目的地。
-
说到目的地:有很多可能性可以存储日志消息,而不仅仅是像多年前那样存储在平面文件或其他的 syslog 服务器中。 例如,您可以将日志存储在 SQL 数据库中,使用 HTTP 将日志发送到 Splunk 进行进一步分析,将从日志中解析出的键值对存储在 MongoDB 中,或使用 SMTP 目的地发送电子邮件警报。
这些功能中的绝大多数都可以在 Leap 和 Tumbleweed 中的核心 syslog-ng 包中通过一个“zypper in syslog-ng” 命令获得。如果某个功能需要额外的依赖项(例如 GeoIP),则所需的模块作为子包提供。对于 GeoIP,那就是 syslog-ng-geoip。
如果您对 syslog-ng 有任何问题或意见,请随时联系上游开发者。您可以通过电子邮件联系我们,甚至可以与我们聊天。有关可能性列表,请查看我们的 Github 页面下的“社区”部分,网址为 https://github.com/balabit/syslog-ng。在 Twitter 上,我可以使用 @PCzanik 与您联系。