
journalctl是systemd日志系统的查询工具,用于查看和管理由systemd-journald服务收集的系统日志。与传统syslog不同,systemd日志以二进制格式存储,支持结构化查询、按时间范围过滤、按服务单元过滤等强大功能。
journalctl是Linux系统管理员排查问题、监控服务状态、审计系统行为的核心工具。它能够集中管理所有系统日志(包括内核日志、服务日志、用户日志),并提供灵活的过滤和输出格式选项。掌握journalctl是进行现代Linux系统故障排查的必备技能。
1. 基本用法
| 命令 | 说明 |
|---|
journalctl | |
journalctl -r | |
journalctl -f | |
journalctl -n 50 | |
journalctl -e | |
journalctl -x | |
journalctl --no-pager | |
2. 按服务单元过滤
| 命令 | 说明 |
|---|
journalctl -u nginx | |
journalctl -u nginx -u php-fpm | |
journalctl -u nginx --since today | |
journalctl -u nginx -f | |
journalctl -u nginx -n 100 | |
journalctl -u nginx --no-pager | |
journalctl -u nginx --output=short-iso | |
3. 时间过滤
| 命令 | 说明 |
|---|
journalctl --since "2026-04-01" | |
journalctl --since "1 hour ago" | |
journalctl --since "yesterday" | |
journalctl --since "2026-04-01 10:00" --until "2026-04-01 12:00" | |
journalctl --since today --until now | |
journalctl --since "30 min ago" -p err | |
journalctl --since "2026-04-01" --until "2026-04-02" | |
时间表达式支持:
- 相对时间:
-1h、-2d、-30min、-1week - 特殊时间:
today、yesterday、tomorrow
4. 按启动轮次过滤
| 命令 | 说明 |
|---|
journalctl -b | |
journalctl -b -1 | |
journalctl --list-boots | |
journalctl -b 2a3b4c... | |
journalctl -b -1 -p warning | |
journalctl -b --since "10 min ago" | |
5. 按进程/来源过滤
| 命令 | 说明 |
|---|
journalctl _COMM=sshd | |
journalctl _EXE=/usr/sbin/sshd | |
journalctl _PID=1234 | |
journalctl SYSLOG_IDENTIFIER=nginx | |
journalctl _UID=1000 | |
journalctl _GID=1000 | |
journalctl _SYSTEMD_UNIT=nginx.service | |
journalctl _TRANSPORT=kernel | 按传输类型过滤(kernel/syslog/stdout) |
6. 优先级过滤
| 命令 | 说明 |
|---|
journalctl -p err | |
journalctl -p warning | |
journalctl -p info | |
journalctl -p debug | |
journalctl -p 3 | |
journalctl -k -p err -b -1 | |
优先级级别对照:
| 级别 | 数字 | 关键字 | 说明 |
|---|
emerg | | | |
alert | | | |
crit | | | |
err | | -p err | |
warning | | -p warning | |
notice | | | |
info | | -p info | |
debug | | -p debug | |
7. 输出格式
| 命令 | 说明 |
|---|
journalctl -o short-iso | |
journalctl -o short-precise | |
journalctl -o short-full | |
journalctl -o verbose | |
journalctl -o json | |
journalctl -o json-pretty | |
journalctl -o cat | |
journalctl -o short-unix | |
journalctl -o export | |
8. 用户日志
| 命令 | 说明 |
|---|
journalctl --user | |
journalctl --user -u pipewire | |
journalctl --user -b | |
journalctl --user -f | |
journalctl --user --since "1 hour ago" | |
9. 搜索与模式匹配
| 命令 | 说明 |
|---|
journalctl -g "failed" | |
journalctl -u nginx -g "timeout" | |
journalctl -u ssh --since "1 day ago" -g "invalid user" | |
journalctl -u nginx -n 200 | grep -i upstream | |
10. 导出与集成
| 命令 | 说明 |
|---|
journalctl -u nginx -o json-pretty > nginx.json | |
journalctl --since "today" --no-pager > today.log | |
journalctl -u mysql -n 300 -o cat | |
journalctl -u nginx --since "1 hour ago" | less | |
journalctl -o cat | head -100 | |
journalctl --output=json | jq '.MESSAGE' | |
11. 磁盘使用与清理
| 命令 | 说明 |
|---|
journalctl --disk-usage | |
journalctl --vacuum-size=1G | |
journalctl --vacuum-time=7d | |
journalctl --vacuum-files=10 | |
journalctl --rotate | |
journalctl --verify | |
12. 实用组合模式
| 命令 | 说明 |
|---|
journalctl -f -u nginx -u php-fpm | |
journalctl -b -1 -p err -o short-iso | |
journalctl -u nginx --since="1 hour ago" --until="now" | |
journalctl -k -p warning -b | |
journalctl --list-boots | tail -5 | |
journalctl -u ssh --since yesterday -g "Accepted" | |
journalctl -u cron --no-pager | tail -20 | |
journalctl --user -f -o cat | |
13. 常用选项速查
| 选项 | 说明 |
|---|
-u | |
-b | |
-f | |
-n | |
-r | |
-e | |
-p | |
-x | |
-k | |
-o | |
-g | |
--since | |
--until | |
--user | |
--no-pager | |
--list-boots | |
--disk-usage | |
--vacuum-size | |
--vacuum-time | |
14. 故障排查
| 问题 | 解决方法 |
|---|
| journalctl: command not found | 系统未使用systemd;检查ps -p 1确认init系统 |
| 没有日志输出 | 检查journald服务:systemctl status systemd-journald |
| 日志文件过大 | 使用--vacuum-size清理;调整/etc/systemd/journald.conf配置 |
| 时间范围查询无效 | |
| 服务日志为空 | 确认服务是否运行;检查服务是否输出到stdout/stderr |
| 需要root权限的日志 | |
| 日志显示不完整 | 检查journal是否被截断:journalctl --verify |
| 持久化日志未保存 | 检查/etc/systemd/journald.conf中Storage=设置 |
温馨提示: journalctl是systemd系统中日志管理的核心工具。建议掌握以下技巧:1)排查问题时优先使用-f实时跟踪和-p err过滤错误;2)结合-u和-b快速定位特定服务的启动问题;3)使用--since "5 min ago"快速查看近期日志;4)定期使用--disk-usage和--vacuum-size管理日志空间;5)脚本处理日志时使用-o cat获取纯净消息;6)复杂分析时使用-o json配合jq进行结构化处理。在调试服务时,journalctl -u service -f是最常用的命令组合。对于需要长期保留的日志,建议配置日志轮转和远程日志收集。
关注公众号(haopython),请回复: LTJOUR