当前位置:首页 > 每日看点 > 正文内容

如何使用tcpdump抓取一次http的请求和响应?

卡卷网12个月前 (11-30)每日看点178

我为什么要开发Kyanos

kyanos 地址:github.com/hengyoush/k…

你有没有遇到过这样的问题 ?
你刚入职新公司,负责一个后端服务,一切都很顺利~
在一个星期五下午5点,还有一个小时你就下班了,但这时~麻烦来了,你的上游突然气势汹汹地找你 ,问你的接口为什么调用超时?
你慌了 但强作镇定查看监控,发现自己服务的接口耗时正常
在你刚想回怼他之前你突然想到公司的监控 仅能监控到服务端应用的耗时, 可中间内核和网络的耗时没有监控
于是你们谁也说服不了谁 , 接下来开始互相扯皮甩锅,最后问题不了了之。。。

反过来,你调用下游接口超时,但对方监控显示并没有超时,于是又开始新的扯皮流程,不同的是你站在了另一边...

所以要解决这个问题该怎么办呢?

  1. tcpdump抓包! 但tcpdump最大的一个劣势就是排查:太 慢 了
    比如说你现在需要排查一个线上问题:
    a. 首先你需要在生产环境安装一个 tcpdump ,
    b. 然后找到出现问题的服务端的 ip 和 port
    c. 然后自己写过滤表达式(可能你忘了怎么写,花了5min在搜索~ )
    d. 费了九牛二虎之力你终于从生产机器上下载下来一个数百 MB 的 pcap 文件
    e. 然后安装 tcpdump 客户端(如果你还没安装的话)
    f. 加载pcap文件让你的CPU风扇狂转
    g. 几分钟后你睁大双眼 人肉确认你想要的那个接口在不在这这个pcap文件里,因为包含了太多无效信息,可不幸的是你发现根本没有 。。。
    h. 然后你重新开始抓包,检查自己的tcpdump命令是否写对...
  2. 让运维装监控啊! 幸好现在出现了eBPF这一强大的技术,可以深入采集内核打点实现全栈的可观测性。 现在的skywalking、pixie、deepflow等都有着不错的产品。
    但这可不容易!上述这些监控要么需要很高的内核版本(5.x),要么只能监控K8s的流量,要么会产生每小时TB级的监控数据需要很重的存储依赖

那么有没有一款轻量级、兼容低版本内核、并且能高效率的排查 网络问题的工具呢?

kyanos来了!

what is kyanos

kyanos 是我开源的一个命令行工具 kyanos 仓库地址 ,它支持最低3.10版本的内核,不需要安装任何依赖就可运行,你需要做的只是下载它的可执行文件(Release下载地址)。

那么kyanos的功能是什么?
在详细介绍之前,上一个例子让大家了解kyanos

你不需要了解任何过滤语法,你只需要执行一行命令(kyanos stat http ...),kyanos就能找到最慢的几个 HTTP 请求,并且发现它们耗时详情(想一想如果使用 tcpdump 会花费多少时间):


如何使用tcpdump抓取一次http的请求和响应?  第1张

​这里一行命令就找到了几个最慢的请求。

如果你想打印请求响应的内容怎么办呢?,你可以这样:

如何使用tcpdump抓取一次http的请求和响应?  第2张

​可以看到请求响应内容直接打印出来了。

kyanos 不仅仅安装特别方便,而且用起来特别符合咱们业务开发的排查模式~ 因为kyanos不是基于数据包维度的,这种粒度太细。通常包含大量无效信息,不适合快速排查问题,而kyanos:完全无侵入,基于七层协议维度,能够过滤大量无效信息,保留对排查问题最有价值的信息

那么 kyanos 它具体能够做什么呢? kyanos 的主要功能包括两点:
1、 抓取各种协议(HTTP、MySQL、Redis等)的请求响应。
2、 通过聚合 1 中抓取的流量进行更高维度的分析。

这里我不做过多介绍,直接上例子!

细致入微--watch

watch命令可以使用各种过滤条件抓取各种协议(HTTP、MySQL、Redis等)的请求响应。你不需要了解任何过滤表达式的知识就能轻松抓取你想要的任何请求响应进行分析。

比如你有一个Spring Cloud应用,监控告警发现访问远程一个接口 /foo/bar 有时候有一些p99尖刺(比如超过了1s的请求),说明有一些长尾请求,这时你该如何确定问题的根因呢?

很简单,通过kyanos 的 watch 命令查看那些超过1s耗时的请求具体耗时在哪:

kyanos watch http --pid {your_pid} --latency 1000 --path /foo/bar

它会输出类似下面的结果:


如何使用tcpdump抓取一次http的请求和响应?  第3张

​可以看到watch会输出下面几个部分:

  1. 请求响应的内容(注:如果太长超过1024字节会截断)。
  2. 总耗时,即用户发起请求到接收完所有响应的耗时。
  3. 内核及外部耗时:包括从 socket 缓冲区读取响应的耗时 以及 网络耗时(请求到达网卡 到 响应从网卡接收完毕的耗时)
  4. 系统调用部分:包括进行了多少次读写系统调用以及读写的字节数量。

可以看到kyanos不仅支持请求响应的内容抓取,甚至把网络和内核的耗时都计算出来了,对排查问题是非常有帮助的!

