journalctl

Linux提供了一个强大的日志系统,它可以跟踪和记录系统的各种活动。在这个系统中,journalctl是一个非常重要的工具,用于查询和操作由systemd进程管理的日志。

本文将深入探讨journalctl命令,介绍其基本使用、高级选项及示例等内容。

1. journalctl简介

Systemd是Linux发行版的初始化系统,负责启动系统后的所有服务,并监视它们在系统运行期间的状态。Journal是Systemd的一部分,主要负责收集和存储日志数据。

journalctl是Journal的主要接口,提供丰富的功能来检索和显示日志条目。它能从磁盘上的二进制文件或者其他传输目标(如syslog)获取日志。

引用自Man page of journalctl

journalctl may be used to query the contents of the systemd(1) journal as written by systemd-journald.service(8).

“journalctl可以用来查询由systemd-journald.service(8)写入的systemd(1)日志的内容。”

2. journalctl基础使用

下面是一些基本的journalctl命令。

3. 过滤日志条目

journalctl提供了多种方式来过滤和查找特定的日志条目。

以下是一些过滤日志的例子:

根据服务名称过滤:

根据进程ID过滤:

根据优先级过滤(0-7,0表示最重要):

4. 时间戳和日志轮转

对于大型系统,日志文件可能会非常大。为了解决这个问题,journalctl提供了日志轮转和时间戳功能。

日志轮转是一个过程,其中旧的日志条目被删除以释放空间给新的日志条目。默认情况下,Journal将根据配置在/var/log/journal中保存日志文件,并在磁盘空间不足时执行日志轮转。

时间戳允许你查找特定时间范围内的日志条目。例如:

5. 高级应用

尽管journalctl提供了丰富的功能,但在某些情况下,你可能需要更高级的工具或技术。例如,你可能需要将日志发送到远程服务器,或者在多个系统上集中处理日志。

对于这些需求,你可以考虑使用像Logstash、Graylog或Fluentd这样的日志聚合工具,它们可以与journalctl结合使用,提供更强大的功能。

6. 帮助文档

英文

中文

7. 补充

清空所有日志

清除所有的系统日志,可使用 journalctl--vacuum-time--vacuum-size 选项。

  1. 清除所有日志:

    在这里插入图片描述

    这将会删除所有时间戳早于现在的日志条目,基本上等同于清空所有日志。

    journalctl --vacuum-time 命令通常接受一个相对时间值,如 “1year”, “2months”, “3weeks”, “4days”, “1s” 等。这个命令会删除所有在指定时间长度之前的日志。

  2. 清除超过特定大小的日志:

    这将删除所有日志,直到系统日志的总大小降到1(单位为BYTE)。

    在这里插入图片描述

    可以使用journalctl --disk-usage查看日志占用空间大小。

    在这里插入图片描述

  3. 如果以上两个都没有效果,可以采用暴力方式直接删除日志文件。

    暴力删除有风险,使用需谨慎。

过滤掉某个服务日志

比如systemd服务日志太多太烦杂,可以过滤掉它:

过滤前:

在这里插入图片描述

过滤后:

在这里插入图片描述

注意事项

journal日志不会将程序输出的空行显示,日志会被压缩得满满当当。

 

journal日志不会自动持久化,重启系统后,历史日志将被清除。可参考journal日志持久化配置。

参考文章:systemd journalctl日志持久化配置(systemd日志)

总结

journalctl是一个强大而灵活的工具,可以帮助你管理和查询Linux系统的日志。通过学习和理解journalctl的各种功能和选项,你将能够更有效地管理你的系统,并在出现问题时快速找到原因。

参考资料

  1. Man page of journalctl
  2. Mastering systemd: Using journalctl for Troubleshooting
  3. An introduction to systemd’s journalctl utility
  4. journalctl 日志问题

快速参考

查看最后一页日志:journalctl -e

查看日志占用存储空间大小:journalctl --disk-usage