一、现象描述
某客户客户端—服务器,请求端的应用日志显示延迟十几秒,因为批量刷数据,造成整个数据流的阻塞和报错,应用日志报错如下:
如图所示,请求端的日志显示数据请求延迟了十几秒,因为log很多,随机截了一个log。
但是在网络情况时候,其实网络质量是非常好的。通过科来的会话统计信息,如下:
看到那段时间没有一个会话超过1s的。
但是开发找不出问题,只能甩给网络问题了。
二、故障分析
首先按照我们套路,收集常规信息,源、目的、时间,请求链路。
请求链路:PC–F5–Ingress–Pod
其实在这之前通过科来回溯数据就已经说明问题不在网络了,但是开发还是甩,后来开发找了k8s运维,直接用Node Port方式暴露业务,pc直接用ip+port方式,还是出问题了,这时候其实有开发意识到是程序问题了,but,还需要继续的证据,开启大招,只能在客户端一直抓数据了。
根据业务log的时间、源、目的、唯一值,在客户端和服务端同事抓数据;
如上图所示,根据前面给的log,对照服务器和客户端抓的数据包,过滤唯一值,定位出延迟问题不在网络端,这个故障告诉我们,程序的开始时间,并不代表tcp发起时间。但是开发会理所当然认为log是没问题的。至此,问题点已经确认,
整个过程虽然网络层面一直背锅。但是还是通过tcp层面的分析快速定位问题点,避免问题一直存在而毫无进展。