MCPcopy Index your code
hub / github.com/eunomia-bpf/eunomia-bpf

github.com/eunomia-bpf/eunomia-bpf @v1.0.38

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.38 ↗ · + Follow
853 symbols 1,906 edges 136 files 201 documented · 24%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

logo

eunomia-bpf:简化并增强eBPF,支持CO-RE[^1]和WebAssembly[^2]

Actions Status GitHub release (latest by date) codecov DeepSource CodeFactor

一个帮助你更容易构建和分发eBPF程序的编译器和运行时框架。

简介

eunomia-bpf是一个动态加载库/运行时以及一个编译工具链框架,旨在帮助您更容易地构建和分发eBPF程序。

项目文档现在统一维护在 eunomia.dev ,文档源码位于 eunomia-bpf/eunomia.dev

有了eunnomia-bpf,您可以:

  • 简化 编写 eBPF 程序的库:
  • 简化构建 CO-RE [^1] libbpf eBPF应用程序:仅编写 eBPF 内核代码 ,并通过 perf eventring buffer 自动暴露您的数据从内核。
  • 自动采样数据 从哈希映射并在用户空间打印直方图。
  • 自动生成 并配置 eBPF 程序的命令行参数
  • 您可以同时以 BCClibbpf 的方式编写内核部分。
  • 使用 Wasm[^2] 构建eBPF程序:参见 Wasm-bpf 项目
  • 运行时,库和工具链可以用 C/C++、Rust、Go 等以 Wasm 编写 eBPF,涵盖从跟踪网络安全的使用场景。
  • 简化eBPF程序的分发
  • 一个工具用于推送、拉取和运行预编译的eBPF程序作为Wasm模块的OCI镜像。
  • 1行 bash云端URL 运行eBPF程序,无需重新编译,独立于内核版本和架构。
  • 使用 JSON 配置文件或 Wasm 模块动态加载 eBPF 程序。

更多信息,请参见 eunomia-bpf 文档站

[^1]: CO-RE: 编译一次 – 在任何地方运行 [^2]: WebAssembly 或 Wasm: https://webassembly.org/

开始使用

作为 CLI 工具运行

您可以通过以下方式从 OCI 仓库运行预编译的 eBPF 程序到内核,只需1行 bash 命令:

# 从 GitHub Releases 下载最新发布版本
$ wget https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli -O ecli && chmod +x ./ecli
$ 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程序:

    ```console $ wget https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/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模块(为了编译,需要安装clangllvmlibclang):

    console $ wget https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecc && chmod +x ./ecc $ ./ecc -h eunomia-bpf编译器 用法: ecc [OPTIONS] <SOURCE_PATH> [EXPORT_EVENT_HEADER] ....

或使用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

Extension points exported contracts — how you extend this code

EventHandler (Interface)
A handler to receive events provided by ebpf kernel program [17 implementers]
bpf-loader-rs/bpf-loader-lib/src/export_event/mod.rs
HandleBPFEvent (Interface)
impl this trait to handle the bpf events [2 implementers]
eunomia-sdks/eunomia-otel/src/bindings.rs
AbstractClient (Interface)
(no doc) [1 implementers]
ecli/ecli-lib/src/runner/client/mod.rs
InternalBufferValueEventProcessor (Interface)
(no doc) [4 implementers]
bpf-loader-rs/bpf-loader-lib/src/export_event/mod.rs
InternalSampleMapProcessor (Interface)
(no doc) [4 implementers]
bpf-loader-rs/bpf-loader-lib/src/export_event/mod.rs
BtfHelper (Interface)
(no doc) [1 implementers]
bpf-loader-rs/bpf-loader-lib/src/helper/btf.rs

Core symbols most depended-on inside this repo

build
called by 27
bpf-loader-rs/bpf-loader-lib/src/skeleton/builder.rs
cJSON_Delete
called by 24
examples/bpftools/sigsnoop/eunomia-include/cJSON/cJSON.c
cJSON_New_Item
called by 17
examples/bpftools/sigsnoop/eunomia-include/cJSON/cJSON.c
ensure
called by 15
examples/bpftools/sigsnoop/eunomia-include/cJSON/cJSON.c
load_and_attach
called by 15
bpf-loader-rs/bpf-loader-lib/src/skeleton/preload/mod.rs
path
called by 14
eunomia-sdks/eunomia-rs/src/lib.rs
terminate
called by 14
bpf-loader-rs/bpf-loader-lib/src/skeleton/handle.rs
build_argument_parser
called by 13
bpf-loader-rs/bpf-loader-lib/src/meta/arg_builder.rs

Shape

Function 430
Class 246
Method 139
Enum 32
Interface 6

Languages

Rust53%
C28%
C++18%

Modules by API surface

examples/bpftools/sigsnoop/eunomia-include/cJSON/cJSON.c110 symbols
examples/bpftools/sigsnoop/eunomia-include/sigsnoop.skel.h43 symbols
examples/bpftools/sigsnoop/eunomia-include/argp.h37 symbols
bpf-loader-rs/bpf-loader-lib/src/meta/mod.rs35 symbols
bpf-loader-rs/bpf-loader-lib/src/export_event/mod.rs21 symbols
ecli/ecli-lib/src/runner/task_manager/mod.rs20 symbols
bpf-loader-rs/bpf-loader-c-wrapper/src/lib.rs19 symbols
examples/bpftools/runqlat/core_fixes.bpf.h17 symbols
bpf-loader-rs/bpf-loader-lib/src/export_event/tests/map_sampling_tests.rs17 symbols
examples/bpftools/mdflush/core_fixes.h16 symbols
examples/bpftools/sigsnoop/eunomia-include/argparse/argparse.c15 symbols
eunomia-sdks/eunomia-otel/src/bindings.rs15 symbols

For agents

$ claude mcp add eunomia-bpf \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page