journalctl是systemd日志工具,支持按时间(如--since)、服务(-u)、级别(-p)、进程或字段过滤,可高效定位系统问题。

在Linux系统中,journalctl 是 systemd 提供的强大日志查看工具,用于访问和管理由 journald 收集的系统日志。相比传统的 syslog 工具,journalctl 能直接读取二进制格式的日志数据,支持更灵活的筛选方式。掌握其过滤技巧,能快速定位问题。
按时间范围筛选日志
排查故障时,通常只关注特定时间段内的日志。journalctl 支持多种时间表达式:
- journalctl --since "10 minutes ago" — 查看最近10分钟的日志
- journalctl --since "2024-04-05 10:00:00" --until "2024-04-05 11:00:00" — 精确到时间段
- journalctl -S yesterday — 查看昨天的日志
- journalctl --since today — 查看今天的所有日志
按服务单元(Unit)查看日志
对于运行中的 systemd 服务,可直接查看其日志输出,无需查找日志文件路径:
- journalctl -u nginx.service — 查看 Nginx 服务日志
- journalctl -u sshd --since "2 hours ago" — 结合时间查看 SSH 服务近期行为
- journalctl -u mysql.service -f — 实时跟踪 MySQL 服务日志(类似 tail -f)
按日志级别过滤消息
systemd 日志遵循标准优先级,从 0(emerg)到 7(debug)。可通过级别缩小范围:
- journalctl -p err — 只显示错误及以上级别(err, crit, alert, emerg)
- journalctl -p warning — 显示警告及以上
- journalctl -p info — 显示信息级及以上(常见于调试)
- 常用级别别名:emerg, alert, crit, err, warning, notice, info, debug
按进程、路径或字段精确匹配
journalctl 支持基于日志字段的精细查询,适合复杂场景:
- journalctl _PID=1234 — 查看指定进程ID的日志
- journalctl SYSLOG_IDENTIFIER=crontab — 按日志标识符过滤
- journalctl /usr/bin/bash — 查看由该可执行文件产生的日志
- journalctl MESSAGE="permission denied" — 搜索包含特定文本的消息
基本上就这些。熟练使用 journalctl 的筛选功能,能大幅提升排查效率。关键是根据问题选择合适维度:时间、服务、级别或具体字段。不复杂但容易忽略。









