一、日志分析概述:启动日志是什么?
大家好,我是你们的老朋友。今天咱们聊聊启动日志。
说白了,启动日志就是系统从按下电源键到完全跑起来,这期间发生的所有事情。我做了这么多年运维,最怕的就是半夜接到电话说服务器起不来了。这时候,启动日志就是我的救命稻草。
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 本章知识体系
下面这张图,帮你把本章的核心逻辑串起来:
这张图把本章的知识结构串起来了。从中心出发,三个分支分别对应三个核心问题:是什么、为什么重要、有哪些格式。最后汇聚到一句话:启动日志就是系统启动全过程的完整事件链。
我的建议:刚开始学日志分析,别急着记命令。先搞清楚日志长什么样、存在哪里、怎么读。基础打牢了,后面分析起来才顺手。我见过太多人一上来就背 journalctl 参数,结果连日志在哪个目录都找不到。
好了,这一章就到这里。启动日志的概念、重要性和三种格式,你应该心里有数了。下一章咱们会深入实战,看看怎么用这些日志真正解决问题。