文章建议收藏关注再品,谢谢。

本文说明

本文是个人在做SRE时,排查问题的一些经验总结。最近刚好遇到一个比较典型的案例,所以就写下此文。希望能和大家多多交流。

问题背景

业务背景是设备需要连接上云端,然后进行登录。终端开发人员说他的设备无法连接上云端。

SRE问题排查四步法

以下是我总结的问题排查四步法:

  1. 信息收集;

  2. 提出猜测;

  3. 验证猜测;

  4. 如果没有找到问题,重复1,2,3步。

以上每一步都必须有文档记录下来,方便其他进行review、协作。这点真的非常非常的重要。

根据以上四步法,我们开始第一步。

第一步:信息收集阶段

通过与终端开发人员沟通,我们得到以下信息:

  1. 设备A能连上生产环境,连不上预发布和测试环境;

  2. 另一些设备类型B、C、D,所有的环境都能连接上;

  3. 空中抓包设备A的连接信息发现,设备A有client hello发出,但是服务器端并没有返回 server hello,而是返回了一个RST的包,从而无法建立连接;

  4. 设备A通过HTTP的方式能正常建立连接,但是通过HTTPS的方式就不行。

当终端开发人员描述完,我第一件事情是通过执行命令 curl-v https://httpbin.example.com:2111尝试复现问题。顺手确认一下是不是他的网络本身的问题。

但是,多次试验curl,返回的都是404。这说明请求是能到达后端服务的。我的这个操作是在尝试初步复现问题。这个过程,叫复现问题。别人的描述本身,我们也要进行验证。

复现问题的目的是为了验证“证据”本身的真实性,这样才能保证,我们后面的猜测的基础是正确的。

同时,我们还必须收集云端本身的架构的信息。这次出问题的预发布环境的调用关系是:

客户端 —> LB(TCP) —> ingress(TLS) —> 后端服务

能正常连接的生产环境的是:

客户端 —> LB(HTTPS) —> 后端服务

可以看到预发布环境的TLS在放在Ingress上实现的,而生产环境是放在LB上实现的。

本阶段,要注意的是:

  1. 尽可能全面、客观、准确的收集信息;

  2. 自己亲自复现问题,验证别人所描述的信息的正确性;

  3. 注意区别沟通对象口中说出来是“他认为的”,还是“真正的现象”;

  4. 记录下所有的信息及复现方法。

第二步:提出猜测

什么时候开始第二步?估计你会有这样的疑问。答案是现实中,第一步和第二步是交叉着进行的。在现象收集过程中,你的大脑可能就已经在提出猜测了。

我们通过终端开发人员所描述的信息,分析结果是:

信息1基本可以说明和环境有关,信息2说明设备A本身与其它的设备类型是有区别的。同时,两个信息组合起来,也基本排除后端的业务级别的问题了。

信息3就是实实在在的技术问题了(能检验TCP/IP TLS方面的真正能力)。信息4验证了信息3,可能是TLS方面出了问题(信息之间是可以相互验证的)。

在排除后端服务和网络的问题后,我们初步猜测是服务器端和客户端之间的TLS加密套件匹配不上导致的。

这个阶段,我们需要注意的是:

  1. 能提出多少猜测,很能体现一个人的逻辑思维能力、技术能力。我们可以在这个过程中,识别人才。

  2. 可以与其他交流,个人能力是有限的。

第三步:验证猜测

在提出猜测后,可以马上进行验证,而且应以低成本的方式快速进行验证。

笔者使用SSL在线工具得到了生产环境的LB支持的TLS加密套件列表后,再手工设置Ingress支持的加密套件,保证Ingress和生产环境的LB提供的是相同的加密套件。

结果,验证结果并不是加密套件的问题,终端还是无法连接上。将验证方法和结果记录到文档后,我们进入第四步。

这个阶段,需要注意的是:一次只验证一个猜测,避免交叉验证。

第四步:重复123步

现在我们需要再回到第一步进行信息收集。

这次,我们只能通过tcpdump进行抓包,才能知道更多的信息。现在的问题是我们应该在LB抓,还是Ingress呢?由于LB是公有云的,我们无法抓包,所以,只能在Ingress上抓。

然而好不容易抓到包,由于笔者才疏学浅,在对比了有问题的请求和没有问题的请求后,还是没有看出问题。好在,有tcpdump的pcap文件。请教团队中的在TCP/IP方面的高手后,我们得到了新的猜测:

出问题的是握手包中,没有加入server name扩展值,导致Ingress无法判断请求的域名。

如何验证这个猜测呢?我们是通过openssl命令进行验证:

openssl s_client -msg -debug -state -connect httpbin.example.com:2111 -servername httpbin.example.com
结果是我们的猜测是正确的。最后,终端在发起请求时,带上了servername,问题解决了。

慢着,就这样结束了?本次案例是结束了。但是实际工作中,导致问题的原因可能不止一个。这点需要注意。

后记

在排查过程中,技术能力严重限制了排查的速度,但是排查过程学习到的东西是印象最深刻的。以前看再多次TLS的握手过程文章,不如排查一次。因为我没有看到加密套件匹配失败时的抓包现象,所以,一开始没有排除这个猜测。

欢迎关注 持续交付实践指南 公众号

