我注意到,在我的 CentOS 7 系统上,journald 和 /var/log/messages 中的日志消息是重复的。起初,我以为是 journald 选项 ForwardToSyslog(在安装版本中默认为“yes”)导致了此行为,但将其设置为“no”并没有什么不同。
显然,如果我停止 rsyslog 服务,/var/log/messages(可能还有一些其他日志)的记录也会停止,但当我执行此操作时,我担心 rsyslog 会记录 journald 没有记录的内容。
rsyslog 是否只记录从 journald 读取的内容,还是也记录其他内容?
从 /etc/rsyslog.conf 中提取:
# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
...
# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on
答案1
Journal 是 systemd 的一个组件,负责查看和管理日志文件。它可以并行使用,也可以代替传统的 syslog 守护程序(例如 rsyslogd)。
默认情况下,rsyslogd 使用 imjournal 模块作为日志文件的默认输入模式。
启用持久日志记录后,日志文件将存储在 /var/log/journal 中,这意味着它们在重启后仍然存在。然后,对于某些用户来说,Journal 可以替代 rsyslog(但请参阅章节介绍)。
基于此,我想说,如果启用了 journald 持久存储,并且没有应用程序依赖于 rsyslog 生成的特定文件和格式,则 rsyslog 是多余的,内容是相同的。
答案2
我们通过不创建 /var/log/journal(这样 journalctl 的内容就暂时存在了)并设置 rsyslog 将 journald 中的所有内容存储在新的日志文件中来解决这个问题。我们经常需要在事后调试我们的部署,而通过日志文件查找(对于我们这些老手来说)比学习一种新的晦涩难懂的命令语言要容易得多。
:syslogtag,startswith,“systemd”/var/log/systemd.log
我们还了解到,systemd 安装的“/etc/rsyslog.d/listen.conf”是粘合剂的重要组成部分;我们的一个组件无意中抹去了
$IncludeConfig /etc/rsyslog.d/*.conf
我们从 journald 中没有得到任何信息。
答案3
回复较晚,但对于喜欢经典 syslog 的人来说,可以按以下方式配置 journald:
[Journal]
Storage=none
ForwardToSyslog=yes
然后根据需要配置 rsyslog。这样,您可以保留仅 journald 应用程序的日志记录,同时拥有单一日志处理引擎 - rsyslog。