什么是 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
命令即可。