journalctl是systemd系统中查看日志的核心工具,支持按服务、时间、优先级等多维度过滤,结合-f、-u、--since、-p等参数可高效定位问题,通过创建/var/log/journal实现日志持久化,并可用-o指定输出格式,适用于从基础排查到高级诊断的各类场景。

journalctl
/var/log
要查看Linux中的日志,尤其是通过
journalctl
首先,最基础的命令就是直接输入
journalctl
less
Page Up
Page Down
q
如果你想实时跟踪日志,就像传统的
tail -f
-f
journalctl -f
有时候,我们只关心当前启动会话的日志,或者前一个启动会话的日志。
journalctl -b
journalctl -b -1
-2
针对特定服务或单元的日志,
journalctl -u <unit_name>
journalctl -u sshd.service
.service
journalctl
如果你想查看特定时间段的日志,
--since
--until
journalctl --since "2023-10-26 10:00:00" --until "2023-10-26 11:00:00"
journalctl --since "yesterday"
journalctl --since "1 hour ago"
当然,日志的优先级也很重要。
journalctl -p <priority>
journalctl -p err
err
crit
alert
emerg
在日志海洋中找到你真正需要的信息,这本身就是一门艺术。仅仅是查看全部日志显然不够,我们需要更精细的过滤手段。除了之前提到的按服务(
-u
--since
--until
-p
journalctl
你可以通过特定的字段来过滤,这些字段通常以一个下划线开头,比如
_PID
_EXE
_COMM
_UID
举个例子,如果你知道某个进程的PID是1234,想看它产生的所有日志:
journalctl _PID=1234
或者,你怀疑某个特定的可执行文件有问题,想看它所有的输出:
journalctl _EXE=/usr/bin/nginx
这些字段过滤可以叠加使用,形成非常强大的组合查询。比如,查看过去一个小时内,由
sshd
err
journalctl -u sshd --since "1 hour ago" -p err
有时候,日志中会有一些特定的关键词,你可能想用
grep
journalctl
less
/
grep
journalctl -u apache2.service | grep "Permission denied"
grep
journalctl
grep
我个人在使用时,会先用
-u
--since
_PID
_EXE
journalctl
-o
journalctl -o short
journalctl -o verbose
journald
journalctl -o json
journalctl -o json-pretty
journalctl -o cat
cat
选择合适的输出格式,能大大提高你处理日志的效率。比如,我写脚本分析日志时,几乎都会用
json
再来说说日志的持久化配置。默认情况下,
journald
/run/log/journal
要让
journald
/var/log/journal
sudo mkdir -p /var/log/journal
journald
你还可以通过编辑
/etc/systemd/journald.conf
journald
Storage=
volatile
persistent
auto
/var/log/journal
none
SystemMaxUse=
RuntimeMaxUse=
MaxLevelStore=
在我看来,为生产系统配置持久化日志是运维的基本要求。但同时,也要注意
SystemMaxUse
当系统出现问题,尤其是一些棘手的、间歇性的故障时,
journalctl
一个非常实用的技巧是结合启动会话(
-b
-p
journalctl -b 0 -p err
journalctl -b -1 -p err
另一个高级用法是利用
journalctl
journalctl _COMM=你的应用名
journalctl _EXE=/path/to/your/app
journalctl _COMM=nginx
nginx
在排查服务启动失败的问题时,我发现直接查看该服务的日志往往不够。有时候,一个服务的失败是由于其依赖的其他服务没有正常启动,或者系统资源不足。这时,我会先用
systemctl status <failing_service>
journalctl -u <failing_service> --since "boot"
journalctl -k -p err --since "boot"
-k
此外,对于那些在特定时间点出现问题的系统,我喜欢利用
journalctl
--since "YYYY-MM-DD 02:50:00" --until "YYYY-MM-DD 03:10:00"
grep
最后,一个相对不那么常用但很有用的场景是,当你的系统时间被篡改或同步出现问题时,
journalctl
journald
journalctl
以上就是如何在Linux中查看日志 Linux journalctl查询技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号