首页 › weekly › 8个开源诊断神器看穿线上故障

概述:这一期,专治「线上出了事但不知道哪里出事」

前几轮我们挖过终端工具、自托管、地图栈,这一期换个更硬核也离生产更近的方向:线上故障诊断与性能剖析。主角是近几年最热的技术底座 eBPF——它让普通工程师在不改代码、不重启服务、不装 SDK 的前提下,看清内核与进程里正在发生什么。本期 8 个仓库里,既有 coroot 这样的开箱即用可观测平台,也有 kyanos、ecapture 这类国人主导的明星项目,还有 ptcpdump、bpftime 两个 Star 不高但极具原创性的小而美。诊断类工具是典型的「平时没人看、出事救命」型资产,二次开发做托管服务或内部平台的商业路径也非常清晰。

注:文中 Star 数为发稿时约数,以仓库主页实时数据为准。


1. coroot — 零侵入的全栈可观测平台

仓库:coroot/coroot | Star 约 6k | 持续更新中

一句话定位:装上就能用、不用埋点的开源 Datadog 平替。它解决的是中小团队最大的可观测性痛点——想上 APM,但业务代码侵入、Agent 配置、按量计费三座山太贵。

核心拆解:coroot 的 Agent 基于 eBPF 自动发现进程、服务与依赖关系,自动画出服务拓扑图;据项目文档,它能识别 MySQL、Redis、Kafka、PostgreSQL 等常见组件并把延迟、错误率映射到拓扑边上,再围绕 SLO(延迟/错误率目标)做告警,出问题时直接在图上标出可疑环节。底层整合了 VictoriaMetrics、ClickHouse 等成熟存储,指标、日志、追踪、甚至持续剖析(profiling)一站式收纳。用 Docker Compose 或 Helm 即可起一套完整环境,对 K8s 集群尤其友好。

上手难度:⭐⭐

适用人群:没有专职 SRE、又被云厂商监控账单刺痛的创业团队;做私有化交付的乙方(客户内网不能出公网,coroot 正好)。商业思路上,它本身就是「开源核心 + 云服务」模式,你可以借鉴其架构做垂直行业的托管监控服务,或给它写国产化数据库适配来接私有化项目。


2. kyanos — 老内核也能用的网络问题显微镜

仓库:hengyetic/kyanos | Star 约 3k | 持续更新中

一句话定位:在内核里「看见」每一个网络请求与响应,并自动归类到进程。它治的是分布式系统最恶心的病:接口偶发超时,但应用日志、网关日志、监控全都说「不怪我」。

核心拆解:kyanos 基于 eBPF 在内核态拦截请求和响应,然后按进程、连接、协议三个维度聚合统计,据 README 它内置了 HTTP、Redis、MySQL 等常用协议解析,能直接告诉你「这条 Redis 慢命令是哪个进程发的、耗时花在哪一段」。另一个杀手锏是兼容性:很多 eBPF 工具要求 5.x 新内核,而 kyanos 宣称支持低至 3.10 的老内核——这意味着 CentOS 7 遍布的传统企业机房也能用。终端 TUI 交互式分析,中文文档完善,国内团队主导。

上手难度:⭐⭐

适用人群:后端工程师、DBA、排查过「Redis 偶尔抖一下」的人。它是国产开源里少见的把「易用性」做到位的底层工具,适合写教程、做内部分享积累影响力,也可作为公司自建网络诊断平台的核心引擎。


3. ptcpdump — 小而美:给 tcpdump 装上「进程透视眼」

仓库:ptcpdump/ptcpdump | Star 约 1k+ | 活跃开发中

一句话定位:tcpdump 的现代继任者,每个数据包都标着「来自哪个进程、哪个容器、哪个 Pod」。

核心拆解:tcpdump 是每个后端都学过的老工具,但它有个致命缺陷:抓出来几百兆 pcap,你却不知道某条连接是容器里哪个进程发起的——在 K8s 环境里这几乎是死刑。ptcpdump 用 eBPF 给抓包结果自动附加进程、容器、K8s 元数据,过滤语法兼容 tcpdump,写惯了 tcpdump -i any port 6379 的人零学习成本迁移;它还支持把带上下文的抓包导出成文件,丢回 Wireshark 继续深挖。一个二进制文件,无守护进程,即下即用,是典型的「解决单一痛点、设计优雅」的小工具。

