基于 eBPF 的高级追踪语言,用于内核/用户态动态观测
bpftrace 用简洁的脚本语言编写 eBPF 程序,支持 tracepoint、kprobe、uprobe、profile、interval 等探针,适合临时排查延迟、系统调用、函数参数和内核事件。
bpftrace -l 'tracepoint:syscalls:*' | head
bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s %s\n", comm, str(args->filename)); }'
bpftrace -e 'profile:hz:99 { @[comm] = count(); }'
bpftrace -e 'kprobe:vfs_read { @bytes = hist(arg2); }'
CAP_BPF/CAP_SYS_ADMIN;容器里通常受限。profile:hz:99 是全系统采样;范围越大开销越高,先缩小到 PID/CPU。str()/strncpy(),直接当字符串可能读到内核地址。bpftrace -l 列出探针;不同内核/架构可用探针不同。