第三章:信息收集与分类
大家好,我是老张。这一章咱们聊聊诊断的第一步——信息收集。说实话,我见过太多工程师一上来就闷头查代码,结果折腾半天发现是环境变量配错了。嗯,信息收集这事儿,看似简单,其实门道不少。
3.1 日志收集——别漏了关键线索
日志是故障现场的第一手资料。我个人习惯,不管问题多紧急,先让系统把日志吐出来再说。你想想看,没有日志就像警察办案没有监控,全靠猜。
日志收集的核心原则:
- 全量收集:别只收错误日志。系统日志、应用日志、内核日志,一个都不能少。我在项目中遇到过,某次数据库挂了,错误日志里啥都没有,反而是系统日志里记录了磁盘I/O超时。
- 时间窗口:收集故障发生前后至少30分钟的日志。有时候问题在故障前10分钟就已经埋下伏笔了。
- 保留原始格式:别手贱去格式化。原始日志里的时间戳、进程ID、线程ID,这些细节往往能串起整个故事。
实战命令示例(Linux环境):
# 收集系统日志
journalctl --since "2024-01-15 14:00" --until "2024-01-15 15:00" > syslog_20240115.txt
# 收集应用日志
cp /var/log/myapp/app.log /backup/app_20240115.log
# 收集内核日志
dmesg -T | tail -200 > kernel_20240115.log
我的小技巧:日志文件名一定要带上时间戳。我曾经吃过亏,收集了十几份日志,文件名全是"log.txt",最后分不清哪个是哪个。现在我的命名规则是:应用名_日期_时间.log。
3.2 环境信息——摸清系统的底细
环境信息说白了就是系统的"体检报告"。CPU、内存、磁盘、网络,这些基础指标必须第一时间拿到。为什么?因为很多故障其实是资源耗尽导致的,跟代码本身没关系。
必须收集的环境信息清单:
| 类别 | 关键指标 | 收集命令 |
|---|---|---|
| CPU | 使用率、负载、上下文切换 | top -bn1、vmstat 1 5 |
| 内存 | 总内存、可用内存、Swap使用 | free -h、cat /proc/meminfo |
| 磁盘 | 空间使用率、I/O等待、inode | df -h、iostat -x 1 5 |
| 网络 | 连接数、丢包率、带宽 | netstat -an、ss -s |
注意:环境信息要收集故障发生时的快照,而不是重启后的数据。我曾经遇到一个案例,同事把服务器重启了才收集信息,结果所有指标都正常了,问题再也复现不了。嗯,这等于白干。
3.3 配置信息——别让默认值坑了你
配置信息是系统的"性格设定"。很多诡异的问题,追根溯源都是配置项搞的鬼。我见过最离谱的一次,某应用跑得好好的,突然就崩了。查了半天,发现是配置文件里一个超时参数被改成了0,等于不超时,结果线程全堵死了。
配置信息收集要点:
- 当前配置:直接导出正在运行的配置,别信文档。文档和实际配置不一致的情况太常见了。
- 默认配置:对比出厂默认值,看看哪些被改过。改过的配置项往往是问题高发区。
- 变更记录:谁改的?什么时候改的?改之前是什么值?这些信息比金子还贵。
配置对比脚本示例:
# 导出当前配置
cp /etc/myapp/config.ini /backup/config_current.ini
# 对比默认配置
diff /etc/myapp/config.ini /usr/share/myapp/config.default.ini
3.4 历史记录——翻翻旧账
历史记录就是系统的"病历本"。故障很少是第一次发生,翻翻旧账往往能找到线索。我个人习惯,先查三个地方:
- 故障工单:之前有没有类似的报修记录?怎么解决的?
- 变更记录:最近一周有没有做过升级、改配、重启等操作?
- 监控告警:故障发生前,有没有收到过告警?哪怕是个警告级别,也别放过。
我记得有一次,客户说系统每天凌晨3点准时卡顿。我查了监控历史,发现每天凌晨2:55都有一次磁盘I/O飙升。再一查,原来是备份脚本在跑。调整了备份时间,问题就解决了。你看,历史记录就是这么有用。
3.5 信息分类整理——把线索串起来
信息收集完了,不能堆在那里。你得分类整理,才能看出门道。我常用的分类方法是这样:
分类维度:
- 按时间线:把日志、告警、变更按时间排序,画一条时间轴。故障发生前发生了什么?故障发生时系统在做什么?故障后有什么变化?
- 按模块:应用层、中间件层、操作系统层、硬件层,分层排查。哪一层先出现异常?
- 按严重程度:致命错误、错误、警告、信息。先处理致命错误,但别忽略警告——很多警告其实是故障的前兆。
我的整理习惯:用Excel建一个表格,列分别是:时间、模块、类型、内容、备注。把所有信息填进去,然后按时间排序。这样一看,问题脉络就清晰了。比翻原始日志高效十倍。
知识体系总览
下面这张图,是我自己总结的信息收集与分类流程。你照着这个思路走,基本不会漏东西。
好了,这一章的内容就这些。信息收集与分类,说白了就是给故障诊断打好地基。地基稳了,后面的分析才能站得住脚。下一章咱们聊聊怎么从这些信息里找到真正的根因。