跳到主要内容
项目档案命令行工具

bpftrace 中文使用指南:基于 eBPF 的 Linux 高级系统追踪工具安装与脚本编写教程

bpftrace 是基于 eBPF 的 Linux 系统追踪工具,提供简洁的类 awk 脚本语言,用于高效性能分析、调试和监控。本文详细介绍其核心功能、适用场景、安装方法(包管理器/源码编译)、基本使用方式及技术架构,并指向完整文档资源,帮助开发者快速掌握这一低开销观测工具。

10,329C++Star 于 2026年4月1日2026年9月18日 更新

AI 总结

bpftrace 是基于 eBPF 的 Linux 系统追踪工具,提供简洁的类 awk 脚本语言,用于高效、低开销的性能分析、调试和监控,无需修改内核或应用代码。

中文项目介绍

bpftrace 是一个基于 eBPF 的 Linux 系统追踪工具和高级脚本语言,旨在提供强大、高效且开销极小的系统观测能力。它解决了传统 Linux 追踪工具(如 strace、perf)语法复杂、使用门槛高的问题,通过简洁的类 awk/C 语法,使用户能够快速编写追踪脚本,无需修改内核或应用程序代码。 该项目适用于多种场景:性能分析(如 I/O 延迟、网络连接、CPU 调度)、运行时调试(跟踪函数调用、系统调用、内核事件)、安全监控(检测异常行为、权限变更)以及故障排查(资源使用分析、瓶颈定位)。其核心技术基于 eBPF(扩展伯克利包过滤器),利用 Linux 内核内置的虚拟机实现安全、高效的运行时程序注入。 在技术实现上,bpftrace 使用 LLVM 作为编译器后端,将高级脚本编译为 eBPF 字节码;通过 libbpf 库与内核 BPF 子系统交互,支持 kprobes、uprobes、tracepoints、USDT 等多种探针类型;运行时引擎负责事件处理、数据聚合和输出格式化。项目提供丰富的标准库函数(如 @count、@hist)和内置变量(如 comm、pid),并包含大量实用工具脚本(tools/ 目录),配套完整文档(教程、参考指南、开发者指南)和跨平台包支持。

详细信息与使用说明

1. 项目概述

bpftrace 是基于 eBPF 的 Linux 系统追踪工具和高级脚本语言,由 bpftrace 社区维护。它提供简洁的类 awk/C 语法,允许用户编写单行或脚本形式的追踪程序,用于实时观测系统行为。项目官网为 bpftrace.org,包含完整教程、文档和交互式实验。作为开源项目(Apache 2.0 许可),它已被多个 Linux 发行版收录为官方包,并持续集成测试确保质量。

2. 核心价值

传统 Linux 追踪工具如 strace、perf 往往语法复杂、学习曲线陡峭,且部分工具需要修改内核或应用代码。bpftrace 通过 eBPF 技术实现安全的内核态程序注入,无需任何代码修改即可动态追踪内核和用户空间事件。其高级抽象大幅降低了使用门槛,同时保持极低的运行时开销(通常<5%),适合生产环境长期部署。此外,丰富的内置函数和聚合操作(如直方图、计数)使数据收集和分析更加便捷。

3. 典型应用

bpftrace 广泛适用于性能分析、调试、安全监控和故障排查场景。性能分析师可用它测量 I/O 延迟(biolatency.bt)、网络连接时间(tcpconnect.bt)或 CPU 调度延迟(runqlat.bt);开发者可跟踪系统调用(execsnoop.bt)、函数调用(opensnoop.bt)或内核事件;安全团队可监控权限变更(capable.bt)或异常进程行为;运维人员可通过资源使用统计(loads.bt、oomkill.bt)快速定位瓶颈。工具目录(tools/)提供了 20+ 个开箱即用的示例脚本。

4. 安装指南

