如何使用systemd journalctl命令来管理日志

时间:2020-03-05 15:29:51  来源:igfitidea点击:

Systemd为Linux操作系统带来了巨大的新功能。
记录是其中之一。
在SystemD之前的旧日子里,检查日志和故障排除问题有时是非常令人不快的事情,因为不同程序的日志分散在不同的文件中,并且必须检查每个和每一个中的时间戳。
当然还有Syslog文件,但有时候不如需要那样冗长。
journald,可以集中管理日志。
可以通过名为journalctl的实用程序过滤和操作此日志。
在本文中,我们将通过公用事业的基本使用。

什么是journaldd.

JournalD是从许多来源收集和存储日志的服务,并制作易于解释的索引结构的日志文件。
journald使用的一些来源

  • 内核日志消息,通过KMSG
  • 简单的系统日志消息,通过Libc syslog调用
  • 通过本机期刊API结构化系统日志消息
  • 系统服务的标准输出和标准误差

想法是让所有日志消息集中,无论他们来自哪个应用程序。

设定时间

为了使日志有用,我们必须具有正确的系统时间。
日志可以通过UTC或者当地时间进行时间。
一般都保存了两个时间戳。
所以让我们首先设置时区

sudo timedatectl set-timezone Europe/Belgrade

此命令将时间设置为中欧欧洲时区,但如果我们在全球的任何其他位置,则只需输入大陆,然后按"标签"以查看我们可能选择的城市。
如果它不是你的城市,我并不重要,我也没有生活在贝尔格莱德,它只是最接近的大城市。
接下来让我们看看时区的状态

miki@ThinkPad-X220T:~$timedatectl status
Local time: Mon 2015-11-14 18:40:46 CET
Universal time: Mon 2015-11-14 17:40:46 UTC
RTC time: Mon 2015-11-14 17:40:46
Time zone: Europe/Belgrade (CET, +0100)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

1)查看日志

现在我们有正确的时间,让我们继续观看日志。
查看日志的基本命令是

journalctl

它将让输出类似:

-- Logs begin at Sun 2015-11-13 17:38:07 CET, end at Mon 2015-11-14 18:42:51 CET
Nov 13 17:38:07 ThinkPad-X220T systemd-journald[344]: Runtime journal (/run/log/
Nov 13 17:38:07 ThinkPad-X220T kernel: microcode: microcode updated early to rev

这是第一行,然后是许多线条。
我们看到日志从上次系统启动开始。
我上次昨天重新启动了电脑。
默认情况下,JournalD不会在重新启动中保存日志,因为这会使日志文件随时间变大。
日志似乎类似于syslog,但它有更多的来源。
我们说,UTC和本地时区时间戳都保存了,因此我们还可以查看带有UTC时间戳的相同日志。

journalctl --utc

是的,我知道日志是巨大的。
我们说日志又来了!但它们太大了,所以journald的过滤日志的简洁特征。

如果我们想从某个时间点查看日志,直到现在,则需要使用如下格式的命令:

miki@ThinkPad-X220T:~$journalctl --since "2015-11-14 19:15:00"
-- Logs begin at Sun 2015-11-13 17:38:07 CET, end at Mon 2015-11-14 20:07:51 CET
Nov 14 19:17:01 ThinkPad-X220T CRON[6044]: pam_unix(cron:session): session opene
Nov 14 19:17:01 ThinkPad-X220T CRON[6049]: (root) CMD ( cd/&& run-parts --re
Nov 14 19:17:01 ThinkPad-X220T CRON[6044]: pam_unix(cron:session): session close
Nov 14 19:22:51 ThinkPad-X220T nm-applet[4929]: ModemManager is not available fo
...

2)按时间过滤日志

这仍然太大了,所以如果我们在-since之后添加一个操作数,我们就可以让它们更小,这将是 - 停止

miki@ThinkPad-X220T:~$journalctl --since "2015-11-14 19:00:00" --until "2015-11-14 19:05:00"
-- Logs begin at Sun 2015-11-13 17:38:07 CET, end at Mon 2015-11-14 20:21:23 CET
Nov 14 19:01:16 ThinkPad-X220T nm-applet[4929]: ModemManager is not available fo
Nov 14 19:02:51 ThinkPad-X220T nm-applet[4929]: ModemManager is not available fo

在这五分钟中,只有两个日志按摩。

由于旗帜接受格式的时间戳,因此yyyy-mm-dd hh:mm:ss,但这不仅是途径。
例如,如果我们抱怨服务器在过去5分钟内不起作用,则可以检查这样的日志:

journalctl --since "5 minutes ago"
-- Logs begin at Sun 2015-11-13 17:38:07 CET, end at Mon 2015-11-14 20:22:21 CET
Nov 14 20:21:21 ThinkPad-X220T gnome-terminal-[7867]: Allocating size to GtkBox
Nov 14 20:21:21 ThinkPad-X220T gnome-terminal-[7867]: Allocating size to GtkBox
Nov 14 20:21:23 ThinkPad-X220T gnome-terminal-[7867]: Allocating size to GtkBox
Nov 14 20:22:20 ThinkPad-X220T apport-gtk[5977]: gdk_pixbuf_composite: assertion
Nov 14 20:22:21 ThinkPad-X220T systemd[3634]: Started Notification regarding a c

它还可以了解昨天或者今天的单词,因此我们可以在昨天或者今天以来寻找日志。

3)设置跨重启的记录

