本站目前处于试运行。这是一篇用于验证博客排版与发布流程的示例文章,可以直接替换为正式内容。
面对复杂系统故障,最容易发生的事情是被第一条“看起来相关”的日志带走。日志能告诉我们发生了什么,却很少单独说明为什么发生。
先建立时间线
把故障窗口压缩到足够小,然后按同一时钟排列请求、资源、进程和依赖事件。时间线的目标不是收集全部信息,而是识别先后关系:
- 哪个信号最早偏离基线?
- 哪些异常是原因,哪些只是后果?
- 恢复之前发生了什么变化?
没有时间线,跨系统日志只是很多互不相干的句子。
写下可以被推翻的假设
好的诊断假设必须带着反证条件。例如:
如果延迟来自数据库连接耗尽,那么连接等待时间应该先于应用请求延迟上升,并在连接池扩容后同步下降。
这句话既给出了预期证据,也说明了什么结果会推翻假设。相比“数据库可能有问题”,它更容易指导下一步操作。
用对照减少变量
当系统允许时,优先设计小范围对照:
- 保持输入和负载不变,只改变一个配置。
- 在同一观察窗口比较延迟、错误与资源曲线。
- 记录无法控制的外部变量。
- 如果信号没有按预期变化,就降低该假设的优先级。
诊断的完成条件不是找到一段解释得通的故事,而是获得一组能够互相支持、也经受过反证的证据。