BCC介绍

BCC(BPF Compiler Collection)是一个基于 eBPF 的强大工具集,方便开发者在 Linux 上编写、加载和运行 eBPF 程序。它广泛用于性能分析、故障排查和安全监控领域。本文将带你快速了解 BCC 的基本使用方法。


1. BCC 简介

BCC 提供了丰富的工具库和 Python/C++ API,使得用户可以用高级语言编写 eBPF 程序并在内核态运行。常见的 BCC 工具包括 execsnoopopensnooptcpconnect 等。


2. 安装 BCC

以 Ubuntu 为例:

sudo apt update
sudo apt install bpfcc-tools linux-headers-$(uname -r) python3-bcc

或使用源码安装(适用于其他发行版或获取最新版):

git clone https://github.com/iovisor/bcc.git
cd bcc
mkdir build; cd build
cmake ..
make
sudo make install

3. BCC 常用工具

3.1 查看有哪些工具

ls /usr/share/bcc/tools

3.2 示例:追踪新进程的创建

sudo /usr/share/bcc/tools/execsnoop

3.3 示例:追踪文件打开

sudo /usr/share/bcc/tools/opensnoop

3.4 示例:追踪 TCP 连接

sudo /usr/share/bcc/tools/tcpconnect

4. 用 Python 编写自定义 BCC 脚本

示例:统计每秒创建的进程数

from bcc import BPF
import time

program = """
int count_exec(struct pt_regs *ctx) {
    bpf_trace_printk("exec() called\\n");
    return 0;
}
"""

b = BPF(text=program)
b.attach_kprobe(event="sys_execve", fn_name="count_exec")

print("Tracing execve()... Hit Ctrl-C to end.")
while True:
    try:
        (task, pid, cpu, flags, ts, msg) = b.trace_fields()
        print(f"{ts}: {msg}")
    except KeyboardInterrupt:
        exit()

保存为 exec_count.py,执行:

sudo python3 exec_count.py

5. 常见问题

  • 需 root 权限运行
  • 内核需支持 eBPF(4.1 及以上较好)
  • 某些工具依赖对应内核版本的 headers

6. 参考资料