我很难理解 Linux 上的日志记录是如何工作的。
自从包含了 systemd 之后,它似乎变得容易了一些,但是我仍然有几个概念不能完全理解。
给定一个带有 journalctl 的系统,我想将一些日志消息发送到远程主机。为此,我安装了 rsyslog 并配置了 freeradius,以便它将其日志输出到 local3,然后配置 rsyslog 以将 local3 下的这些消息转发到远程 syslog 服务器。现在,系统日志在 rsyslog 和 journalctl 之间共享吗?这会引起任何类型的冲突吗?
除此之外:谁控制写入 /var/log/messages 的内容?以及某个应用程序如何将其日志输出到此文件?它是由 rsyslog 管理吗?还是由 systemd 管理?
如果有人能帮助我了解整个 Linux 日志服务,那就太好了。
答案1
journald 和 rsyslog 之间的链接通过使用其输入和输出模块在 rsyslog 端进行控制;分别有和imjournal
用于omjournal
读取和写入日志。
因此,如果您向 rsyslog 写入某些内容,则只有在您配置了模块后,它才会出现在 journald 中omjournal
。
rsyslog“拥有” /var/log/messages
,常用的 syslog API 将允许应用程序写入它。如果imjournal
配置了模块,日志消息也可以在那里结束。
本简短的 RHEL 指南以几乎相同的方式解释事物。
答案2
具有 journalctl 的系统是日志系统,这意味着它们使用日志来处理所有 syslog 条目。默认情况下,这些系统不会将日志写入 /var/log/secure、/var/log/maillog/ /var/log/messages...
带有 rsyslog 的系统将 syslog 条目写入 /var/log 指令中的特定文件。有关此条目的设置(哪些日志记录到哪些文件)写入 /etc/rsyslog.conf
两者都使用 syslog 协议,但可以共享。因此,如果您在同一台机器上使用 rsyslog 和 journalctl,则不会出现任何问题。