目前watch支持HTTP、MySQL和Redis协议流量的抓取(这当然不会是全部,后续会支持更多),并且支持各种过滤条件, 更多见 Github 文档:Kyanos命令详解Watch部分

总览全局-stat

仅有watch命令只能提供一个细粒度分析的视角,Stat则提供了更为灵活和高维度的分析能力,简单来说就是将请求响应的指标按照一些维度聚合起来,比如我想知道哪些远程ip的接口最慢,就通过聚合相同ip的请求响应来获取最慢的远程ip。

所以它能回答下面这些问题:

帮我找到现在这台机器上调用的哪些远程ip的HTTP接口最慢?

一行命令搞定:./kyanos stat http --side client -i 5 -m n -l 10 -g conn,每5秒输出请求响应在网络中的耗时最长的前10个HTTP连接,输出如下:

如何使用tcpdump抓取一次http的请求和响应?  第4张

​结果输出找到了两个连接,还有耗时的avg、max、pxx等信息。

我的机器出口流量非常大,到底哪些HTTP请求造成的?

一行命令搞定:./kyanos stat http --side client -i 5 -m p -s 10 -g none, 每5秒按输出响应大小最大的前10个HTTP请求响应, 输出如下:

如何使用tcpdump抓取一次http的请求和响应?  第5张

​可以看到结果中包含了响应的大小的 avg、max、pxx 等,还包含了 HTTP 请求的 path 信息。

使用stat命令的一般步骤
  1. 首先确定你关心的是什么指标,使用 --metrics 指定。kyanos支持以下指标的聚合。
观测指标flag
总耗时t
响应数据大小p
请求数据大小q
在网络中的耗时n
从Socket缓冲区读取的耗时s
  1. 然后确定聚合的维度,使用 --group-by 或者 -g指定 。比如我们关注不同远程服务提供的服务质量是否有差异,就可以指定-g remote-ip,这样请求响应的统计信息就会按照不同的远程ip地址聚合,最终我们将会得到一个不同远程ip的耗时情况,更容易看出哪个远程服务存在问题。kyanos支持以下聚合方式:
聚合维度
最细的粒度,只聚合到单个连接conn
远程ipremote-ip
远程端口remote-port
本地端口local-port
连接协议protocol
最粗粒度,聚合所有的请求响应none

更完整的使用说明见Github:github.com/hengyoush/k…

stat通过watch观察的结果,根据用户指定的聚合维度聚合(--group-by参数),最后按照用户最关心的指标输出(--metrics参数).

如果要用tcpdump该花多少时间啊,使用kyanos几秒就搞定了!

结语

啊其实有些标题党了~ , kyanos 其实还不能真正取代 tcpdump,一方面是 kyanos 目前支持的应用层协议比较有限,对于网络环境更加复杂的部署的支持还有待改进,另外一方面 tcpdump 和 kyanos 的定位不太一样, kyanos更加侧重于问题排查。但总的来说,其确实能提高咱们业务开发的排查效率 。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2024/11/2129.html

分享给朋友:

相关文章

为什么我感受不到 1500 元的手机比四五千的差?

我长期使用两千元左右的安卓机,一天接近8小时的重度手机使用者。某天我突然想试试看传说中非常赛艇的苹果。狠了心,砸了钱。七千大样买了爱疯。就这?什么辣鸡玩意。而且因为我一直更新软件,用了两年爱疯就卡了。并没有传说中的用四五年不卡。用了这么一次...

无人机真的是中国领先吗?

无人机真的是中国领先吗?

巧了这是。捡到了一台大疆。应该是别人飞丢的。在草丛中泡过水,轴承锈死,电池鼓涨已,经没有维修价值了。但作为玩电子的,免不了要把它解剖,研究一番。那么,我们看看它的国产化率能有多少吧。图片说话:解释一下吧。图一,高通 美国图二,MPS: 美国...

网易云音乐上看到过最触动的热评是什么?

网易云音乐上看到过最触动的热评是什么?

1.“昨天晚上洗澡的时候,我忘记拿毛巾了,喊了声妈妈帮我拿下毛巾,正当我伸出左手准备接毛巾的时候,我愣了一下,又换了右手。”希望你永远不会听懂这句话,永远都不要懂。——网易云热评《关键词》2.小时候跟着父亲去城里卖西瓜,害怕同学会看到我,就...

如何进行 Elasticsearch 调优实践?

如何进行 Elasticsearch 调优实践?

面试官心理分析这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s ,坑爹了。第一次搜索的...

如何看待 Luv Letter 表示影视飓风专业性实在是让人失望?

一点儿新进展,另外以下有部分需要关注对于统一变量的问题。这个我在对比上面有写小字解释,我在一开始使用ffmpeg来控制变量。但是发现了不少问题,比如因为遗留bug,会强制将非整数帧的素材转码为VFR导致无法正确帧间对比,因此不考虑,同时尽量...

阿里云服务器续费价格好贵,想换一家云服务厂商,该怎么选择?

阿里云服务器续费价格好贵,想换一家云服务厂商,该怎么选择?

最近一台买了3年时间的腾讯云轻量服务器到期了,还有5天时间。当时买的价格是3年198元。配置是2核CPU、4GB内存,80GB SSD云硬盘,1200GB 流量包,然后中途给免费升级了CPU,从2核变成了4核。平均下来一年的费用70元不到,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。