hengyoush/kyanos
GitHub: hengyoush/kyanos
基于 eBPF 的轻量级网络分析工具,可视化数据包在内核中的延迟细节并自动解析 L7 协议,帮助快速定位网络性能瓶颈。
Stars: 4989 | Forks: 226
# kyanos
一条命令找出最慢的请求并定位原因。

[](#)
[](#)
[](https://github.com/hengyoush/kyanos/actions/workflows/test.yml)
[](https://news.ycombinator.com/item?id=42154583)
[简体中文](./README_CN.md) | English
- [英文文档](https://kyanos.io/)
## 目录
- [kyanos](#kyanos)
- [目录](#table-of-contents)
- [什么是 kyanos](#what-is-kyanos)
- [示例](#examples)
- [❗ 系统要求](#-requirements)
- [🎯 如何获取 kyanos](#-how-to-get-kyanos)
- [📝 文档](#-documentation)
- [⚙ 用法](#-usage)
- [🏠 如何构建](#-how-to-build)
- [路线图](#roadmap)
- [🤝 反馈与贡献](#-feedback-and-contributions)
- [🙇 特别感谢](#-special-thanks)
- [🗨️ 联系方式](#️-contacts)
- [Star 历史](#star-history)
## 什么是 kyanos
Kyanos 是一个**基于 eBPF** 的网络问题分析工具,它可以让你
捕获网络请求,例如 HTTP、Redis 和 MySQL 请求。
它还能帮助你分析网络异常问题并快速排查故障,
无需经历抓包、下载和分析等复杂步骤。
1. **强大的流量过滤**:不仅可以根据传统的
IP/端口信息进行过滤,还可以按进程/容器、L7 协议
信息、请求/响应字节大小、延迟等进行过滤。
```
# 按 pid 过滤
./kyanos watch --pids 1234
# 按 container id 过滤
./kyanos watch --container-id abc
# 按 Redis key 过滤
./kyanos watch redis --keys my-key1,my-key2
# 按 response byte size 过滤
./kyanos watch --resp-size 10000
```
2. **高级分析能力**:与仅提供细粒度抓包功能的 tcpdump 不同,Kyanos 支持
将捕获的数据包指标按各种维度进行聚合,快速提供对故障排查
最有价值的关键数据。
想象一下,如果你的 HTTP 服务带宽突然被打满——你会如何
快速分析是 `哪些 IP` 和 `哪些请求` 导致的?
使用 Kyanos,你只需要一条命令:`kyanos stat http --bigresp` 即可
找出向远程 IP 发送的最大响应字节大小,并查看请求和响应指标的
具体数据。

3. **深入的内核级延迟细节**:在实际场景中,对
Redis 等远程服务的慢查询可能难以精确诊断。Kyanos
提供了从请求/响应到达网卡到内核 socket 缓冲区的内核追踪点,并以
可视化格式显示这些细节。这使你能够准确识别是哪个阶段导致了
延迟。

4. **轻量且无依赖**:几乎零依赖——只需一个
二进制文件和一条命令,所有结果都显示在命令行中。
5. **自动 SSL 流量解密**:所有捕获的请求和响应
都以明文形式呈现。
## 示例
**捕获 HTTP 流量并查看延迟详情**
运行命令:
```
./kyanos watch http
```
结果如下:

**捕获 Redis 流量并查看延迟详情**
运行命令:
```
./kyanos watch redis
```
结果如下:

**找出过去 5 秒内最慢的请求**
运行命令:
```
./kyanos stat --slow --time 5
```
结果如下:

## ❗ 系统要求
Kyanos 目前支持内核版本 3.10(从 3.10.0-957 起)和 4.14 及
以上版本(计划在未来支持 4.7 到 4.14 之间的版本)。
## 🎯 如何获取 kyanos
你可以从 [发布页面](https://github.com/hengyoush/kyanos/releases) 下载兼容 amd64 和 arm64
架构的静态链接二进制文件:
```
tar xvf kyanos_vx.x.x_linux_amd64.tar.gz
```
然后,使用 **root 权限** 运行 kyanos:
```
sudo ./kyanos watch
```
如果出现以下表格:
 🎉
恭喜!Kyanos 已成功启动。
## 📝 文档
[英文文档](https://kyanos.io/)
## ⚙ 用法
最简单的用法是捕获 Kyanos 当前支持的所有协议:
```
sudo ./kyanos watch
```
每个请求-响应记录在表中显示为一行,每一列
捕获该请求的基本信息。你可以使用方向键或
`j/k` 在记录中上下移动:

按 `Enter` 进入详情视图:

在详情视图中,第一部分显示 **延迟详情**。每个块
代表数据包经过的一个“节点”,例如进程、
网卡和 socket 缓冲区。
每个块包含一个时间值,表示从上一个
节点到该节点所经过的时间,展示了从进程发送请求
到网卡,到响应被复制到 socket 缓冲区,以及
最后被进程读取的流程,并显示每一步的耗时。
第二部分提供 **详细的请求和响应内容**,分为
请求和响应部分,并截断超过 1024 字节的内容。
针对特定流量捕获,例如 HTTP 流量:
```
./kyanos watch http
```
你可以进一步缩小范围,捕获特定 HTTP 路径的流量:
```
./kyanos watch http --path /abc
```
了解更多:[Kyanos 文档](https://kyanos.io/)
## 🏠 如何构建
👉 [COMPILATION.md](./COMPILATION.md)
## 路线图
Kyanos 路线图展示了 Kyanos 的未来计划。如果你有功能
请求或想要优先实现特定功能,请在 GitHub 上提交 issue。
_1.6.0_
1. 支持 postgresql 协议解析。
2. 支持 HTTP2 协议解析。
3. 支持 DNS 协议解析。
4. 支持 GnuTLS。
## 🤝 反馈与贡献
## 🙇 特别感谢
在 kyanos 的开发过程中,借鉴了以下项目的一些代码:
- [eCapture](https://ecapture.cc/zh/)
- [pixie](https://github.com/pixie-io/pixie)
- [ptcpdump](https://github.com/mozillazg/ptcpdump)
## 🗨️ 联系方式
如有更详细的咨询,你可以使用以下联系方式:
- **我的邮箱:** [hengyoush1@163.com](mailto:hengyoush1@163.com)
- **我的博客:** [http://blog.deadlock.cloud](http://blog.deadlock.cloud/)
## Star 历史
[](https://star-history.com/#hengyoush/kyanos&Date)
[返回顶部](#top)标签:API集成, Docker镜像, HTTP分析, IP 地址批量处理, Kyanos, Linux工具, Mutation, MySQL监控, Redis监控, 内核追踪, 可观测性, 可视化, 安全渗透, 客户端加密, 延迟分析, 性能监控, 故障排查, 日志审计, 深度包检测, 端口探测, 系统分析, 网络分析, 网络安全分析, 网络延迟, 网络调试, 自动化, 请求追踪, 运维工具, 防御绕过