应组合使用优先级、来源和时间范围:用journalctl -k -p err --since=boot提取本次启动的内核错误日志,再用journalctl -p err -u service --since=boot指定关键服务,不可单靠-p err泛查。

不能直接用 journalctl -p err 仅提取“当前系统内核与服务”的错误日志,因为 -p err 本身只按优先级过滤(即 level 3,error),不区分来源;而“内核”和“服务”需额外限定单位(unit)或子系统。正确做法是组合使用优先级、来源和时间范围。
明确目标:什么是“当前系统内核与服务”的错误日志
“当前系统”通常指本机正在运行的内核(kernel)和服务(systemd units),不包括历史启动、容器或远程日志。“错误级别”对应 err(priority 3),但注意:
– 内核日志(如 dmesg 类型)由 kernel unit 发出,无传统 service 名称;
– 服务日志需指定具体 unit(如 sshd.service)或泛指所有 active 的服务;
– 默认 journal 包含所有 boot,需加 --since=boot 或 --since="1 hour ago" 限定“当前”。
提取内核错误日志(priority=err)
内核消息统一由 kernel 源发出,不归属某个 .service 单元:
- 查看本次启动以来的所有内核 error 级别日志:
journalctl -k -p err --since=boot - 若要更严格(排除 warning 及以下,且只取 error 和 critical):
journalctl -k -p 3..4 --since=boot(3=err,4=crit) -
-k是--dmesg的简写,等价于-u kernel,但更可靠
提取活跃服务的错误日志
systemd 服务日志需按 unit 过滤。无法用单条命令“自动枚举所有当前服务并查 error”,但有实用策略:
- 查所有 已加载且处于 active 状态 的服务中产生的 error 日志:
systemctl list-units --type=service --state=active --no-legend | cut -d' ' -f1 | xargs -I{} journalctl -u {} -p err --since=boot --no-pager 2>/dev/null | grep -E "^(--|.*ERR|.*error|level=err)" - 更简洁稳妥的做法:聚焦关键服务(如 sshd、nginx、dbus、systemd-journald):
journalctl -p err -u sshd.service -u nginx.service -u dbus.service --since=boot - 若只想看最近 5 分钟内各服务的 error:
journalctl -p err --since="5 minutes ago" | grep -E "(Started|Failed|error|ERR|level=err)"(配合关键词辅助识别)
合并内核 + 关键服务的错误日志(推荐日常使用)
一条命令兼顾可读性与实用性:
journalctl -p err -k --since=boot && journalctl -p err -u systemd-journald.service -u sshd.service -u rsyslog.service --since=boot --no-pager
-
-k提取内核 error -
-u xxx显式指定高价值服务(按需增删) -
--since=boot确保只查本次启动后的日志 -
--no-pager避免进入 less,便于管道处理或保存











