rsyslog的关系并在Ubuntu 16.04上记录日志


18

我正在运行一台普通的Ubuntu 16.04服务器,并且我试图绕过默认设置日志的方式。我可以看到,无论journaldrsyslog已安装并运行,但它并不清楚我的日志信息是如何被处理。

大多数消息似乎都在/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. 日志和rsyslog在Ubuntu 16.04(默认)下到底如何协同工作?
  2. logger看似发送的消息如何最终出现在日志中,而不是在syslog中?

更新:事实证明,logger无法按预期工作是我的一个错误,因此与主要问题无关。

Answers:


12

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

通过本地Unix套接字接受系统日志消息的能力。最重要的是,这是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

rsyslogd当您仍然可以使用访问系统日志时,可以禁用它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”模块捕获所有“ systemd-journald”数据,rsyslog而opensuse根本没有“ syslog”。


要找出您的消息未发送到的原因/var/log/syslog,您应该检查以下文件:

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

查找*.info,查看它们的存储位置,它可能是另一个文件,例如messages

对我来说,它同时出现在journalctl和中syslog


logger -p .info hello无效。您尚未提供任何设施名称。
luv.preet

更新了答案....
Ravexina

正如我在编辑中指出的那样,logger无法正常工作是我的错,所以现在已修复(仍然感谢提示)。至于在两个地方显示的日志,您的注释imuxsock似乎是关键:似乎rsyslog和journald都在侦听本地syslog消息,因此为什么将这些条目放入两个单独的日志中。
motns

我在ubuntu上执行了上述操作,但现在没有从logger收到任何日志,嗯:root @ T:〜#logger -p mail.info Helllooo root @ T:〜#journalctl未找到日志文件。-没有参赛作品-有什么想法吗?
Hackeron

好答案。但是,我缺少的是有关禁用rsyslog时日志记录如何打开syslog套接字的记录(或者如果不是,则如何获取syslog消息)?还是需要手动配置日记帐?
Matthijs Kooijman,

4

Systemd是一个初始化系统,用于在系统启动时启动服务。Journald负责为systemd启动的服务制作日志。通过将日志记录与systemd集成,即使最早的引导过程消息也可用于日志记录。

Rsyslog是专门用于日志处理的守护程序,与日志记录无关。它可以通过多种方式获取日志并以多种方式输出日志。默认情况下未启用它也从日志记录中获取日志消息。为此,您必须写入/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/文件夹中结尾处带有.conf的所有文件。因此,所有自定义配置都应放在这些文件中

我建议您制作一个文件/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模块以接受来自日志的日志

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

3-它们以模板中描述的格式组织

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

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

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


感谢您的解释,但是我认为@Ravexina的答案更接近于帮助我了解rsyslog和日志记录的情况默认情况下(无需额外配置)。
motns
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.