Linux journalctl 的基本使用

文章目录

什么是 journalctl

journalctl 是一个命令行工具,它可以用来查看和管理 systemd 日志。systemd 是 Linux 系统的一个初始化系统,它负责启动和管理各种服务和进程。systemd 会记录系统和应用程序的各种事件,比如启动、停止、故障、警告等,这些事件被称为日志。日志可以帮助我们了解系统的运行状况,排查问题,优化性能等。

journalctl 可以让我们方便地查看、过滤、导出、清理日志,而不需要直接操作日志文件。journalctl 的日志存储在二进制格式的文件中,通常位于 /var/log/journal 目录下。journalctl 会自动旋转日志文件,也就是说,当日志文件达到一定大小或时间限制时,会自动关闭当前文件,创建一个新文件,继续写入日志。这样可以避免日志文件过大,占用过多的磁盘空间。

如何使用 journalctl

要使用 journalctl,我们需要在终端中输入 journalctl 命令,后面可以跟一些选项和参数,来指定我们想要查看的日志内容。journalctl 的基本语法是:

journalctl [options] [match...]

其中,options 是一些选项,用来控制 journalctl 的行为,比如显示格式,时间范围,优先级等。match 是一些匹配条件,用来过滤日志,比如服务名,进程号,用户等。如果不指定任何选项和参数,journalctl 会显示所有的日志,按照时间顺序,从旧到新。

下面是一些常用的 journalctl 选项和参数的示例:

  • -f--follow:实时显示最新的日志,类似于 tail -f 命令。
  • -n--lines:指定显示的日志行数,后面可以跟一个数字,比如 -n 10 表示显示最新的 10 行日志。如果不指定数字,默认显示 10 行。
  • -r--reverse:反转显示顺序,从新到旧。
  • -o--output:指定显示格式,后面可以跟一个格式名,比如 -o json 表示以 JSON 格式显示日志。可用的格式有:short, short-iso, short-precise, short-monotonic, verbose, export, json, json-pretty, json-sse, cat。
  • -b--boot:只显示某次启动的日志,后面可以跟一个启动 ID,比如 -b 0 表示显示当前启动的日志,-b -1 表示显示上一次启动的日志。如果不指定 ID,表示显示所有启动的日志。
  • -k--dmesg:只显示内核日志,类似于 dmesg 命令。
  • -u--unit:只显示某个服务的日志,后面可以跟一个服务名,比如 -u nginx.service 表示显示 nginx 服务的日志。
  • -p--priority:只显示某个优先级或以上的日志,后面可以跟一个优先级名,比如 -p err 表示显示错误级别的日志。可用的优先级有:emerg, alert, crit, err, warning, notice, info, debug。
  • --since--until:指定显示的时间范围,后面可以跟一个日期和时间,比如 --since "2024-02-25 00:00:00" 表示显示从 2024 年 2 月 25 日 0 点开始的日志,--until "2024-02-26 00:00:00" 表示显示到 2024 年 2 月 26 日 0 点结束的日志。也可以使用相对时间,比如 --since "1 hour ago" 表示显示一小时之内的日志。
  • --disk-usage:显示日志占用的磁盘空间。
  • --vacuum-size--vacuum-time:清理日志文件,释放磁盘空间,后面可以跟一个大小或时间限制,比如 --vacuum-size=1G 表示删除多余的日志文件,直到日志总大小小于 1 GB,--vacuum-time=1month 表示删除一月之前的日志文件。

关于 journald.conf 的配置详情请参阅:systemd-journald 配置详解:journald.conf 全面介绍

journalctl 的使用示例

下面我们来看一些 journalctl 的使用示例,你可以在你的 Linux 系统中尝试运行这些命令,看看输出的结果。

  • 查看所有的日志:
journalctl
  • 查看最新的 20 行日志:
journalctl -n 20
  • 实时显示最新的日志:
journalctl -f
  • 查看 nginx 服务的日志:
journalctl -u nginx.service
  • 查看错误级别的日志:
journalctl -p err
  • 查看今天的日志:
journalctl --since today
  • 查看昨天的日志:
journalctl --since yesterday --until today
  • 查看 2024 年 2 月 25 日的日志:
journalctl --since "2024-02-25 00:00:00" --until "2024-02-26 00:00:00"
  • 查看一小时之内的日志,并按照服务名分组:
journalctl --since "1 hour ago" --catalog
  • 查看包含 “failed” 关键字的日志:
journalctl -g "failed"
  • 查看日志占用的磁盘空间:
journalctl --disk-usage
  • 清理日志文件,保留最近一周的日志:
journalctl --vacuum-time=1week
  • 清理日志文件,保留 1G 大小的日志:
journalctl --vacuum-size=1G
  • 查看 UID 为 0 的用户(root)的日志:
journalctl _UID=0
  • 查看 PID 为 1234 的进程的日志:
journalctl _PID=1234
  • 以 JSON 格式显示最新的 10 行日志:
journalctl -n 10 -o json
  • 导出所有日志到一个文件:
journalctl > journal.log
  • 查看当前启动的日志,并高亮显示:
journalctl -b --no-pager
  • 查看内核日志
journalctl -k

总结

journalctl 是一个非常有用的工具,它可以让我们方便地查看和管理 systemd 日志。通过 journalctl,我们可以根据不同的选项和参数,过滤出我们想要的日志内容,以便于分析和调试。journalctl 还可以帮助我们清理日志文件,节省磁盘空间。如果你想了解更多关于 journalctl 的信息,你可以查看它的手册页,输入 man journalctl 命令即可。


也可以看看