journald 和 rsyslog 的日志消息在哪里

ygo*_*goe 6 server logging rsyslog syslog systemd-journald

在 Ubuntu 18.04 上同时安装了 journald 和 rsyslog。两者都用于收集日志消息并存储它们的相同目的。所以我们有两个程序在这里做同样的工作。

我能发现的是,journald 只将日志消息保存在它自己的日志文件中,可以使用该journalctl命令进行查询。没有写入可读文件。此外,journal 将始终从 systemd 启动的所有服务中收集日志输出,这些服务应该始终是所有服务,因为最终 systemd 甚至从较旧的方案(如 init 脚本)启动所有进程。

Rsyslog 还通过一些套接字接收日志消息,就像过去 50 年左右的 syslog 一样工作。应用程序必须将它们的消息发送到该套接字,而 rsyslog 将接收它们。不确定 journald 实际如何接收任何东西。然后 rsyslog 根据其配置将这些接收到的消息转发到不同的可读文件中。

在 Ubuntu 中,两者都安装了但似乎没有连接。至少 rsyslog 不会加载“imjournal”模块,它可以用来“读取”journald 中的日志消息。我不明白 rsyslog 如何(主动)读取任何东西,我认为它只是(被动)接收消息。但无论如何它都没有使用它。

文件 /var/log/syslog 包含的内容与 显示的大致相同journalctl,只是sudo文件中缺少的输出。但我还没有全部比较。

那么这是如何工作的呢?谁将日志消息发送到哪里,谁接收它们以及将它们转发到哪里?如果两个目的地都填满了,是否每个应用程序都必须分别向 syslog 和 journald 发送消息?如果它们是相互关联的,为什么没有消息重复?是不是又被过滤掉了?哪个位置更完整,如果我想要完整的图片应该在哪里看?

如果这在较新版本的 Ubuntu 中发生了任何变化,我也会对此感兴趣,因为明年我要将旧服务器切换到 20.04。

编辑:以下是有关该主题的更多资源:

所有这些信息让我有点困惑。似乎日志首先从系统调用接收所有系统日志数据(我的 /dev/log 指向 /run/systemd/journal/dev-log),并且 rsyslog 通过一个看起来像套接字的套接字从日志中获取它在有日志之前使用过的(可能是 /run/systemd/journal/syslog,如果它看到 systemd 就会隐式使用)。然后 rsyslog 可以执行其所有高级日志处理(包括编写旧的 /var/log 文件)。如果我不需要任何魔法,我可能只是禁用 rsyslog。但我完全不确定!

Win*_*nix 1

消息存储位置

日志消息存储

当需要清理旧消息时journald(我每月都会这样做),您可以看到存储消息的文件:

Deleted archived journal /var/log/journal/1ff17e6df1874fb3b2a75e669fa978f1/system@00059368465fc63c-5ca08f36fa6e6f04.journal~ (32.0M).
Deleted archived journal /var/log/journal/1ff17e6df1874fb3b2a75e669fa978f1/user-1000@0005936848a6d1ec-316ff74be646031e.journal~ (8.0M).
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,文件名非常长且神秘。

系统日志消息存储

syslog消息以更传统的文件名格式保存:

$ ll /var/log/syslog*
-rw-r----- 1 syslog adm   2161 Nov 29 04:47 /var/log/syslog
-rw-r----- 1 syslog adm 159700 Nov 29 04:32 /var/log/syslog.1
-rw-r----- 1 syslog adm  24466 Nov 28 04:27 /var/log/syslog.2.gz
-rw-r----- 1 syslog adm  23489 Nov 27 04:30 /var/log/syslog.3.gz
-rw-r----- 1 syslog adm  28087 Nov 26 04:28 /var/log/syslog.4.gz
-rw-r----- 1 syslog adm  28300 Nov 25 04:30 /var/log/syslog.5.gz
-rw-r----- 1 syslog adm  27445 Nov 24 05:36 /var/log/syslog.6.gz
-rw-r----- 1 syslog adm  27460 Nov 23 08:25 /var/log/syslog.7.gz
Run Code Online (Sandbox Code Playgroud)

以 结尾的文件名.gz已压缩数据以节省磁盘空间。


记录的消息不一样

快速测试表明这两个消息记录系统并不完全相同。我们将使用命令将一条消息放入系统中logger,然后搜索它并显示它前面的五行。

$ logger $0 "ygoe to two logs?"

$ cat /var/log/syslog | grep ygoe -a5 Nov 27 20:53:35 alien upowerd[2032]: message repeated 3 times: [ (upowerd:2032): UPower-Linux-WARNING **: treating change event as add on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.2/0003:046D:C52B.017E/0003:046D:101A.017F/power_supply/hidpp_battery_63] Nov 27 20:54:23 alien upowerd[2032]: (upowerd:2032): UPower-Linux-WARNING **: treating change event as add on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.2/0003:046D:C52B.017E/0003:046D:2010.0180/power_supply/hidpp_battery_64 Nov 27 20:59:25 alien wpa_supplicant[1591]: wlp60s0: WPA: Group rekeying completed with ae:20:2e:cc:94:50 [GTK=CCMP] Nov 27 21:00:02 alien CRON[24890]: (root) CMD (/usr/bin/updatedb) Nov 27 21:07:48 alien upowerd[2032]: (upowerd:2032): UPower-Linux-WARNING **: treating change event as add on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.2/0003:046D:C52B.017E/0003:046D:2010.0180/power_supply/hidpp_battery_64 Nov 27 21:08:22 alien rick: bash ygoe to two logs?

$ journalctl -xe | grep ygoe -a5 Nov 27 20:59:25 alien wpa_supplicant[1591]: wlp60s0: WPA: Group rekeying completed with ae:20:2e:cc:94:50 [GTK=CCMP] Nov 27 21:00:01 alien CRON[24881]: pam_unix(cron:session): session opened for user root by (uid=0) Nov 27 21:00:01 alien CRON[24890]: (root) CMD (/usr/bin/updatedb) Nov 27 21:00:04 alien CRON[24881]: pam_unix(cron:session): session closed for user root Nov 27 21:07:48 alien upowerd[2032]: (upowerd:2032): UPower-Linux-WARNING **: treating change event as add on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.2/0003:046D:C52B.017E/0003:046D:2010.0180/power_supply/hidpp_battery_64 Nov 27 21:08:22 alien rick[8000]: bash ygoe to two logs?

正如您所看到的,journalctl提供了比syslog. 此外journalctl

开发人员之间存在关于重复的争论journaldsyslog但是几年前,我现在找不到链接。

  • 就我个人而言,我比“syslig”更喜欢“journalctl”。我认为你尝试各种参数的时间越多,你就会越喜欢它。 (2认同)