大数跨境
0
0

《systemd 日志排错技巧:journalctl 实战指南》

《systemd 日志排错技巧:journalctl 实战指南》 笨熊呆呆瓜
2025-05-27
0
导读:👨‍💻 systemd 启动不了?服务突然挂掉?日志一片混乱?你可能只差一个命令:journalctl。

👨‍💻 systemd 启动不了?服务突然挂掉?日志一片混乱?
你可能只差一个命令:journalctl

本篇文章,将带你彻底掌握 journalctl的实用技巧,从零基础入门实战排错,帮你用好 systemd 的“显微镜”。



🔍 01. 为什么你必须掌握 journalctl?


journalctl是 systemd 的日志利器,它不同于传统的 tail -f /var/log/messages。它具备:

  • 日志结构化存储:支持时间、服务、级别多维度过滤;

  • 实时追踪服务状态:结合 systemctl快速定位问题根源;

  • 统一查看所有日志:替代 syslog、rsyslog 成为系统主力。



🧠 02. 基本用法:从入门到精通



贴士:加上 -xe参数可以高亮错误信息并显示上下文,极大提升排查效率。

 -x参数:扩展日志信息(--catalog)

  • 作用:为日志中的错误信息提供更详细的解释

  • 它会从 systemd 的日志目录中调用帮助信息,补充错误代码的背景说明

  • 类似于“翻译错误代码”的作用。

-e参数:跳转到日志结尾(end)

  • 作用:直接跳转到日志的最后一行

  • 等同于 tail,适合快速查看最新日志。



⚠️ 03. 实战排错场景:别再被黑盒服务气疯!


🧯服务启动失败?

systemctl start myapp.service# 报错?看日志!journalctl -u myapp.service -b -n 100 -xe

快速定位错误,比如权限问题、依赖未启动、配置错误,一目了然。

 -b参数:按“启动周期”查看日志

✅ 语法:
journalctl -b

✅ 功能:

表示查看当前这次开机(boot)以来的所有日志

🔁 常用变体:

 -n参数:控制“显示的行数”

✅ 语法:
journalctl -n 50

✅ 功能:

输出最新的 50 行日志(默认是 10 行)。

常见组合:

💥 服务莫名崩溃?

journalctl -u docker.service --since "10 minutes ago"

查查是不是系统 oom,磁盘爆满,还是某个核心 dump?你甚至可以用:

journalctl _PID=2345

直接看某个进程 ID 的日志轨迹。

在 journalctl中使用 _PID是一个非常实用的日志过滤字段,它的作用是:
👉 只查看某个进程 ID(PID)对应的日志内容

 _PID=是什么?

  • _PID是 systemd 日志中的一个内置字段(字段名带下划线)

  • 用于按进程 ID精确过滤日志,非常适合排查某个服务/进程的异常


✅ 使用方式:

journalctl _PID=1234

表示:查看进程号为 1234 的所有日志记录

🔍 应用场景举例:

1️⃣ 某服务挂掉了,想看它崩溃前的日志:

ps -ef | grep myapp# 找到 PID,比如是 4567journalctl _PID=4567 -n 50

2️⃣ nginx 主进程报错:

pidof nginx# 输出:1542journalctl _PID=1542 -xe

🧩 进阶用法:配合其他字段过滤

你可以把 _PID=和 -u或时间段结合使用:

journalctl _PID=4567 --since "2025-05-26 20:00"或者:journalctl _PID=4567 -n 100 -o short-iso

🛑 注意事项:

  • _PID只能查看 进程“运行期间”产生的日志

  • 如果进程已重启,新的 PID 会变,旧日志要用 -b或 --since限定时间查看;

  • systemd 日志必须未被清理,才能回溯较久之前的 PID 记录。


✅ 总结:



🔐 涉密系统崩溃了怎么办?


在安全加固后的麒麟系统、UOS 或特定国产服务器环境中,日志往往被裁剪或重定向。你可以结合:

journalctl -k

查看内核相关信息,配合 auditd或 SELinux 审计日志分析拒绝服务原因。

当然!在 journalctl中,-k是一个非常重要的参数,专门用于查看内核日志(kernel logs)

 journalctl -k是什么?

  • -k是 --dmesg的简写,表示:
    👉 只显示内核产生的日志,类似于 dmesg命令的效果,但功能更强。

  • 它可以查看例如:驱动加载、系统启动、设备识别、内核错误(如 OOM、挂载失败、硬件异常)等信息。


✅ 用法举例:

journalctl -k

表示:查看当前内核的所有日志信息,从系统启动开始。

journalctl -k -b -1

表示:查看上一次启动周期的内核日志,排查上次启动时是否有硬件或驱动异常。

journalctl -k -p err

表示:查看内核中优先级为错误(error)及以上的日志。

📌 常见内核日志内容包括:


  • 启动过程中的内核识别信息(如 CPU、内存、硬盘等);

  • 驱动加载与模块异常(如 i915rtl8821ce等);

  • 内核警告(kernel: WARNING:)、错误(kernel: ERROR:);

  • 系统崩溃、内核 panic、软中断问题;

  • 内核级别的安全审计事件;

  • 网络接口、文件系统挂载异常等。


🛠️ 实战示例:


查看所有内核相关的启动日志

journalctl -k -b

查看最近一次系统开机期间的硬件警告

journalctl -k -b -p warning

实时追踪内核日志(如插拔硬件)

journalctl -k -f


✅ 总结表:


🛡️ 04. 日志过大怎么办?用这些命令管理它

journalctl --disk-usage            # 查看日志占用空间journalctl --vacuum-size=500M      # 只保留 500MB 的日志journalctl --vacuum-time=2weeks    # 只保留最近两周的日志

不要再让 /var被日志挤爆导致系统起不来了。

🎯 05. 总结:journalctl,是排错第一现场

一图总结:

systemctl start xxx      ↓journalctl -u xxx -xe      ↓根据日志修复、重启、验证

掌握 journalctl,你就掌握了 Linux 服务管理的核心“望远镜”。

【声明】内容源于网络
0
0
笨熊呆呆瓜
知识互助 生活交流
内容 505
粉丝 0
笨熊呆呆瓜 知识互助 生活交流
总阅读6
粉丝0
内容505