《SRE google 运维解密》读书笔记 (二)

有效的故障排查手段

理论:

反复采用假设排除手段的过程:
不断提出一个造成系统问题的假设,进而针对这些假设进行测试和排除

常见的陷阱

  • 关注的错误的系统现象,或者错误地理解了系统现象的含义。
  • 不能正确的修改系统的配置信息,输入信息或者系统运行环境。
  • 将问题过早的归结为极为不可能的因素,或者之前曾经发生过的问题
  • 试图解决与当前问题相关的一些问题,却没有认识到只是巧合。

实践

故障报告

故障报告不鼓励直接汇报给具体的某个人,这样会导致压力集中在几个问题汇报人熟悉的团队成员。而不是质保人员。
需要保证每一个故障报告都有调查的历史和解决方案。

定位

大型问题,不要立即开始排查问题,尽快找到问题的根源。

正确的做法是,尽最大可能使系统回复。(同时尽量保存报错的现场供事后调查复盘)

检查

需要检查系统中每个组件的工作状态,以便了解系统是不是在正常工作。

理想情况下监控可以提供相应指标。

日志很重要,了解系统某个时间在干啥。

将日志结构化,可以保存更长时间
多级记录日志很重要,尤其可以动态调整日志级别
在日志系统中支持过滤条件

诊断

  • 简化和缩略
    • 对于大型系统,逐级查询问题过于耗时,尝试使用二分法。
  • What 、Where 、Why
  • 最后一次变更
    • 变更是引起问题的最大来源
  • 有针对性的诊断

测试和修复

  • 理想的测试应该具有互斥性,一个测试可以推翻一组假设
  • 先测试最可能的问题
  • 某些测试可能带来误导性的结果
  • 执行测试可能会带来副作用

    神奇的负面结果
    所谓负面结果,就是一项试验中不符合预期的结果

    • 负面结果不应该被忽略
    • 负面结果需要被记录,供后来人查阅。
      • 比如压测不通过的报告
    • 工具和方法可能超越目前的试验,为未来的工作提供帮助
    • 公布负面结果有利于挺升行业的数据驱动风气
    • 公布结果
      • 负面结果并不是失败
      • 负面结果并非没有价值
      • 良好设计的试验是有价值的,而不是有正向结果的试验才有价值

治愈

理想情况下,可能把错误原因减少到了一个。
下一步复现问题。
然后修复问题

如果一旦解决了某个问题,需要将如何定位问题,如何修复问题,如何防止问题再次发生。进行记录作为事后总结记录。

使故障排查更简单

  • 增加系统的可观察性。为每个系统增加白盒监控和结构化日志
  • 利用成熟的,观察性好的组件接口设计系统