一、日志分析概述:启动日志是什么?

大家好,我是你们的老朋友。今天咱们聊聊启动日志。

说白了,启动日志就是系统从按下电源键到完全跑起来,这期间发生的所有事情。我做了这么多年运维,最怕的就是半夜接到电话说服务器起不来了。这时候,启动日志就是我的救命稻草。

1.1 什么是启动日志?

启动日志,记录的是操作系统从引导加载程序(比如 GRUB)开始,到内核初始化、服务启动、最终进入用户态的全过程。每一行日志,都是一个事件的快照。

我记得有一次,一台新上架的机器反复重启。查了半天硬件没问题,最后翻看启动日志才发现,是某个内核模块加载顺序错了。嗯,这种坑,不翻日志根本想不到。

核心要点:启动日志 = 系统从开机到就绪的完整事件链。它告诉你系统在哪个环节卡住了、报错了、或者偷偷干了什么。

1.2 日志的重要性

你想想看,没有日志,系统出问题就像在黑屋子里找一只黑猫。启动日志的重要性,我总结了几点:

  • 故障定位的第一手资料:系统起不来,90% 的答案都在启动日志里。
  • 性能瓶颈分析:哪个服务启动花了 30 秒?日志里时间戳一清二楚。
  • 安全审计依据:谁在什么时候改了内核参数?日志会留下痕迹。
  • 变更回滚参考:升级内核后出问题?对比前后启动日志,差异一目了然。

我个人习惯,每次做重大变更前,都会先备份一份启动日志。这习惯救过我至少三次。有一次升级存储驱动,重启后磁盘全丢了,还好有日志帮我定位到是驱动参数不兼容。

1.3 常见的日志格式

启动日志的格式,说白了就三种主流形态。我一个个说。

1.3.1 syslog 格式

这是最经典的日志格式,很多老系统还在用。它的结构很简单:

<优先级>时间戳 主机名 进程名[PID]: 消息内容

举个例子:

<6>2025-01-15T08:30:00.123456+08:00 my-server kernel: [    0.000000] Linux version 5.10.0

这里的 <6> 是优先级,数字越小越严重。0 是紧急,7 是调试。我刚开始学的时候,老记不住这些数字,后来干脆写了个小脚本,把优先级转成中文标签。

小技巧:syslog 的优先级 = 设施代码 × 8 + 严重级别。比如 kern.info 就是 (0 × 8) + 6 = 6。记不住没关系,用 logger -p kern.info "test" 生成一条看看就懂了。

1.3.2 journald 格式

这是 systemd 带来的新格式。它不再是纯文本,而是二进制结构化的数据。好处是查询快、字段丰富。坏处是……你不能直接用 cat 看了。

查看 journald 日志,得用 journalctl 命令:

# 查看本次启动的日志
journalctl -b

# 查看上一次启动的日志
journalctl -b -1

# 只看内核日志
journalctl -k

# 按时间范围过滤
journalctl --since "2025-01-15 08:00:00" --until "2025-01-15 09:00:00"

我曾经帮一个同事排查问题,他死活找不到日志,因为系统用的是 journald,而他还在用 tail -f /var/log/messages。嗯,这里要注意:新系统默认用 journald,老习惯得改改。

避坑指南:journald 日志默认只保留最近几次启动的记录。如果你需要长期保存,记得配置 SystemMaxUse= 和 MaxRetentionSec=。我曾经因为没配这个,查三个月前的启动日志时发现已经被自动清理了……

1.3.3 文本日志

这是最原始、也最通用的格式。很多应用自己写的日志,就是纯文本。比如:

[2025-01-15 08:30:01] [INFO] [main] Application started
[2025-01-15 08:30:02] [ERROR] [database] Connection refused

文本日志的好处是简单、可读性强。坏处是解析起来麻烦,尤其是当格式不统一的时候。我见过最离谱的日志,时间戳格式一天换三种,上午是 2025-01-15,下午变成 01/15/2025,晚上又成了 15-Jan-2025。你说这怎么用脚本分析?

1.4 三种格式对比

我把它们放在一起对比一下,方便你理解:

特性 syslog journald 文本日志
存储方式 纯文本文件 二进制数据库 纯文本文件
查看工具 cat、tail、grep journalctl cat、tail、grep
结构化程度 低(只有固定字段) 高(包含元数据) 极低(全靠自己解析)
查询效率 低(逐行扫描) 高(索引支持) 低(逐行扫描)
典型场景 传统 Unix/Linux 现代 systemd 系统 应用自定义日志

1.5 本章知识体系

下面这张图,帮你把本章的核心逻辑串起来:

启动日志分析知识体系 启动日志 什么是启动日志 日志的重要性 常见日志格式 syslog 格式 journald 格式 文本日志 三种格式对比 核心:启动日志 = 系统启动全过程的完整事件链 图例:红色=概念定义 | 绿色=价值意义 | 橙色=技术细节 | 紫色=核心总结

这张图把本章的知识结构串起来了。从中心出发,三个分支分别对应三个核心问题:是什么、为什么重要、有哪些格式。最后汇聚到一句话:启动日志就是系统启动全过程的完整事件链。

我的建议:刚开始学日志分析,别急着记命令。先搞清楚日志长什么样、存在哪里、怎么读。基础打牢了,后面分析起来才顺手。我见过太多人一上来就背 journalctl 参数,结果连日志在哪个目录都找不到。

好了,这一章就到这里。启动日志的概念、重要性和三种格式,你应该心里有数了。下一章咱们会深入实战,看看怎么用这些日志真正解决问题。

可可精品资料库