ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Kyanos:基于 eBPF 的网络流量分析与故障排查工具全解析

Kyanos:基于 eBPF 的网络流量分析与故障排查工具全解析 Kyanos基于 eBPF 的网络流量分析与故障排查工具全解析【免费下载链接】kyanosKyanos is a networking analysis tool using eBPF. It can visualize the time packets spend in the kernel, capture requests/responses, makes troubleshooting more efficient.项目地址: https://gitcode.com/GitHub_Trending/ky/kyanosKyanos 是一个基于 eBPF 的实时网络流量分析工具能以报文级到协议级的粒度透视主机内部网络的出入流量支持 HTTP、Redis、MySQL、Kafka、MongoDB、RocketMQ、DNS 等协议并可直接查看明文请求/响应与内核级延迟细节。本文以官方文档 docs/what-is-kyanos.md 为主体结合仓库源码与 CLI 实现系统讲解 Kyanos 的定位、核心能力、watch/stat/overview 三大命令的用法与底层原理帮助你掌握一条命令定位慢请求的实战方法。Kyanos 是什么Kyanos 是一款网络流量分析器Network Traffic Analyzer提供对主机内部网络从报文级到协议级的实时可见性能够捕获并分析所有进出流量。与传统的 tcpdump、iftop、netstat 等工具相比Kyanos 定位在直接回答问题而不是给你一堆原始报文捕获网络请求如 HTTP、Redis、MySQL、Kafka、MongoDB、RocketMQ 和 DNS 请求分析异常网络问题并快速定位省去抓包、下载、再分析的复杂流程所有结果直接呈现在命令行无需额外的图形化工具。从代码结构看Kyanos 的协议解析能力集中在 agent/protocol 目录其中 protocol.go 定义了统一的ProtocolStreamParser接口与Record请求-响应配对模型各协议通过ParsersMap注册到 bpf/events.go 中声明的协议类型上由内核态 eBPF 探针捕获数据、用户态完成流重组与协议解析。为什么需要 Kyanos传统抓包工具的局限tcpdump 等传统工具的五个痛点难以按协议信息过滤例如 HTTP 协议很难只抓取某个特定 HTTP path 的报文往往需要再用 Wireshark/tshark 做二次过滤。难以按进程/容器过滤当一台机器上部署了多个进程或容器、而只需要抓某个进程/容器的流量时传统工具无从下手。排查效率低典型流程是在生产环境用 tcpdump 抓包生成 pcap 文件再下载到本地用 Wireshark/tshark 分析耗时显著。分析能力有限tcpdump 只提供基础的抓包能力几乎不做高级分析iftop、netstat 等传统监控工具粒度太粗难以定位根因。无法分析加密流量如 SSL/TLS 协议的请求无法以明文查看。Kyanos 提供的五方面能力1. 强大的流量过滤能力不仅支持传统的 IP/端口过滤还支持按进程/容器、L7 协议信息、请求/响应字节大小、延迟等维度过滤# 按 PID 过滤 ./kyanos watch --pids 1234 # 按容器 ID 过滤 ./kyanos watch --container-id abc # 按 Redis key 过滤 ./kyanos watch redis --keys my-key1,my-key2 # 按响应字节大小过滤 ./kyanos watch --resp-size 10000这些过滤参数在 cmd/root.go 中作为持久化 flag 注册如--pids、--container-id、--comm、--remote-ports等意味着它们对watch、stat等所有子命令全局生效协议级过滤如 Redis 的--keys则由各协议子命令解析例如 cmd/watch.go 中列出了http|redis|mysql|rocketmq|mongodb|dns等支持的协议。2. 高级分析能力与 tcpdump 只做细粒度抓包不同Kyanos 支持把抓到的报文指标按多种维度聚合快速给出排障最需要的关键数据。例如当 HTTP 服务带宽突然被打满想快速分析是哪些 IP、哪些请求导致的只需一条命令./kyanos stat http --bigresp即可找出发给各远程 IP 的最大响应字节数并查看具体的请求/响应指标数据。3. 内核级延迟细节可视化现实中的慢查询如访问远程 Redis 很慢往往难以精确定位。Kyanos 提供从请求/响应到达网卡、进入内核 socket 缓冲区的内核 trace 点并以可视化形式展示让你精确判断是哪个阶段导致的延迟。4. 轻量、无依赖几乎零依赖只需一个静态链接的二进制文件加一条命令所有结果都在命令行展示。官方为 amd64 与 arm64 提供静态链接二进制解压即可用见 docs/quickstart.md。5. 自动 SSL 流量解密所有捕获到的请求与响应都以明文形式呈现。这一点对应仓库中的 agent/uprobe 目录与 bpf 下的openssl_*.bpf.c系列探针——Kyanos 通过 uprobe 挂载 OpenSSL 的加解密函数从内存中还原出明文数据而不是破解加密本身。何时使用 Kyanos捕获请求与响应watch 命令watch命令可以按条件过滤并捕获各种流量支持按进程 ID、容器 ID、容器名、Pod 名、IP、端口过滤也支持按协议特定字段如 HTTP path、Redis 命令与 key过滤。支持的协议解析器包括 HTTP、Redis、MySQL、RocketMQ、Kafka、MongoDB 和 DNS。捕获的流量不仅包含请求/响应内容还包含详细的时序信息例如请求从系统调用到网卡的时间、响应从网卡到 socket 缓冲区再到进程的时间。分析异常流量路径stat 命令stat命令支持多维度聚合帮助快速定位异常链路。例如按远程 IP 聚合快速判断哪个远程 IP 更慢同时支持请求-响应延迟、请求-响应大小等多种指标。文档指出借助这些能力可以快速解决 80% 的网络问题。全局依赖分析overview 命令beta当需要了解一台机器依赖哪些外部资源时overview命令可以一条命令捕获该机器依赖的所有外部资源及其延迟。从 cmd/overview.go 源码看它本质上是把聚合维度预设为remote-ip/protocol-adaptive先按远程 IP、再按协议自适应分组的 stat 模式从而给出依赖了谁、每个依赖多慢的整体视图。基本使用示例捕获 HTTP 流量并查看延迟细节./kyanos watch http运行结果捕获 Redis 流量并查看延迟细节./kyanos watch redis运行结果找出最近 5 秒内最慢的请求./kyanos stat --slow --time 5运行结果从源码看 Kyanos 的工作方式协议解析架构在 agent/protocol/protocol.go 中Kyanos 定义了一套统一的协议解析框架ProtocolStreamParser接口包含ParseStream按流解析报文、FindBoundary寻找消息边界、Match把请求流与响应流配成Record三个核心方法Record结构将一条请求和一条响应配对作为 watch 表格中的一行ParsedMessage接口统一表达已解析的请求/响应消息提供格式化输出、时间戳、字节数、序号等能力。common.go中的matchByTimestamp实现了请求-响应配对逻辑按时间戳顺序把早于响应的请求与响应组合成记录。这解释了为什么 watch 结果中每条记录都同时包含请求与响应的完整信息。过滤与指标体系的 CLI 落地cmd/watch.go 注册了--latency、--req-size、--resp-size、--max-records默认 100 条、--max-print-bytes默认 1024 字节截断、--trace-socket-event、--json-output等选项cmd/stat.go 注册了--metric/-mt/total-time、q/reqsize、p/respsize、n/network-time、s/socket-time、i/internal-time、--group-by/-gconn、remote-ip、remote-port、local-port、protocol、http-path、redis-command、none、--slow、--bigreq、--bigresp、--time等选项并在createAnalysisOptions中把指标与分组维度映射到分析器的 MetricTypeSet 与 ClassfierTypeagent/analysis/classfier.go 与 agent/analysis/percentile.go 实现分组聚合与 p50/p90/p99 等百分位统计支撑 stat 表格中的 max、avg、p50 等列。运行前提Kyanos 依赖 eBPF运行需要 root 权限sudo ./kyanos watch内核版本要求详见 docs/quickstart.mdamd643.x 需 3.10.0-957 及以上4.x 需 4.14 及以上5.x、6.x 完全支持arm645.5 及以上。可以使用uname -r查看当前内核版本。安装方式为从 release 页面下载静态链接二进制后解压如tar xvf kyanos_vx.x.x_linux_amd64.tar.gz无需额外依赖。下一步想快速上手全部用法阅读 docs/how-to.mdwatch 命令的完整过滤选项与结果视图说明见 docs/watch.mdstat 命令的指标、分组维度与快捷模式见 docs/stat.md遇到安装或运行问题参考 docs/faq.md了解如何编译构建见 COMPILATION.md 与 Makefile。【免费下载链接】kyanosKyanos is a networking analysis tool using eBPF. It can visualize the time packets spend in the kernel, capture requests/responses, makes troubleshooting more efficient.项目地址: https://gitcode.com/GitHub_Trending/ky/kyanos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表