如果我们在重新启动中持久,这一切都更有用。
如果我们希望在boot子后留下日志,则需要手动启用此功能。
首先创建要记录的目录

sudo mkdir -p /var/log/journal

然后编辑配置文件以持久地记录。

sudo sed -i.orig 's/#Storage=auto/Storage=persistent/g' /etc/systemd/journald.conf

在此之后,我们可以重新启动计算机并检查boot子是否跨越重启,并使用以下命令进行重新启动:

miki@ThinkPad-X220T:~$journalctl --list-boots
-1 7917f2c3498d4de89e94701ca8049245 Mon 2015-11-14 20:47:49 CET—Mon 2015-11-14 2
0 438c0a9258aa47fcbf88daf91106aaa3 Mon 2015-11-14 20:56:55 CET—Mon 2015-11-14 2

我重新启动了计算机两次,并记录了两个boot子。
我以为之前的启动也会得到得救,但它没有。
因此,只记录设置持久日志后完成的重新启动。

4)从不同的boot子管理日志

如果我们现在想要从此引导中查看日志,则使用命令

journalctl -b

我们可以使用引导号码来选择特定启动

journalctl -b -1

或者我们可以使用引导ID

journalctl -b 7917f2c3498d4de89e94701ca8049245

基于时间的过滤也将有效

journalctl -b 0 --since "15 minutes ago"

5)通过服务和ID过滤

假设我们希望仅通过一个程序查看日志。
我会看起来的日志

journalctl -u fprintd.service
-- Logs begin at Mon 2015-11-14 20:47:49 CET, end at Mon 2015-11-14 21:28:03 CET
Nov 14 20:48:32 ThinkPad-X220T systemd[1]: Starting Fingerprint Authentication D
Nov 14 20:48:32 ThinkPad-X220T systemd[1]: Started Fingerprint Authentication Da
Nov 14 20:48:32 ThinkPad-X220T fprintd[3413]: user 'miki' claiming the device: 0
Nov 14 20:48:32 ThinkPad-X220T fprintd[3413]: now monitoring fd 15
Nov 14 20:48:32 ThinkPad-X220T fprintd[3413]: device 0 claim status 0
Nov 14 20:48:33 ThinkPad-X220T fprintd[3413]: no longer monitoring fd 15
Nov 14 20:48:33 ThinkPad-X220T fprintd[3413]: released device 0
-- Reboot -

我们还可以通过UID过滤日志。
首先,你需要得到你的用户

miki@ThinkPad-X220T:~$id -u miki
1000

接下来,我们可以使用该UID过滤日志

journalctl _UID=1000 --since "25 minutes ago"

我们也可以通过GID过滤

miki@ThinkPad-X220T:~$journalctl -F _GID
30
102
130
1000
114
118
104
126
109
0

现在可以通过任何GID过滤

journalctl _GID=114

通过路径过滤到可执行文件的日志:

journalctl /usr/bin/sudo

在实时看日志

journalctl -f

如果我们希望在计划文本中显示日志以轻松复制和粘贴,则可以使用"无寻呼机"选项

journalctl --no-pager

6)显示内核消息和删除旧日志

journalctl也可以显示内核消息。
默认情况下,它将从当前启动显示

journalctl -k

如果要从上一个启动中留言,请使用-b -1标志。

journalctl -k -b -1

要检查日志使用多少磁盘空间,可以使用此命令

journalctl --disk-usage
Archived and active journals take up 24.0M on disk.

如果日志大小,则可以使用真空清洁器来擦拭最旧的。
嗯,不是真空吸尘器,但命令称为真空。

sudo journalctl --vacuum-size=16M

这将将日志大小缩小为16MB。