2周2.5k星! 网络问题排查神器 kyanos 介绍

2周 2.5k星的成长之路

2024 年 9 月份我开始了 kyanos 的构思与开发,在 11 月发布 1.4.0 版本之后短短两周获得了2.5k star,目前已经有 3.7k star,下面是 kyanos 的涨星趋势图:

下面介绍下这些 star 主要是从哪来的,也许可以给你一些启发

kyanos 是什么

仓库地址:github.com/hengyoush/k...

Kyanos 是一个基于eBPF的网络问题分析工具,你可以用它来抓取业务请求,比如HTTP请求、Redis请求、MYSQL请求等,还可以帮你分析异常链路,快速排查业务故障,而不需要繁琐的抓包,下载,分析等步骤,并且拥有良好的兼容性,大多数情况下无需任何依赖一行命令即可开始分析。

五大亮点

  • 可根据进程id/容器id/pod名称过滤流量。
  • 内核耗时细节探测,可以知道请求数据从进程发送到网卡的耗时,也能知道响应从网卡读取到进程花费的耗时。
  • 可聚合分析,比如一行命令就可以找到最慢的HTTP请求到了哪些服务端,找到哪些请求的占用的带宽最大。
  • SSL 加密流量自动解密(目前支持 openssl 和 gotls)。
  • 零依赖,无任何存储依赖,也无需安装其他分析软件如wireshark,就地分析。

下面让我们来看一下如果线上一个应用存在Redis缓存慢查询,该如何定位。

Case 1:一行命令找到慢请求并且搞清楚到底慢在哪

bash 复制代码
# 找到超过100ms的redis请求
./kyanos watch redis --latency 100

输入命令后,会展示如下的表格,每个请求响应记录会记录在表格中的一行,每列记录这个请求的基本信息。你可以通过方向键或者j/k上下移动来选择记录:

kyanos watch result

按下enter进入详情界面:

kyanos watch result detail

详情界面里第一部分是 耗时详情。

第二部分是 请求响应的具体内容,图中的示例是HTTP协议,分为 Request 和 Response 两部分,超过 1024 字节会截断展示。

内核耗时可视化详细解析

下面这张图片是一个容器内部进程发送HTTP请求到外部 www.baidu.com 的示例:

kyanos time detail

每一个方块代表数据包经过的节点,从上面依次看起,第一个是Process,代表请求从进程发出,到右边第二个节点eth0@if483,这是容器内部的网卡设备,后边有一个(used:0.02ms)代表从上一个节点process到容器内部网卡花费了0.02ms。

以此类推,再到右边的eth0即为宿主机网卡,并且可以知道从容器网卡到虚拟机网卡花费了0.02ms。

然后请求从网卡发出,到网卡接收到响应(即为图中所示的向下箭头),花费了13.37ms,之后就是响应接收的流程,从右往左。

接着容器接收响应花费0.06ms,再到响应数据复制到TCP缓存区花费了0.06ms,最后进程从缓冲区读取数据花费了0.11ms。

可以清楚的看到请求从进程发送到网卡,响应再从网卡复制到Socket缓冲区并且被进程读取的流程和每一个步骤的耗时。

Case 2: 分析客户端请求的数据大小并且找出最大的客户端ip

当我们维护一个服务时,如果有客户端请求的接口响应过大而且qps很高,那么很容易把网络带宽占满,在发生这种情况时如何能快速定位是哪些客户端在请求,并且搞清楚请求的具体内容是什么以便快速解决问题。

以往这种问题可能需要多种工具支持,比如先通过iftop找到哪些客户端流量最大,然后针对这些客户端ip抓包,而且抓包后还需要借助wireshark辅助分析,排查效率相对较低。

使用kyanos只需要一行命令即可查看哪些远程ip请求的数据最多:

bash 复制代码
./kyanos stat --bigresp

如下所示:

这张表的每个记录代表一个远程ip的所有响应的聚合结果,可以看到第一个ip:172.17.43.77的最大响应(max列)是 18181,平均响应大小。还能按下数字键排序对应列。

我们看到第一行是平均响应大小最大的,可以按下enter,这样就可以选择到这个远程ip的每条请求响应了。如下所示:

和case1一样可以选择具体的记录,查看其请求到底是什么从而确定响应过大的原因。

未来展望

kyanos是一个很新的项目,自从正式版发布只有4个月,非常欢迎贡献者,我整理了一份适合新手上手的issue清单: 新手任务-issue列表,希望未来和社区一起沉淀一个强大好用的工具。

后续我计划从以下几个方面推进 kyanos 的建设:

  1. 支持更多的协议,例如:DNS、GRPC、Dubbo、Postgres等。
  2. 采集内核的丢包、重传输事件等,提供优化建议。
  3. 支持应用的持续性能分析,从更多视角分析网络性能问题的根因。

相关链接

github repo:github.com/hengyoush/k...

docs website: kyanos.io/

相关推荐
zhoupenghui16823 分钟前
linux环境自动化golang项目启动脚本解析
运维·自动化·github·sh·golang自动化部署
计算机-秋大田1 小时前
基于微信小程序的绘画学习平台的设计与开发
spring boot·后端·学习·微信小程序·小程序·课程设计
努力的小雨1 小时前
腾讯云HAI与DeepSeek携手打造私有化高效代码助手
后端
kcarly2 小时前
开源数据分析工具 RapidMiner
数据挖掘·数据分析·开源
孔瑾熙2 小时前
Ruby语言的循环实现
开发语言·后端·golang
我码玄黄3 小时前
高效 MyBatis SQL 写法一
后端·sql·tomcat·mybatis
Bro_cat3 小时前
Spring Boot常用注解深度解析:从入门到精通
java·spring boot·后端
谦行3 小时前
前端视角 Java Web 入门手册 2.4.3:集合框架——Queue
java·后端
华为云PaaS服务小智4 小时前
开源安全一站式构建!开启企业开源治理新篇章
安全·开源·华为云