journalctl 日志排查:按服务、启动记录和时间定位故障

服务刚刚重启过,错误却发生在上一次系统启动中;搜索 error 没结果,也不代表程序没有失败。Ubuntu 24.04 的 journalctl 可以按服务、启动记录和时间筛选 systemd 日志。下面从一个已知故障时间出发,建立可重复的排查过程,不涉及直接删除或清空日志。

先确定系统、服务和时间口径

记录服务器名称、应用服务名、故障发生的时间与时区。客服反馈的北京时间、服务器显示的 UTC 和浏览器本地时间可能指向同一时刻,应先换算后查询。排错时不急着修改服务器时钟,否则新的记录会更难对齐。

在服务器执行 timedatectl statusjournalctl --list-boots。后一条列出当前可见的启动记录,帮助判断事件属于本次还是上次启动。没有列出旧启动,不应马上认定系统从未重启,也可能是旧日志没有持久保存。

从窄时间窗读取完整上下文

假设已确认故障发生在 UTC 某段时间,可执行:

# Ubuntu 服务器;日期和服务名均需替换
sudo journalctl -u demo.service --since '2026-09-05 01:00:00 UTC' --until '2026-09-05 01:15:00 UTC' --utc -o short-iso --no-pager

先看完整时间窗,确认程序启动、依赖连接、错误和退出的顺序,再缩小到具体事件。只过滤某个错误词容易漏掉前面的配置加载和后面的重试结果。--utc 统一输出显示,short-iso 让跨系统对照更清楚。journalctl 手册提供筛选与输出选项的定义。

如果服务没有把输出交给 journal,而是自行写文件,还需要读取对应应用日志。系统日志和业务请求日志各有信息,不能期待一个工具覆盖全部链路。

分别看当前启动、上次启动和内核

常见的只读查询包括:

sudo journalctl -b -u demo.service -n 100 --no-pager
sudo journalctl -b -1 -k --no-pager
sudo journalctl -u demo.service -f

第一条看本次启动中该服务的最近记录;第二条看可用的上次启动内核日志;第三条持续观察新日志,按 Ctrl+C 退出查看,不会停止服务本身。-b -1 只有旧启动日志确实保存时才有意义。

内存终止、磁盘错误等可能出现在内核记录,而数据库查询异常更可能在应用日志中。把两个来源按时间对齐,比先猜某一种原因更容易发现关联。分享日志前遮盖令牌、密码、完整请求参数和不宜公开的内部地址。

优先级筛选是辅助,不是完整结论

可以使用 -p warning 查看警告及更严重级别,但应用如何标记优先级取决于日志接入方式。某些程序把报错作为普通文本写到标准输出,级别筛选可能不会把它选出来。因此先读取故障窗口的全部内容,再用级别或文本缩小范围。

输出中若出现限流、消息被抑制或丢弃提示,要意识到日志并不完整。没有某条记录,可能是没有发生,也可能是没有保留或没有采集;两者需要额外证据区分。不要把“搜不到”直接写进复盘作为根因已经排除的证明。

为下次复盘安排保留与导出

journalctl --disk-usage 可以了解 journal 占用,但本文不建议为排障先做清理。需要交接时,将已经确认的时间窗导出到受控目录,保留命令、时区与主机信息。只导出截图通常不利于搜索和关联,文本或结构化导出更易复核。

重启后是否保留日志,与 journald 的存储设置、实际目录以及清理策略有关。Storage=auto 并不保证每台服务器都持久保存,需结合现场配置判断。journald 配置手册说明了存储模式、空间限制和速率限制。

如果需要改变保留策略,先评估磁盘预算和敏感信息范围,在维护流程中备份配置再实施。本次故障排查应先保护证据;把日志收集与容量计划落实后,下一次才不会只能依赖一次重启后的猜测。

参考资料

继续阅读

返回天理云文章中心

分享到:
上一篇
systemd timer 定时任务:补跑、日志与执行结果验证
下一篇
logrotate 日志轮转配置:避免日志丢失与文件持续增长
服务中心
企微客服
企微客服
给您高效服务
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意