bpftrace 入门指南:3 步跑通你的第一条内核跟踪脚本
bpftrace 入门指南:3 步跑通你的第一条内核跟踪脚本
【免费下载链接】bpftraceHigh-level tracing language for Linux项目地址: https://gitcode.com/gh_mirrors/bp/bpftrace
项目速览:一句话讲清它凭什么存在
生产环境里出问题时,你往往抓不到第一现场:加日志要重新编译,strace又覆盖不了内核内部。bpftrace 是 Linux 上的 eBPF 跟踪工具,它替内核开发者和运维解决"不改进内核源码、不重启服务,就能看清系统内部发生了什么"的问题。它靠 eBPF(一种让程序安全跑在内核里、不用改内核源码的技术)实现,语法灵感来自 C、awk 和 DTrace,几行脚本就能描述一次跟踪。
记住定位:bpftrace 就是让你在生产机器上"随时可插、拔了无痕"的观测探针。
核心能力:别被名字唬住,它其实就干这几件事
- 全栈动态插桩:一句话——给系统任意环节插探针。场景:用 tracepoint(内核预埋的固定观测点)看系统调用,用
kprobe挂到内核函数,用uprobe挂到用户态程序函数,用profile按周期采样。 - 低开销、可上生产:一句话——开销远低于传统调试器。场景:在跑着业务的服务器上统计
file_write的延迟直方图,不影响主流程。 - 一行式脚本语言:一句话——探针触发后直接写 C 风格逻辑。场景:
execsnoop工具用几十行脚本列出每次进程创建,含命令行和 PID。
记住三件事:插在哪、开销多低、脚本多短。
最快上手:如何安装 bpftrace 并看到第一条输出
三步走:装 → 跑最小示例 → 看输出。
第 1 步:安装。优先用发行版包管理器,最省心:
sudo apt install bpftrace这段在干嘛:一条命令装好 bpftrace 和它依赖的 libbpf(与内核 BPF 子系统交互的库)。Fedora 系用sudo dnf install bpftrace。装完先跑bpftrace --version,确认版本。
第 2 步:跑最小示例。不用建文件,直接执行单行脚本:
bpftrace -e 'BEGIN { printf("hello from bpftrace\n"); exit(); }'这段在干嘛:BEGIN是特殊探针,程序启动时触发;打印一句话后主动退出。终端出现hello from bpftrace就算跑通了。
第 3 步:看真实输出。仓库tools/目录自带标准工具脚本,挑个最直观的:
sudo bpftrace tools/execsnoop.bt这段在干嘛:持续打印每次execve系统调用产生的新进程,含 PID 和完整命令行——这就是你第一条"内核跟踪"。按Ctrl+C退出。
⚠️ 注意:eBPF 跟踪依赖较新内核,建议 5.4 以上;内核 4.x 或缺 BTF 信息时可能直接报错,先
uname -r确认版本。
⚠️ 注意:bpftrace 通常需要
root权限;内核开了 lockdown(机密计算/安全启动限制)时,即使 root 也可能加载失败,报错里会提示lockdown。
记住节奏:装包管理器版本、单行脚本验证、tools/挑现成脚本上真机。
关键模块导读:仓库里哪几个地方值得你花时间
不翻整个目录树,只看这五处:
| 模块路径 | 它负责什么 | 什么时候需要翻它 |
|---|---|---|
src/ | bpftrace 主程序 C++ 源码:解析脚本、编译成 BPF 字节码、挂载探针 | 想知道一条脚本从输入到运行的全过程 |
src/stdlib/ | 内建函数背后的 BPF 辅助程序(字符串、栈、路径等) | 用到str(),kstack()时想看底层实现 |
tools/ | 现成跟踪脚本:execsnoop.bt、biolatency.bt、runqlat.bt | 想找现成方案解决延迟、IO、调度问题 |
docs/language.md | 语言参考:探针写法、内建变量、函数清单 | 查语法、内建函数怎么用 |
tests/runtime/ | 按主题分类的运行时测试脚本 | 想看某功能的真实用法范例 |
记住:tools/学用法,src/懂原理,docs/language.md查语法。
接下来往哪走:官方文档与进阶路线
- 语言与函数全貌:docs/language.md
- 单行式教程:docs/tutorial_one_liners.md
- 标准工具脚本集:tools/
- 贡献与协作流程:CONTRIBUTING.md
下一步建议:先挑一个你业务里的 tracepoint 事件跑通它,再去src/ast/passes/顺着编译管线读一遍代码——搞懂一条脚本如何变成内核里的 BPF 程序,你的进阶路线就通了。
【免费下载链接】bpftraceHigh-level tracing language for Linux项目地址: https://gitcode.com/gh_mirrors/bp/bpftrace
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考