惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
H
Help Net Security
小众软件
小众软件
N
Netflix TechBlog - Medium
C
Check Point Blog
量子位
Last Week in AI
Last Week in AI
GbyAI
GbyAI
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
博客园 - 聂微东
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
D
DataBreaches.Net
Project Zero
Project Zero
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
Security Latest
Security Latest
Cisco Talos Blog
Cisco Talos Blog
Recorded Future
Recorded Future
I
Intezer
L
Lohrmann on Cybersecurity
Cyberwarzone
Cyberwarzone
博客园_首页
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog
P
Palo Alto Networks Blog
V
V2EX
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
The Exploit Database - CXSecurity.com
The Hacker News
The Hacker News
Blog — PlanetScale
Blog — PlanetScale
G
GRAHAM CLULEY
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
The Register - Security
The Register - Security
L
LINUX DO - 热门话题
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
F
Full Disclosure
博客园 - 司徒正美
Recent Announcements
Recent Announcements
IT之家
IT之家
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Attack and Defense Labs
Attack and Defense Labs
Cloudbric
Cloudbric
Help Net Security
Help Net Security
The Last Watchdog
The Last Watchdog

犀利豆的博客

《SRE google 运维解密》读书笔记 (六) 《SRE google 运维解密》读书笔记 (五) 《SRE google 运维解密》读书笔记 (四) 《SRE google 运维解密》读书笔记 (三) 《SRE google 运维解密》读书笔记 (一) 2021 总结 终于有一个 Java 可以用的微信机器人了 Vertx入门到实战—实现钉钉机器人内网穿透代理 钉钉机器人回调内网穿透代理--使用篇 周末补习(一)trie 树 那些有趣的代码(三)--勤俭持家的 ArrayList 那些有趣的代码(二)--偏不听父母话的 Tomcat 类加载器 那些有趣的代码(一)--有点萌的 Tomcat 的线程池 从需求第三定律说起--为什么知乎的回答质量下降了 如何利用 Spring Hibernate 高级特性设计实现一个权限系统 居然有人能忘记吃饭?写个微信机器人提醒他 我的2018年总结 从 LongAdder 中窥见并发组件的设计思路 徒手撸框架--实现 RPC 远程调用 我的写作工具链 Java 渲染 docx 文件,并生成 pdf 加水印 撸码的福音--变量名生成器的实现 Raft 协议学习笔记 dubbo 源码学习(一)开篇 Redis 命令的执行过程 Redis 中的事件驱动模型 Redis 数据库、键过期的实现 Redis 的基础数据结构(三)对象 Redis 的基础数据结构(二) 整数集合、跳跃表、压缩列表 Redis 的基础数据结构(一) 可变字符串、链表、字典 线程池 execute() 的工作逻辑 JAVA 中的 CAS 徒手撸框架--高并发环境下的请求合并 徒手撸框架--实现Aop 徒手撸框架--实现IoC 2017个人总结 最近遇到的几个问题集合 Redis RedLock 完美的分布式锁么? JAVA 8入门(二)流 JAVA 8入门(一)Lambda表达式 有道 Alfred Workflow 威力加强版 Kafka实现原理笔记 《交易系统:更新与跨越》读后笔记 Netty-Apns接入实现 Future研究 Hystrix入门研究 Redis实现分布式锁
《SRE google 运维解密》读书笔记 (二)
Zhengxin Diao · 2022-04-18 · via 犀利豆的博客

有效的故障排查手段

理论:

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

常见的陷阱

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

实践

故障报告

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

定位

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

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

检查

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

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

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

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

诊断

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

测试和修复

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

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

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

治愈

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

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

使故障排查更简单

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