参考资料

  • 深入学习TLS握手过程:https://segmentfault.com/a/1190000019718974

  • 什么是 TLS 握手?https://www.cloudflare.com/zh-cn/learning/ssl/what-happens-in-a-tls-handshake/

SRE问题排查四步法——以建立HTTPS连接失败问题排查为例相关推荐

  1. 建立安全连接失败_安全失败

    建立安全连接失败 上周,我参加了有关可伸缩敏捷框架SAFe的演示 . 我之前已经阅读过有关它的内容,但这是对该主题的更广泛的介绍. 这将是成功的. 当我谈论scrum为什么成功地跨越了开发人员世界到业 ...

  2. 火狐浏览器“建立安全连接失败”问题,处理方法

    火狐浏览器"建立安全连接失败"问题,处理方法 系统:ubuntu 参考https://blog.csdn.net/qq_42420767/article/details/80861 ...

  3. android studio socket 失败,Android应用开发Android Studio建立Socket连接失败解决方法

    本文将带你了解Android应用开发Android Studio建立Socket连接失败解决方法,希望本文对大家学Android有所帮助. < Android Studio建立Socket连接失 ...

  4. 火狐打不开qq空间,说“建立安全连接失败”,解决方案

    错误背景 1.qq空间用火狐浏览器打开 2.显示建立安全连接失败  解决方案 crtl+f5就可以了

  5. 百度 建立安全连接失败

    突然早上打开电脑准备百度,显示 建立安全连接失败 搜了好几个方法 都没用 最后在internet选项的高级里面 Internet  explorer 重置这个笨办法  然后就ok了

  6. 火狐浏览器打开GitHUb时,说“建立安全连接失败”,解决方案

    火狐浏览器打开GitHUb时,说"建立安全连接失败",解决方案 (刚找到,在这记录一下) 如图 (忽略图中网站)打开GItHUb时会出现这样的情况 解决方法 crtl+f5就可以了 ...

  7. 记一次因tcp_tw_recycle误设置为1导致服务器无法正常建立TCP连接的问题排查

    背景 为某SaaS平台的数据推送服务写的接口无法及时响应数据推送请求,导致频繁出现因请求超时而导致的数据推送失败,进而严重影响业务使用.接口部署在公司的阿里云上. 故障点梳理 #mermaid-svg ...

  8. fxp连接失败_FlashFXP使用PASV被动模式建立数据连接失败的问题解决

    FTP是常见的上传下载网络应用之一,虽然如今对于普通用户很少用到了,但在某些特殊场合还是会使用到的. 以Windows 2003中IIS自带的FTP功能为例,其服务端本身的配置是相对简单的,稍作设置后 ...

  9. 火狐浏览器,访问腾讯云服务器的时候,出现建立安全连接失败的问题。

    在腾讯云上部署了一个服务器,听过服务器ip访问项目的时候,刚开始的时候,启动tomcat,是可以启动的,有进程的,但是访问的时候,会出现超时连接.后来想了想可能是端口的问题.在服务器上,开通了8080 ...

  10. 关于使用burp suite后访问https页面出现“建立安全连接失败”问题的解决方法

    因为有部分同好出现这个问题但不知道如何解决,所以在这里写了个详细步骤供参考: 1.在burp suite中导出证书 2.导出证书的选项按照需求选择即可: 3.这里填写保存的文件信息: 4.在浏览器中找 ...

最新文章

  1. (2006, 'MySQL server has gone away') 错误解决 - dba007的空间 - 51CTO技术博客
  2. zookeeper-一个关于paxos的故事
  3. python爬虫教程视频下载-利用Python网络爬虫获取电影天堂视频下载链接【详细教程】...
  4. jasper(二):制作饼状图和柱状图
  5. SharpMap分析手记
  6. 【JS 逆向百例】网洛者反爬练习平台第一题:JS 混淆加密,反 Hook 操作
  7. leetcode369. 给单链表加一
  8. 解决ubuntu18.04中python兼容以及pip兼容问题
  9. 皕杰报表和炎黄盈动(AWS BPM)集成 操作手册
  10. MongoDB删除文档(非常详细~)
  11. [高光谱] GitHub开源项目Hyperspectral-Classification的解析
  12. 物联网之NB-IoT技术实践开发二
  13. java 为透明图片添加背景颜色
  14. 传奇手游服务器搭建_传奇手游架设服务器教程
  15. css icon旋转
  16. 利用 Global mapper制作地图瓦片
  17. RDBMS(关系型数据库)与HBase的对比
  18. 网站优化推广方法汇总(一)
  19. 滴水逆向学习笔记 -2-
  20. 【JVM】之监控命令-jstat详解

热门文章

  1. 企业公司Discuz模板
  2. 89C51最小系统典型应用
  3. python中label组件参数_【Python64-tkinter_label组件】
  4. 网站制作教程:初学者如何制作网站,有哪些步骤?
  5. 小程序将页面转为图片--Wxml2Canvas
  6. 程序员该怎么学习---弱水三千,只取一瓢
  7. 5位数的数字黑洞是多少_数字黑洞求解问题
  8. 机器学习和深度学习资源汇总(陆续更新)
  9. Tik Tok账号被封了怎么办?
  10. 各种手机处理器排行榜_手机处理器CPU性能排名