eunomia-bpf:简化并增强eBPF,支持CO-RE1和WebAssembly2
一个帮助你更容易构建和分发eBPF程序的编译器和运行时框架。
简介
eunomia-bpf是一个动态加载库/运行时以及一个编译工具链框架,旨在帮助您更容易地构建和分发eBPF程序。
有了eunnomia-bpf,您可以:
- 简化
编写eBPF 程序的库: - 简化构建 CO-RE 1
libbpfeBPF应用程序:仅编写 eBPF 内核代码,并通过perf event或ring buffer自动暴露您的数据从内核。 - 自动采样数据 从哈希映射并在用户空间打印直方图。
- 自动生成 并配置 eBPF 程序的
命令行参数。 - 您可以同时以
BCC或libbpf的方式编写内核部分。 - 使用
Wasm2 构建eBPF程序:参见Wasm-bpf项目 - 运行时,库和工具链可以用 C/C++、Rust、Go 等以 Wasm 编写 eBPF,涵盖从
跟踪、网络、安全的使用场景。 - 简化eBPF程序的
分发: - 一个工具用于推送、拉取和运行预编译的eBPF程序作为Wasm模块的
OCI镜像。 - 以
1行 bash从云端或URL运行eBPF程序,无需重新编译,独立于内核版本和架构。 - 使用
JSON配置文件或Wasm模块动态加载 eBPF 程序。
更多信息,请参见documents/introduction.md。
开始使用
- Github模板:eunomia-bpf/eunomia-template
- 示例bpf程序:examples/bpftools
- 教程:eunomia-bpf/bpf-developer-tutorial
作为 CLI 工具运行
您可以通过以下方式从 GitHub Pages URL 或 OCI 仓库运行预编译的 eBPF 程序到内核,只需1行 bash 命令:
# 下载最新发布版本(`aka.pw/bpf-ecli` 会重定向到当前 GitHub Release 资产)
$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli
$ sudo ./ecli https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/package.json # 历史上的 GitHub Pages 用法,继续保留兼容
$ sudo ./ecli run ghcr.io/eunomia-bpf/execve:latest # 从 OCI 仓库运行一个预编译的 ebpf 工具
[79130] node -> /bin/sh -c which ps
[79131] sh -> which ps
[79132] node -> /bin/sh -c /usr/bin/ps -ax -o pid=,ppid=,pcpu=,pmem=,c
[79133] sh -> /usr/bin/ps -ax -o pid=,ppid=,pcpu=,pmem=,command=
[79134] node -> /bin/sh -c "/home/yunwei/.vscode-server/bin/2ccd690cbf
[79135] sh -> /home/yunwei/.vscode-server/bin/2ccd690cbff 78132 79119 79120 79121
[79136] cpuUsage.sh -> sed -n s/^cpu\\s//p /proc/stat
为了降低维护复杂度,主分支已经移除了旧的远程 HTTP 模式(ecli client / ecli-server)。最后一版实现保留在 archive/ecli-remote-http 分支中;参见旧模式说明。
安装项目
-
安装
ecli工具以从云端运行eBPF程序:$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli $ ./ecli -h ecli 子命令,包括 run、push、pull 用法: ecli [COMMAND_LINE]... [COMMAND] 命令: run 运行ebpf程序 push 将镜像推送到注册表 pull 从注册表拉取镜像 help 打印此消息或给定子命令的帮助 参数: [COMMAND_LINE]... 不推荐使用。仅用于兼容旧版本。要运行的命令行;可执行对象可以是本地路径、URL 或 `-`(从 stdin 读取)。后续参数会原样传递给程序 选项: -h, --help 打印帮助 .... -
安装
ecc编译器工具链,用于将eBPF内核代码编译为config文件或Wasm模块(为了编译,需要安装clang、llvm和libclang):
或使用docker镜像进行编译:
```bash
# 对于x86_64和aarch64
docker run -it -v `pwd`/:/src/ ghcr.io/eunomia-bpf/ecc-`uname -m`:latest # 使用docker进行编译。`pwd`应包含*.bpf.c文件和*.h文件。
```
- 构建编译器、运行库和工具:
有关构建详细信息,请参见build。
示例
有关简单eBPF工具和eunomia-bpf库使用的详细信息,请参见examples。
许可证
MIT LICENSE
-
CO-RE: 编译一次 – 在任何地方运行 ↩↩
-
WebAssembly 或 Wasm: https://webassembly.org/ ↩↩