Cloudflare 平台重塑(四):eBPF 带来的可观测性、运维与可靠性提升
在第 3 部分中,我们介绍了构建 Cloudflare 基于 eBPF 的网络数据路径所需的架构转变与上游合入工作。这些代码一旦合入,把数据路径移入内核就改变了运维边界。当每秒数百万个报文在驱动中经由 XDP 被直接丢弃、 …
在第 3 部分中,我们介绍了构建 Cloudflare 基于 eBPF 的网络数据路径所需的架构转变与上游合入工作。这些代码一旦合入,把数据路径移入内核就改变了运维边界。当每秒数百万个报文在驱动中经由 XDP 被直接丢弃、 …
想给每一个系统调用都挂上延时统计时,过去常见两条路:要么写几百份几乎一样的 BPF 程序,要么退回 kprobe 多重挂接——安装灵活,但热路径往往更贵。Jiri Olsa 推动的 tracing_multi 改变了这件事:一条程序、 …
写一个能在本机加载的 eBPF 程序并不难;难的是让它在多发行版、多架构、多内核版本上长期可用。2026 年 6 月,开发者 kxxt 以开源工具 tracexec 的 eBPF 后端为样本,系统整理了维护负担与工程对策。下文按问题域、案例 …
本文针对零侵入主动性能数据探测工具 xstack 的构建、使用、原理和源码实现进行了整体介绍,在高版本内核中如有类似场景的需求,可直接使用或定制,该工具代码相对简单清晰,也可作为我们学习编写 eBPF 工具的参考样例。
如你构建系统或运维集群时,频繁遇到代理 (agent)、iptables 或内核模块的各种限制,那么 eBPF 正是你一直在寻找的更安全、更快、更具动态性的技术选择。eBPF 允许你在 Linux 内核中运行小型且经安全验证的程序,实现运 …
本文我会从 MCP 重要性,使用 eBPF 监控 MCP 原因,MCPSpy 建议版本实现,以及存在的限制方面进行介绍。未来的章节将探讨例如通过 TLS 检查基于 HTTPS 的加密 MCP 通信等其他功能。首先,让我们先从 MCP …
uprobes 让我们能够将 eBPF 程序附着到用户空间二进制文件中的函数。这种方式为 Go 等语言编写的现代应用程序提供了强大的可观测性能力。特别是,我们将探讨如何通过将 uprobes 附加到标准库函数( …
虽然与 XDP 或 Tracepoints 等其他 eBPF 程序类型相比,Kprobes 和 Kretprobes 通常具有更高的开销,但它们的多功能性使其变得不可或缺。它们几乎可以附加到任何内核函数,从而能够深入了解系统行为 — 这也是 …
当想要追踪进程的权能是如何变化,如何传递的时候,传统工具几乎没有办法做到。已知权能的修改一定是通过系统调用触发的,无论是 execve 执行别的程序,还是 setuid 切换用户的时候,毕竟 linux 中应用层与内核的交互几乎都是系统调 …
本文就 Linux Trace 跟踪过程中的主要 Hook 点给出了简单介绍,然后重点介绍了 rawtracepoint 类型出现的背景,性能测试说明,并通过 libbpf 和 bpftrace 分别基于 task_rename 给出了完 …
想想看,当我们用 kprobe 为一个内核函数注册了 probe 之后,怎样能看到对应内核函数的第一条指令被替换了呢?
最近在生产环境中遇到了几次创建容器过程中遇到 no space left on device 的报错,但是经过排查磁盘使用空间和 inode 使用量都有大量的剩余。那么这个报错究竟是怎么导致的呢,我们如何快速定位到问题产生的根源呢? 本文是 …
如果你只是需要快速使用工具来进行问题排查,包括但不限于函数调用栈跟踪、函数调用子函数流程、函数返回结果,那么推荐你直接使用 Brendan Gregg 封装的 perf-tools工具即可,本文尝试从手工操作 Ftrace 跟踪工具的方式展 …
本文主要对 eBPF 程序跟踪 Go 程序的函数调用、Go 函数调用参数等方面进行介绍, 而且还基于 bpf_probe_write_user 函数对跟踪 Go 语言函数进行修改的样例。本文涉及的完整环境搭建,请参环境准备篇。
本篇文章是我正在进行的关于 BPF 攻防系列的一部分,用于学习 BPF 以了解相关的攻击和防御,并通过 bpftrace 工具提供了一个基于源 IP 地址和端口触发的恶意程序
在近几年来,eBPF 在 Linux 社区和之外得到了越来越多的关注。eBPF 在攻击场景中的使用也逐渐引起大家的关注。因此,我决定从红队的角度进入深入探讨,以让大家对此有个整体的认识,以下系列文章则是对于这个历程的分享。
公有云网络问题,是一个老生常谈的事情了。今天主要简单说明下,在内网环境下去分析 & 定位这个问题。也并不是一开始就需要 eBPF 加持的,可以从简单的基础工具到监控配合去相关比较快速的定位问题,解决问题。 …
到目前为止,我们故意避免深入讨论用户空间跟踪,因为它值得特别对待,因此我们在第 5 部分中专门讨论。首先,我们将讨论为什么使用,然后我们将 eBPF 用户跟踪分为静态和动态两类分别讨论。
本文对于 netfilter 实现机制和 iptables 使用进行了完整的分析,最后使用 ebpf 的 kprobe 和 kreprobe 对于 netfilter 中的 hook 点底层调用函数 ipt_do_table 进行跟踪。
本文介绍了 pstack 打印程序运行堆栈,golang 中如何输出 goroutine 堆栈和如何使用 sysrq 输出系统运行的线程堆栈;同时对于函数级别的调用栈和子函数调用工具也给出了介绍
本文采用 tracepoint 的方式实现了 open 系统调用的跟踪,从而提升了跟踪程序的可移植性,同时基于 BPF 调试参数对于 BCC 宏 TRACEPOINT_PROBE 实现中的 args 参数的定义给出了说明;文中给出了完整的实 …
本文在使用 perf_event 跟踪 sys_open 的基础上,使用 kretprobe 机制实现了函数结果返回值的跟踪。由于入口与出口跟踪是两种机制,需要在两个函数中实现。 …
本文中我们将使用更加高效且提供隔离功能的 BPF_PERF_OUTPUT 机制来实现数据的传递,并对上篇文章中的代码进行改造,对于核心代码逻辑进行详细讲解
本文主要用于演示基于 ebpf 技术来实现对于系统调用跟踪和特定条件过滤,实现基于 [BCC](https://github.com/iovisor/bcc/) 的 Python 前端绑定,过程中对于代码的实现进行了详细的解释, …