分类 系统 中的文章

eBPF的 http跟踪

围绕“怎么实际跟踪 HTTP/HTTPS”给出两条可落地路径,重点包括:

  • HTTP:基于 socket filter 在网络层筛选 IP/TCP/80 端口流量,解析 HTTP payload,并通过 ring buffer 把结果送到用户态
  • HTTPS:通过 uprobe/uretprobe 挂到 OpenSSL 的读写路径,在加解密前后抓取明文数据,绕开 TLS 在线路上不可见的问题
  • 工程上把 头文件定义、内核态 BPF 程序、用户态 libbpf 程序、skeleton 生成、编译运行 串成完整链路,方便照着复现
  • 最终形成一个很清楚的认知:HTTP 更像包级别观测,HTTPS 更像函数级别观测,两者抓取点和代价完全不同

阅读全文

bpftrace 12个小命令

用 12 个小命令把 bpftrace 最常见的能力快速过一遍,重点包括:

  • Listing ProbesHello World 这种最基础的例子入手,先建立对 probe 类型和脚本执行方式的直觉
  • 再覆盖 文件打开、系统调用计数、read() 大小分布、读调用时延、进程级事件统计 这些日常排障里最常见的观测场景
  • 往后扩展到 On-CPU 内核栈、调度、块 I/O、内核结构体访问,理解 bpftrace 不只是打印日志,而是能直接做内核级分析
  • 每个例子都保持单行程序风格,适合拿来即跑,也适合作为后续写复杂脚本前的最小模板
23.jpg

阅读全文

eBPF 总结 2

这篇延续上一篇的思路,但不再停留在概念层,而是按资源类型把 eBPF 的观测问题拆开来看,重点包括:

  • CPU、内存、文件系统、磁盘、网络、安全 六个方向分别整理“能观测什么、该挂什么事件、常用什么工具”
  • 系统调用、kprobe/uprobe、tracepoint、PMC、软中断、运行队列、文件系统事件、块层事件、网络栈事件 这些观测入口挂到具体问题上
  • 中间穿插 bpftrace 单行程序 和更实用的分析思路,方便把理论直接落到机器排障
  • 整体目标不是记命令,而是形成一张“遇到某类性能问题时,先看哪些指标、再挂哪些点”的路线图
3.jpg

阅读全文

eBPF 总结

eBPF 的总览导图,不是直接上代码,而是先把“为什么要观测、观测什么、用什么工具、落在哪些场景”讲清楚,重点包括:

  • 业务负载画像、延迟/速率/利用率/成本、下钻分析、USE 方法 这些基础方法论入手,建立一套统一的排障视角
  • 再整理 BCC 工具、bpftrace、编程语言生态,帮助区分不同层级的 eBPF 工具链分别适合什么事情
  • 往后扩展到 应用程序、内核、容器、虚拟机、监控 等落地场景,理解 eBPF 为什么能成为统一观测底座
  • 整体适合作为后面几篇更细分文章的索引页,先看全景,再按 CPU、网络、存储等专题继续深入
2025\06\bpf\20.jpg 21.jpg 22.jpg 23.jpg

阅读全文

eBPF 资源

eBPF生态里值得长期跟踪的项目和资料归到一处,重点包括:

  • 先看 BCC、bpftrace 这类最常见的开源框架和现成工具,建立对“能直接拿来用什么”的认识
  • 再整理 Go 与 Rust 的 eBPF 开发库,方便在做工程选型时快速判断依赖、能力边界和适用场景
  • 应用层面覆盖 Cilium、Falco、Katran、Calico、Tracee、KubeArmor、Pixie、kubectl-trace、L3AF 等代表项目
  • 最后补充 eBPF 资源CO-RE 学习材料,方便从资料入口继续深入
https://www.brendangregg.com/Perf/bcc_tracing_tools.png https://www.brendangregg.com/BPF/bpftrace_tools_early2019.png

阅读全文

eBPF 容器

eBPF 放到容器运行时场景里看,包括:

  • 先从 命名空间、cgroups、Capabilities 这些容器隔离基础说起,理解 eBPF 为什么适合做运行时安全监控和控制
  • 重点对比 Falco、Tracee、AppArmor、Seccomp 这几类方案,区分谁是基于 eBPF 的行为观测,谁是基于 LSM/系统调用过滤的预防性控制
  • 异常文件访问、特权升级、恶意系统调用、容器逃逸尝试 这些安全问题挂到具体工具和技术实现上
  • 最后通过实验部分,把“概念上的安全能力”落到机器上的实际观测与验证流程

阅读全文

eBPF 网络

包括:

  • 先比较 XDP、TC、socket、cgroup 四类程序的挂载位置、触发时机、可见数据、复杂度和时延差异
  • 再从这些程序类型出发,分析 防火墙、DDoS 防护、四层负载均衡、网络策略、socket 重定向 等常见用途为什么适合落在不同层
  • 中间补充 网络问题排查 的思路,帮助把 eBPF 和传统抓包、连接观测、延迟分析结合起来
  • 后面再落到两个更具体的实现方向:基于 socket 的负载均衡XDP 转发,理解高性能路径和通用路径分别怎么选
2025\06\bpf\16.jpg

阅读全文

eBPF 用户态跟踪

包括:

  • 先从 DWARF 调试信息 讲起,说明为什么跟踪用户态程序时,二进制符号、行号和类型信息会变得非常重要
  • 再通过例子把 uprobes/uretprobes 的基本工作方式串起来,建立对函数入口、返回值和参数抓取的直觉
  • 后面按 编译型语言、解释型语言、即时编译型语言 分别展开,理解不同运行时下观测难点为什么不一样
  • 整体目标是回答一个核心问题:用户态跟踪并不只是“换个挂点”,而是要同时理解程序语言、编译产物和运行时模型

阅读全文

eBPF 内核跟踪

顺着“如何跟踪内核”这条线把工具和入口组织起来,包括:

  • 先看 /proc/kallsyms、DebugFS、tracepoint 格式、perf list 这些基础信息源,理解内核里到底有哪些可挂载的位置
  • 再比较 bpftrace、BCC、libbpf 三种不同层级的工具链,区分它们在易用性、灵活性和工程化上的差异
  • 中间会把 系统调用、内核函数、跟踪点 这些入口和实际例子串起来,帮助建立从“找点”到“采集数据”的完整链路
  • 整体目标是形成一个实用认知:内核跟踪的第一步不是写程序,而是先知道该去哪找符号、参数格式和稳定入口
2025\06\bpf\14.jpg 2025\06\bpf\15.jpg 2025\06\bpf\9.jpg 2025\06\bpf\10.jpg 2025\06\bpf\11.jpg 2025\06\bpf\12.jpg 2025\06\bpf\13.jpg

阅读全文

eBPF hello-world

借这hello world最小例子把 eBPF 的整条入门路径串起来,重点包括:

  • 先从 BPF 到 eBPF 的背景和基本执行模型说起,理解为什么它会从包过滤扩展成内核顶级子系统
  • 再用 Python + BCCC 代码执行 两条路径跑通 hello-world,帮助建立从“写代码”到“内核里跑起来”的直觉
  • 中间系统整理 执行过程、指令、bpf 系统调用、辅助函数、映射、类型格式,把平时容易分散记忆的概念串到一起
  • 最后补充 跟踪类、网络类、其他类 eBPF 程序 的分类,让 hello-world 不只停留在例子本身,而是成为后续深入学习的入口
+2

阅读全文

最近文章

分类

归档

标签

RSS