3 Star 14 Fork 5

anolis / Eunomia

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

eunomia-bpf: 一个基于 WASM 的 CO-RE eBPF 程序动态加载框架

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

概况

eunomia-bpf 中,您可以:

  • 只编写内核态代码即可构建完整的运行 CO-RE 的 eBPF 应用程序
  • 只编写 eBPF 内核代码并且编译为 JSON,即可动态加载到另一台机器上而不需要重新编译
  • 将eBPF程序编译为 WASM 模块,就可以在用户空间 WASM 运行时中控制eBPF程序或处理数据
  • 拥有非常小和简单的可执行程序, 库本身小于 1MB 且不依赖 LLVM/Clang,可以轻松嵌入到其他的项目中
  • 以小于 100ms 的时间动态加载和运行任何eBPF程序,比 bcc 更迅速

我们的主要开发在 Github 仓库中完成:https://github.com/eunomia-bpf/eunomia-bpf

项目架构

我们有一个加载器库,一个编译工具链,以及一些额外的工具,如cli和一个自定义指标导出器。

一个bpf-loader库

这个库包含了 libbpf 的主要函数,提供了将 eBPF 代码动态加载到内核的能力,并使用 JSON 和简单的 API 运行它。

查看 bpf-loader 以获得更多细节信息

我们提供了一个简单的cli接口, 使得您可以通过在命令行输入URL的方式启动任何eBPF程序。您可以从release版本中下载样例:

# download the release from https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli
$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli
$ sudo ./ecli run https://eunomia-bpf.github.io/ebpm-template/package.json # simply run a pre-compiled ebpf code from a url

一个从WASM模块加载eBPF程序的库

使用 bpf-loader 库从WASM模块加载eBPF程序,您可以编写WASM模块来操作eBPF程序或在用户空间WASM运行时处理数据。这个想法很简单:

  1. 使用 eunomia-cc 工具链将 eBPF 代码骨架编译成 JSON 格式
  2. WASM 模块中嵌入 JSON 数据,并为操作eBPF程序框架提供一些API
  3. WASM 模块加载 JSON 数据,并使用 bpf-loader 库运行eBPF程序框架

在单个 WASM 模块中可以有多个 eBPF 程序。

您可以在 wasm-runtime 中看到更多细节

一个帮助您生成预编译eBPF数据的编译工具链

该工具链可以和docker一样使用,在一个命令中生成预编译的eBPF数据: 详细信息请参见 eunomia-cc。 您也可以简单地使用 ebpm-template 作为一个模板,将修改推送到这里后使用github action可以帮助您编译CO-RE ebpf代码!

一个可观测性工具

我们提供了一个 prometheusOpenTelemetry 的输出工具用于定制eBPF指标,它用异步rust编写:eunomia-exporter

您可以编译它或从release版本下载它

其他相关项目

工程构建

查看build以获得更多细节

计划路线图

  • 重构 Eunomia 项目中的代码并提供快速示例
  • 支持用户空间中的tracepointsfentrykprobelsmring buffer/perf event输出。
  • 使编译更容易使用,更灵活,完全兼容其他 libbpf 程序;
  • 添加可配置的可观测性导出器
  • 使用 WASM 进行 ebpf 包加载配置,并添加更多 ebpf 程序类型支持
  • 支持更多的 ebpf 程序类型:
  • 为 eunomia-bpf 添加简单的包管理器: LMP
  • libbpf 添加更多功能
  • 提供 python、go 等 sdk

证书

MIT LICENSE

MIT License Copyright (c) 2022 yunwei37 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

使用 WASM 或 JSON 的 eBPF 动态加载开发框架 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/anolis/eunomia.git
git@gitee.com:anolis/eunomia.git
anolis
eunomia
Eunomia
master

搜索帮助