当前位置: 首页 > 科技观察

如何使用journalctl查看分析systemd日志(附实例)

时间:2023-03-16 18:24:39 科技观察

介绍很多人说systemd不好,对系统影响很大,也是一个有争议的话题。但您不能否认它提供了一套全面的工具来管理和排除系统故障。想象一下,当您遇到没有GUI的损坏系统时,引导和GRUB可能会造成混乱。在这种情况下,您可以从Live系统启动,挂载Linux分区,然后浏览systemd的日志以找出问题所在。systemd具有三个基本组件,如下所示:systemd:Linux操作系统的系统和服务管理器。systemctl:该命令用于查看和控制systemd系统和服务管理器的状态。systemd-analyze:此命令在系统启动时提供性能统计信息,并从系统和服务管理器中检索其他状态和跟踪信息。除了这三个服务之外,systemd还提供了其他服务,例如journald、logind、networkd等。在本指南中,我们将讨论systemd的journald服务。journald-systemd日志服务根据设计,systemd提供了一种集中方式来处理来自进程、应用程序等的所有操作系统日志。所有这些日志事件都由systemdjournald守护进程处理。journald守护进程从Linux操作系统周围收集所有日志,并将它们作为二进制数据存储在文件中。以二进制数据集中记录事件和系统问题的好处有很多。例如,由于系统日志是以二进制而非文本形式存储的,您可以将其翻译成文本、JSON对象等,以满足各种需求。此外,由于日志是按顺序存储的,因此通过操纵日志的日期/时间来跟踪单个事件非常容易。请记住,journald收集的日志文件有数千行长,并且会随着每次启动、每个事件不断更新。因此,如果您有一个长时间运行的Linux操作系统,日志的大小应该以GB为单位。有成千上万的日志,最好使用基本命令进行过滤以了解有关系统问题的更多信息。journald配置文件journald的配置文件存在于以下路径中。它包含有关如何进行日志记录的各种标志。您可以查看此文件并进行必要的更改。但是我建议不要修改这个文件,除非你知道你在做什么。/etc/systemd/journald.confjournald二进制日志文件的存储位置journald以二进制格式存储日志。它们被保存在这个路径下的一个目录中:/var/log/journal例如,在下面的路径中,有一个目录包含了到目前为止所有的系统日志。journalctl日志文件路径不要使用cat命令,也不要使用nano或vi打开这些文件。它们(是二进制的)并且不能正确显示。使用journalctl查看和分析systemd日志journald基本命令查看journald日志的基本命令是:journalctljournalctl该命令提供所有应用程序和进程的日志条目,包括错误、警告等。它显示最旧的日志列表顶部和底部的当前日志。您需要按住Enter键逐行滚动。您也可以使用PAGEUP和PAGEDOWN键进行滚动。按q键退出此视图。如何按不同时区的时间查看日记条目默认情况下,journalctl以当前系统时区显示日记中的时间。但是,您可以轻松地在命令中提供时区以将相同的日志转换为不同的时区。例如,要查看UTC格式的日志,使用如下命令:journalctl--utcjournalctl--utc如何在日志中只查看错误、警告等系统产生的日志有不同的优先级。有些日志可能是可以忽略的警告,有些可能是重要的错误。您可能只想看到错误,而不是警告。这也可以通过以下命令来实现。查看紧急系统信息使用:journalctl-p0journalctl-p0errorcodes:0:Emergency1:Alert2:Critical3:Error4:Warning5:Notice6:Info7:Debugwhenyouspecifyanerrorcode,which显示该级别及更高级别的所有信息。例如你指定如下命令,它会显示所有优先级为2、1、0的信息:journalctl-p2如何查看特定启动的日志当你运行journalctl命令时,它会显示当前的启动,即是,来自您的跑步训练的信息。但您也可以查看过去的启动信息。日志会在每次重新启动时持续更新。journald将记录各种初创公司的日志。要查看来自不同启动的日志,请使用以下命令。journalctl--list-bootsjournalctllist-boots第一个数字显示journald的唯一引导跟踪号,您可以在下一个命令中使用它来分析该特定引导。第二个数字是启动ID,您也可以在命令中指定它。接下来的两个日期、时间组合是日志存储在相应文件中的时间。如果您想查找特定日期、时间的日志或错误,这将非常方便。要查看特定的激活号码,您可以选择第一个激活跟踪号码或激活ID,如下所示。journalctl-b-45journalctl-b8bab42c7e82440f886a3f041a7c95b98journalctl-b45您还可以使用-x选项为显示屏上的systemd错误消息添加解释。在某些情况下,这是救命稻草。journalctl-xb-p3journalctl-xb如何查看特定时间日期的日志记录Journalctl功能强大,可以在时间日期操作的命令中提供类英文参数。您可以将--since选项与昨天、今天、明天或现在结合使用。以下是不同命令的一些示例。您可以根据需要修改它们。它们是不言自明的。以下命令中日期时间格式为"YYYY-MM-DDHH:MM:SS"journalctl--since"2020-12-0406:00:00"journalctl--since"2020-12-03"--until"2020-12-0503:00:00"journalctl--sinceyesterdayjournalctl--since09:00--until"1hourago"journalctl--since09:00--until你也可以设置以上与错误级别开关相结合。如何查看特定于内核的日志记录还可以从日志中提取Linux内核信息。查看当前启动时的内核信息,使用如下命令:journalctl-k如何查看某个服务的日志,PID可以从journald日志中过滤出某个systemd服务单元的具体日志。例如,如果要查看NetworkManager服务的日志,请使用以下命令。journalctl-uNetworkManager.servicejournalctlNetworkManagerservice如果不知道服务名,可以使用以下命令列出系统中的systemd服务。systemctllist-units--type=service如何查看用户和组日志如果你是分析服务器日志,这个命令在多用户登录的情况下很有帮助。你可以先用下面的命令从中找出用户ID用户名。例如,查找用户debugpoint的ID:id-udebugpoint然后使用_UID选项指定该ID来查看该用户生成的日志。journalctl_UID=1000--sincetodayjournalctl_UID同样,_GID选项也可以用来查看用户组。如何查看可执行文件的日志您还可以查看特定程序或可执行文件的日志。例如,如果要查找有关gnome-shell的信息,可以运行以下命令。journalctl/usr/bin/gnome-shell--sincetodayjournalctlgnome-shell结论希望本指南可以帮助您使用journalctl查看、分析Linux桌面或服务器上的systemd日志并对其进行故障排除。如果您知道如何使用这些命令,那么systemd日志管理功能非常强大,可以让您在调试时轻松一些。所有主要的Linux发行版现在都使用systemd。Ubuntu、Debian、Fedora、Arch都使用systemd作为它们的默认操作系统组件。如果您想了解不使用systemd的Linux发行版,您可能需要查看MX-Linux、Gentoo、Slackware、VoidLinux。