在Ubuntu 16.04上rsyslog和journald的关系

我正在运行什么是一个普通的Ubuntu 16.04服务器,而我正试图了解默认情况下如何设置日志记录。 我可以看到journaldjournald都已安装并运行,但我并不清楚如何处理日志消息。

大多数消息似乎都出现在/var/log/syslog和通过journalctl ,但我看不到在/etc/systemd/journald.conf中两者之间转发的任何显式配置(基本上所有注释都由默认),/ /etc/rsyslog.conf/etc/rsyslog.d/50-default.conf 。 我试图寻找官方文档,甚至是一篇博客文章,解释了如何在Ubuntu中设置这两个,但还没有设法找到任何东西。

为了进一步增加我的困惑,我在主机上执行了logger -p local1.info Test ,发现没有写入/var/log/syslog ,而消息确实显示在journalctl下。

我的问题是:

  1. 在Ubuntu 16.04上默认情况下,journald和rsyslog是如何协同工作的(默认情况下)?
  2. 为什么logger发送的消息似乎最终会出现在日志中,而不是在syslog中?

更新:原来logger没有按预期工作是我的错误,因此它与主要问题无关。

默认情况下,rsyslog使用“imuxsock”模块,该模块提供:

能够通过本地Unix套接字接受syslog消息。 最重要的是,这是syslog(3)调用将syslog消息传递给rsyslogd [1]的机制 。

rsyslog可以使用名为“imjournal” [2]的模块从systemd-journal导入结构化日志消息。

它可以加载像:

 module(load="imjournal") 

在:

 /etc/rsyslog.conf 

另一方面,“systemd-journald”捕获所有数据本身:

 man systemd-journald 

systemd-journald是一种收集和存储日志记录数据的系统服务。 它根据从各种来源收到的记录信息创建和维护结构化,索引的日记帐:

  · Kernel log messages, via kmsg · Simple system log messages, via the libc syslog(3) call · Structured system log messages via the native Journal API, see sd_journal_print(4) · Standard output and standard error of system services · Audit records, via the audit subsystem 

您仍然可以使用journalctl访问系统日志时journalctl

 $ sudo systemctl mask rsyslogd $ sudo systemctl stop syslog.socket $ sudo systemctl stop rsyslog.service $ systemctl is-active rsyslog.service inactive $ logger -p mail.info Helllooo $ journalctl 

例如,centos使用“imuxsock”模块通过rsyslog捕获所有“systemd-journald”数据,而opensuse根本没有“syslog”。


要找出您的消息没有以/var/log/syslog结尾的原因,您应该检查以下文件:

 less /etc/rsyslog.d/50-default.conf 

查找*.info ,查看它们的存储位置,它可能是其他文件,如messages

对我而言,它出现在journalctlsyslog

Systemd是一个init系统,用于在系统启动时启动服务。 Journald负责为systemd启动的服务创建日志。 通过将journald与systemd集成,即使是最早的引导过程消息也可用于journald。

Rsyslog是一个专门用于日志处理的守护进程,与journald无关。 它可以通过多种方式登录并以多种方式输出。 默认情况下,它不会启用来自journald的日志消息。 为此,您必须在/etc/rsyslog.conf文件中写入,

 $ModLoad imjournal # im -> input module OR load(type="imjournal") 

现在,它也将接受来自日记的日志。 但我建议您不要更改/etc/rsyslog.conf文件。

在/etc/rsyslog.conf文件的末尾,有一行写的,

 $IncludeConfig /etc/rsyslog.d/*.conf 

这意味着在rsyslog加载过程中,应该包含/etc/rsyslog.d/文件夹中所有文件末尾的文件。 因此,您的所有自定义配置都应该包含在这些文件中

我建议你创建一个文件/etc/rsyslog.d/journald.conf并将下面的代码段粘贴到其中。

以下是imjournal的rsyslog官方页面的片段

 module(load="imjournal" PersistStateInterval="100" StateFile="/path/to/file") #load imjournal module module(load="mmjsonparse") #load mmjsonparse module for structured logs template(name="CEETemplate" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag% @cee: %$!all-json%\n" ) #template for messages action(type="mmjsonparse") action(type="omfile" file="/var/log/ceelog" template="CEETemplate") 

第1行 – 它加载imjournal模块以接受来自journald的日志

2 – 加载mmjsonparse模块用于解析日志

3 – 它们在模板中以所描述的格式构造

4 – 它使用mmjsonparse模块解析这些日志。

5 – 使用omfile(输出模块文件 – 输出到文件)模块,根据给定模板中提供的结构将这些日志发送到文件即/ var / log / ceelog。

根据需要在配置中进行更改。