上手难度:⭐⭐

适用人群:天天和容器网络打交道的人。这种「老工具 + eBPF 增强」的改造思路本身就是极佳的二次开发模板——同样的手法可以套在 strace、iftop 等一批老古董上,每一个都是潜在的明星仓库。


4. ecapture — 不装证书,直接抓 TLS 明文

仓库:gojue/ecapture | Star 约 9k | 持续更新中

一句话定位:无需 CA 证书、无需改配置,抓取 HTTPS/TLS 加密流量的明文。注意定位是安全审计与故障排查,请只用在你有授权的环境。

核心拆解:传统抓 HTTPS 要么给抓包工具装根证书(改系统配置、App 可能证书校验直接失败),要么改代码打日志。ecapture 换了条路:用 eBPF uprobe 挂钩 OpenSSL、BoringSSL、NSS 等加密库的读写函数,据 README 还能拿到 TLS master key 配合 Wireshark 解密,全程对目标进程零改动。它对 Android(arm64)的支持让移动端安全研究、App 逆向分析、兼容性调试效率起飞,这也是它在安全圈快速涨星的原因。项目由国内安全研究员 CFC4N 发起,中英文文档齐全,有配套视频教程。

上手难度:⭐⭐⭐

适用人群:安全工程师、移动端开发、SaaS 风控团队。商业方向:安全评估服务的标准装备,或嵌入企业内部的敏感数据外发检测系统。


5. pwru — 内核丢包案发现场勘查器

仓库:cilium/pwru | Star 约 2k+ | 持续更新中

一句话定位:packet, where are you?——精确回答「这个包在内核哪一步消失了」。

核心拆解:网络包被 iptables 规则丢弃、被 conntrack 拒之门外、被某个内核配置坑掉,这类问题以前只能靠人肉读内核源码加猜。pwru 由 eBPF 阵营的明星团队 Cilium(Isovalent)出品,基于 kprobe 给内核里每一个处理函数挂探针,追踪指定 skb(套接字缓冲区)的完整旅程,输出每一站的行为。社区曾用它定位过多个真实的内核网络 bug(据项目 issue 与社区讨论),它也是 Cilium/eBPF 数据路径开发者的日常调试武器。需要较新内核(建议 5.x 以上),普通业务后端用得少,但一旦遇到「玄学丢包」,它就是唯一的答案。

上手难度:⭐⭐⭐

适用人群:云网络工程师、K8s CNI 插件开发者、内核爱好者。做云网络产品的团队(防火墙、网关、多云互联)可以把它包装进自家的诊断模式,省下大量支持成本。


6. bpftime — 小而美:把 eBPF 搬出内核

仓库:eunomia-bpf/bpftime | Star 约 1k+ | 活跃开发中

一句话定位:一个让 eBPF 程序跑在用户态的运行时,不需要内核配合,速度还更快。这是本期技术上最具原创性的项目。

核心拆解:标准 eBPF 的一切能力都以「内核支持新版本」为前提,老服务器上寸步难行。eunomia-bpf 社区(国内开源团队)做的 bpftime 反其道而行:通过 LD_PRELOAD 把运行时注入目标进程,uprobe 探针直接在用户态处理,据项目宣称比传统内核态 uprobe 快一个数量级,且完全兼容 libbpf 生态——已有的 eBPF 代码基本不用改。这打开了几个脑洞:在没有 eBPF 的老内核上享受 eBPF;把追踪逻辑跑进任何闭源进程;甚至做热修复(hot patch)。学术味与工程味兼备,目前仍是早期项目,值得关注和参与。

上手难度:⭐⭐⭐⭐

适用人群:基础设施工程师、APM 厂商研发。商业潜力在于它可能是下一代 APM Agent 的地基——「零内核依赖的性能剖析」是所有云厂商都想要的。


7. bpftrace — 内核追踪界的「瑞士军刀」

仓库:bpftrace/bpftrace | Star 约 8k | 持续更新中