最简安装方式是通过系统包管理器:Ubuntu/Debian 执行 `sudo apt install bpftrace`,Fedora 使用 `sudo dnf install bpftrace`。各发行版版本信息见 README 表格。若需最新功能或自定义构建,可从源码编译:参考 docs/developers.md 的构建指南,确保系统已安装 LLVM(支持最新版及前 4 个版本)、libbpf、CMake 等依赖。项目还提供 Docker 镜像(docker/ 目录)和 Nix flakes 配置(flake.nix)用于容器化或声明式环境。注意:运行需 Linux 内核 5.15+ 并启用特定 BPF 配置(见 docs/dependency_support.md)。

5. 快速上手

基础用法:`bpftrace -e 'probe { action }'` 执行单行脚本,或 `bpftrace script.bt` 运行文件。常用命令:`bpftrace -l` 列出所有可用探针(支持通配符),`bpftrace -d` 仅编译不运行(用于调试)。脚本结构包括探针声明(如 `tracepoint:syscalls:sys_enter_openat`)和动作块(如 `{ printf("%s\n", args.filename); }`),支持谓词过滤(`/condition/`)和聚合映射(`@[comm] = count()`)。详细语法参考 docs/language.md,一 liner 教程见 docs/tutorial_one_liners.md。

6. 技术架构

bpftrace 采用分层架构:语言前端解析脚本,进行语义分析和类型检查,构建抽象语法树(AST);LLVM 后端将 AST 编译为 LLVM IR,再生成 eBPF 字节码;libbpf 交互层封装内核 BPF 子系统操作,包括程序加载、探针附加、映射管理及事件输出;运行时引擎管理事件循环、信号处理(如 Ctrl-C)和资源清理;标准库提供内置函数(str()、hist())和特殊变量(pid、comm)。项目严格遵循编码规范(docs/coding_guidelines.md),使用 C++17 编写,并通过 CI 确保跨平台兼容性。

思维导图

bpftrace
核心功能
高级追踪语言
eBPF 程序编译
内核/用户态探针
实时数据聚合
低开销观测
技术栈
LLVM 编译器后端
libbpf 内核交互
C++17 实现
CMake 构建系统
eBPF 虚拟机
探针类型
kprobes / uprobes
tracepoints
USDT
perf events
fentry/fexit
工具生态
tools/ 示例脚本
man/ 手册页
Docker 镜像
Nix flakes 配置
文档资源
语言规范 (language.md)
教程 (tutorial_one_liners.md)
开发者指南 (developers.md)
内部设计 (internals_development.md)
标准库 (stdlib.md)
构建与依赖
Linux 内核 5.15+
LLVM 最新版及前4版
libbpf 库
包管理器支持
源码构建指南

常见问题

bpftrace 是什么?用于什么场景?

bpftrace 是基于 eBPF 的 Linux 系统追踪工具,提供高级脚本语言,用于性能分析、运行时调试、安全监控和故障排查,无需修改内核或应用代码。

如何安装 bpftrace?

推荐通过包管理器安装:Ubuntu/Debian 使用 `sudo apt install bpftrace`,Fedora 使用 `sudo dnf install bpftrace`。也可从源码构建,需满足 LLVM、libbpf 等依赖,详见 docs/developers.md。

bpftrace 支持哪些探针类型?

支持 kprobes、uprobes、tracepoints(常规和原始)、USDT、perf events(硬件和软件)、fentry/fexit 等,通过 libbpf 与内核 BPF 子系统交互,详见 docs/language.md。

运行 bpftrace 需要什么内核版本?

最低需 Linux 内核 5.15,且需启用特定 BPF 配置(如 CONFIG_BPF=y、CONFIG_DEBUG_FS=y 等)。可通过 scripts/check_kernel_features 脚本验证。旧内核建议使用旧版 bpftrace。

bpftrace 脚本语法有什么特点?

语法灵感来自 awk 和 C,结构包括探针声明和动作块,支持谓词过滤、参数访问(argN/args)、聚合映射(@count、@hist)等。教程见 docs/tutorial_one_liners.md,完整规范见 docs/language.md。