1. 项目概述
bpftrace 是基于 eBPF 的 Linux 系统追踪工具和高级脚本语言,由 bpftrace 社区维护。它提供简洁的类 awk/C 语法,允许用户编写单行或脚本形式的追踪程序,用于实时观测系统行为。项目官网为 bpftrace.org,包含完整教程、文档和交互式实验。作为开源项目(Apache 2.0 许可),它已被多个 Linux 发行版收录为官方包,并持续集成测试确保质量。
bpftrace 是基于 eBPF 的 Linux 系统追踪工具,提供简洁的类 awk 脚本语言,用于高效性能分析、调试和监控。本文详细介绍其核心功能、适用场景、安装方法(包管理器/源码编译)、基本使用方式及技术架构,并指向完整文档资源,帮助开发者快速掌握这一低开销观测工具。
bpftrace 是基于 eBPF 的 Linux 系统追踪工具,提供简洁的类 awk 脚本语言,用于高效、低开销的性能分析、调试和监控,无需修改内核或应用代码。
bpftrace 是基于 eBPF 的 Linux 系统追踪工具和高级脚本语言,由 bpftrace 社区维护。它提供简洁的类 awk/C 语法,允许用户编写单行或脚本形式的追踪程序,用于实时观测系统行为。项目官网为 bpftrace.org,包含完整教程、文档和交互式实验。作为开源项目(Apache 2.0 许可),它已被多个 Linux 发行版收录为官方包,并持续集成测试确保质量。
传统 Linux 追踪工具如 strace、perf 往往语法复杂、学习曲线陡峭,且部分工具需要修改内核或应用代码。bpftrace 通过 eBPF 技术实现安全的内核态程序注入,无需任何代码修改即可动态追踪内核和用户空间事件。其高级抽象大幅降低了使用门槛,同时保持极低的运行时开销(通常<5%),适合生产环境长期部署。此外,丰富的内置函数和聚合操作(如直方图、计数)使数据收集和分析更加便捷。
bpftrace 广泛适用于性能分析、调试、安全监控和故障排查场景。性能分析师可用它测量 I/O 延迟(biolatency.bt)、网络连接时间(tcpconnect.bt)或 CPU 调度延迟(runqlat.bt);开发者可跟踪系统调用(execsnoop.bt)、函数调用(opensnoop.bt)或内核事件;安全团队可监控权限变更(capable.bt)或异常进程行为;运维人员可通过资源使用统计(loads.bt、oomkill.bt)快速定位瓶颈。工具目录(tools/)提供了 20+ 个开箱即用的示例脚本。
最简安装方式是通过系统包管理器: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)。
基础用法:`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。
bpftrace 采用分层架构:语言前端解析脚本,进行语义分析和类型检查,构建抽象语法树(AST);LLVM 后端将 AST 编译为 LLVM IR,再生成 eBPF 字节码;libbpf 交互层封装内核 BPF 子系统操作,包括程序加载、探针附加、映射管理及事件输出;运行时引擎管理事件循环、信号处理(如 Ctrl-C)和资源清理;标准库提供内置函数(str()、hist())和特殊变量(pid、comm)。项目严格遵循编码规范(docs/coding_guidelines.md),使用 C++17 编写,并通过 CI 确保跨平台兼容性。
bpftrace 是基于 eBPF 的 Linux 系统追踪工具,提供高级脚本语言,用于性能分析、运行时调试、安全监控和故障排查,无需修改内核或应用代码。
推荐通过包管理器安装:Ubuntu/Debian 使用 `sudo apt install bpftrace`,Fedora 使用 `sudo dnf install bpftrace`。也可从源码构建,需满足 LLVM、libbpf 等依赖,详见 docs/developers.md。
支持 kprobes、uprobes、tracepoints(常规和原始)、USDT、perf events(硬件和软件)、fentry/fexit 等,通过 libbpf 与内核 BPF 子系统交互,详见 docs/language.md。
最低需 Linux 内核 5.15,且需启用特定 BPF 配置(如 CONFIG_BPF=y、CONFIG_DEBUG_FS=y 等)。可通过 scripts/check_kernel_features 脚本验证。旧内核建议使用旧版 bpftrace。
语法灵感来自 awk 和 C,结构包括探针声明和动作块,支持谓词过滤、参数访问(argN/args)、聚合映射(@count、@hist)等。教程见 docs/tutorial_one_liners.md,完整规范见 docs/language.md。