一句话定位:用一行脚本回答「内核这 1 秒到底在干什么」,业界最老牌的 eBPF 高层追踪语言。

核心拆解:如果前面几个工具是「专用相机」,bpftrace 就是「通用底片」:它提供类 awk 的高层语言,一行 kprobe:vfs_read { @[comm] = count(); } 就能统计谁在读文件、读了多少次,编译成 BPF 字节码后由 LLVM 后端 JIT 执行,性能开销极低。它是 Netflix 等大厂性能工程体系(Brendan Gregg 那一套《BPF Performance Tools》方法论)的核心组件,官方 one-liner 教程一晚上就能上手。学它不是学一个工具,而是掌握一种「对操作系统做实验」的能力——前面所有工具遇到覆盖不到的场景,最终都得靠 bpftrace 兜底。

上手难度:⭐⭐⭐⭐

适用人群:SRE、性能工程师、想深入 Linux 内核的开发者。配套的培训、排障咨询在企业市场是真实付费场景。


8. py-spy — 一行命令给 Python 进程拍 X 光

仓库:benfred/py-spy | Star 约 12k | 持续更新中

一句话定位:不改一行代码、不重启进程,实时看清 Python 程序卡在哪。

核心拆解:Python 服务「莫名卡死」是最常见的工单类型。传统 profiler(cProfile)要改代码、重跑、开销大,线上根本不敢用。py-spy 是采样式剖析器:直接附着到运行中的进程,py-spy top 像看任务管理器一样实时看最热的函数栈;py-spy record 一条命令生成火焰图(flamegraph / speedscope 格式);py-spy dump 秒回「进程现在卡在哪一行」——查死锁神器。GIL 释放、子进程、多线程都处理得当,pip install 即得,是这 8 个项目里上手成本最低的一个。它虽不走 eBPF 路线,但和本期工具组合食用效果最佳:py-spy 看应用栈,bpftrace 看内核,两边对账。

上手难度:⭐

适用人群:所有写 Python 的人。商业化参照系是 Pyroscope(持续剖析,已被收购)——把 py-spy 的思路做成常驻剖析 + SaaS 展示,就是一条被验证过的路。


横向对比

仓库 类型 Star(约) 上手难度 适用场景
coroot 全栈可观测平台 6k ⭐⭐ 团队级监控替代 Datadog
kyanos 网络请求观测 3k ⭐⭐ 接口超时、老内核服务器
ptcpdump 抓包增强 1k+ ⭐⭐ 容器/K8s 网络抓包
ecapture 加密流量审计 9k ⭐⭐⭐ 安全审计、移动端调试
pwru 内核追包 2k+ ⭐⭐⭐ 玄学丢包定位
bpftime 用户态 eBPF 运行时 1k+ ⭐⭐⭐⭐ 老内核、APM 底座研发
bpftrace 内核追踪语言 8k ⭐⭐⭐⭐ 深度性能分析
py-spy Python 剖析器 12k ⭐ Python 卡顿/死锁

一张图看懂:故障现场怎么选工具

flowchart TD
    A["线上故障现场"] --> B["先看全局"]
    A --> C["怀疑网络"]
    A --> D["怀疑代码"]
    B --> E["coroot 自动拓扑体检"]
    C --> F["包在哪一步丢了"]
    C --> G["这条连接是谁发的"]
    F --> H["pwru 内核级追包"]
    G --> I["ptcpdump 带进程抓包"]
    C --> J["要审计加密流量"]
    J --> K["ecapture 无证书抓明文"]
    D --> L["Python 进程卡顿"]
    D --> M["内核行为看不懂"]
    L --> N["py-spy 采样火焰图"]
    M --> O["bpftrace 一行脚本"]
    O --> P["bpftime 用户态扩展"]

本期之最

参考来源

  1. coroot/coroot — coroot 官方仓库,架构与功能以项目 README 为准
  2. hengyetic/kyanos — kyanos 官方仓库,含内核兼容性与协议支持说明
  3. gojue/ecapture — ecapture 官方仓库,含使用场景与 Android 支持说明
  4. cilium/pwru — pwru 官方仓库,含典型调试案例
  5. eunomia-bpf/bpftime — bpftime 官方仓库,含性能宣称与兼容性说明

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入