wireshark分析coredns响应时间

最近wireshark用的比较多,有了一些心得,后续会陆续分享出来。

当调用慢的时候,我们可能怀疑是coredns解析域名慢导致的,因此需要抓包分析。

tshark抓包

tshark是wireshark的命令行版本,主要用来抓包生成cap文件,然后再把cap文件拿到windows/mac系统中,用wireshark GUI进行分析。

使用yum或者apt尝试安装tshark或者wireshark即可。

我们可以从调用方抓包,也可以从coredns服务侧抓包,取决于我们怀疑的对象。

无论从哪一端抓包,我们都只需要在node上使用tshark,因为容器的流量会经过所在node做转发。

使用命令:

tshark port 53 -i eth0 -w /data/coredns.cap

就可以持续的开始监听53端口的通讯流量,然后写入导coredns.cap文件,持续一段时间后我们可以ctrl+c关闭。

把coredns.cap文件拷贝到桌面电脑上,然后开始wireshark分析。

wireshark分析

先Open打开文件:

等待wireshark加载完成后,我们可以点击统计菜单,选择DNS协议:

可以看到关于所有抓到的DNS请求/应答的统计分析:

观察是否有coredns慢响应,主要就是看response time的最大值,这里显示是0.3秒。

此时,我们为了找到哪个具体请求花费了0.3秒,需要对包进行过滤,其实无论分析任何协议,过滤的基本逻辑都是类似的,就是先随便找一个包,观察里面的字段,直接在字段上右键进行筛选。

这里我们找到一个DNS应答包,会发现里面有一个time字段表明了DNS请求/应答的完整耗时:

那么我们就在Time字段上右键选择Apply as column,把它添加到表格作为一列:

然后可以点Time列倒排,看到耗时最大的请求的确是0.3秒,它请求的域名也一目了然,是一个公网域名,解析慢一点也可以理解。

其实也可以Apply as filter作为一个过滤语句,精确筛选耗时,这里就不做演示了。

wireshark工具在协议解析方面非常强势,可以自动解析mysql/dns/http/amqp等多种协议,并且可以自动聚合为会话,很方便进行问题分析。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~