当前位置:首页 > 每日看点

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

卡卷网2年前 (2024-11-30)每日看点316

我为什么要开发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

分享给朋友:

相关文章

腾讯文档回收站彻底删除文件真的找不回来了吗?

趁早打电话联系腾讯文档的人可能还有救,一般这种都是数据库里标记为删除,文件还没有实际删除,然后经过一段时间后程序统一进行真删除。这个“一段时间”可长可短,可能是一小时也可能是几天几个月甚至几年,要看腾讯服务器的程序是怎么写的。 不过你联系腾…

我怎么也无法理解网络游戏为什么会有外挂?

我怎么也无法理解网络游戏为什么会有外挂?

因为你把服务器想象成了无所不能的上帝;但在我们程序猿眼里,服务器不过是一个黑大傻粗的计算器。 比如说,我们在某个位置打开一个宝箱: 那么,你觉得,程序背后应该做了些什么呢? 一、天真的玩法天真的程序猿会觉得,啊,这事简单!我就告诉服…

买了华为的用户真的不觉得卡吗?

不知道哪一年开始,几乎所有,几乎,所有。 几乎所有的数码区,手机区up主,测手机流畅度的操作变成了 桌面启动app看动画 打开x个app数时间 而更早之前,我记得是有很多up主,测试手机流畅度是测试应用内信息流滑动的。 我倒不是怀疑各位手机…

真实的FPGA开发工作是以调用IP核为主吗?

真实的fpga以背锅为主。 没有开玩笑,正好今天遇到一个问题,做视频图像方面的,用的lattice片子,bram资源用了100%还不够用,怎么办,综合的时候把slice资源也给用了100%,这意味着布局布线非常难布,sdram的时钟肯定跑不…

你被哪个后来知道很sb的BUG困扰过一周以上吗?

你被哪个后来知道很sb的BUG困扰过一周以上吗?

没有一周以上,十来分钟我就反应过来了。 那天,我路过一个十字路口,看到是红灯,就低头刷知乎了。 作为有素质的人,即使晚上没人经过,咱也不能闯红灯。 过了一会儿抬头看还是红灯,没事儿,反正我也不着急,我就继续刷知乎了 我一会儿抬头瞅一眼,…

发表评论

访客

看不清,换一张

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