bhanuprakasheagala/eTraceGen-eBPFEventTelemetryEngine
GitHub: bhanuprakasheagala/eTraceGen-eBPFEventTelemetryEngine
一个基于现代 C++ 和 eBPF 构建的 Linux 内核级遥测引擎,通过模块化流水线提供进程、文件及系统调用的实时事件捕获与 JSON 输出。
Stars: 1 | Forks: 0
# eTraceGEN: eBPF 事件遥测引擎
`eTraceGen` 是一个基于 eBPF(内核空间)和现代 C++(用户空间)构建的 Linux 事件遥测引擎。
它旨在捕获并流式传输高价值的运行时遥测数据,涵盖:
- 进程生命周期活动
- 文件操作
- 系统调用活动
- 最小化的网络套接字生命周期元数据
未来(v1 版本后)的领域:
- DNS 事件
- HTTP/HTTPS 关联
- 更深度的网络遥测(流关联、协议上下文)
该项目有意设计为优先考虑可移植性的流水线:
- 最小化且安全的内核端工作
- 与用户空间共享的类型化事件契约
- 用户空间的解码/丰富/过滤/输出阶段
- 在完整 eBPF 运行时不可用时进行优雅降级
## 范围界定
- **当前发布目标 (v1):** 进程 + 文件 + 系统调用遥测,以及最小化的网络套接字生命周期事件。
- **当前网络范围:** 仅限元数据的 `socket`/`connect`/`accept4`/`bind`/`listen`/`close`;不涉及 TLS 检查,也不进行 L7 解析。
- **设计原则:** 保持内核路径最小化,精确配对进入/退出操作,并在受控的里程碑中扩展领域。
## 本仓库的目标受众
- 构建 Linux 可观测性/安全遥测系统的工程师
- 学习通过 C++ 实践 eBPF + libbpf 集成的开发者
- 希望在添加功能之前理解内部机制的人员
## 文档导航
- [深度解析索引](docs/README.md)
- [架构](docs/01-system-architecture.md)
- [执行流程 (分步)](docs/02-execution-story.md)
- [事件契约与 ABI](docs/03-event-contract.md)
- [内核 eBPF 端](docs/04-kernel-side.md)
- [用户空间流水线](docs/05-userspace-side.md)
- [构建、可移植性与兼容性](docs/06-build-portability.md)
- [路线图与扩展设计](docs/07-roadmap-and-extension.md)
- [代码详解 (逐文件)](docs/code-walk/README.md)
- [Linux 主机设置与启动](docs/linux-setup.md)
## 快速构建
```
cmake -S . -B build
cmake --build build -j
```
## 构建 BPF 对象 (Linux)
使用仓库脚本:
```
./scripts/build_bpf.sh
```
或通过 CMake 辅助目标:
```
cmake --build build --target bpf_object
```
这将生成:
- `bpf/vmlinux.h`(从 `/sys/kernel/btf/vmlinux` 生成)
- `bpf/event_logger.bpf.o`
## 快速运行
```
./build/etracegen
```
可选的运行时覆盖参数:
```
ETRACEGEN_BPF_OBJECT=/absolute/path/to/event_logger.bpf.o ./build/etracegen
ETRACEGEN_CONFIG=/absolute/path/to/config.yaml ./build/etracegen
```
通过在配置中设置系统调用编号来启用选定的系统调用遥测:
```
filters:
syscall_allowlist: [0, 1, 2]
```
注意:系统调用编号与架构相关(`x86_64` 对比 `arm64`)。
启用内核端的 PID/UID 过滤:
```
filters:
pid_allowlist: [1234]
uid_allowlist: [1000]
```
领域行为:
- `domains.process: false` => 禁用进程生命周期事件
- `domains.file: false` => 禁用文件事件
- `domains.syscall: false` => 禁用系统调用事件(忽略允许列表)
- `domains.network_socket: false` => 禁用网络套接字事件
过滤行为:
- `pid_allowlist: []` => 禁用 PID 过滤
- `uid_allowlist: []` => 禁用 UID 过滤
- `syscall_allowlist: []` => 禁用系统调用遥测
## 当前状态
- C++20 用户空间流水线已实现。
- libbpf 收集器路径可以从 BPF 对象打开/加载/附加/轮询事件。
- 当 libbpf 不可用时,存根收集器(Stub collector)回退机制正常工作。
- 进程生命周期遥测包括 exec/fork/exit 以及 clone/clone3/vfork 结果事件,并在可用时捕获子进程 PID。
- 文件探针(`openat`、`unlinkat`、`renameat2`)在内核中跨进入/退出进行配对,并附带准确的系统调用 `ret` 结果发出。
- 内核端的 PID/UID 允许列表过滤器在进程/文件/系统调用遥测中强制执行。
- 内核 BPF 统计信息(`bpf_stats`)每 30 秒定期报告一次,并在 libbpf 后端处于活动状态时在关闭时报告。
- 启动能力报告在进程启动时发出(包括后端、程序附加覆盖率、配置加载状态、map 可用性以及适用时的降级原因)。
- 选定的系统调用遥测通过 `raw_syscalls/sys_enter` + `raw_syscalls/sys_exit` 实现,并由配置(`filters.syscall_allowlist`)进行允许列表优先控制。
- 最小化的网络套接字遥测对 `socket`、`connect`、`accept4`、`bind`、`listen` 和 `close` 处于活动状态,仅包含元数据负载,不进行 TLS 检查。
## 完整 Linux eBPF 模式的依赖项
- clang/llvm
- libbpf
- bpftool
- 内核 BTF(通常为 `/sys/kernel/btf/vmlinux`)
## 开发命令包装器
```
./scripts/dev.sh help
```
常用命令:
- `./scripts/dev.sh build`
- `./scripts/dev.sh bpf`
- `./scripts/dev.sh host-check`
- `./scripts/dev.sh check`
- `./scripts/dev.sh check --linux-strict --skip-build`
## 一键检查
```
./scripts/run_all_checks.sh
```
Linux 严格模式(使用严格预检):
```
./scripts/run_all_checks.sh --linux-strict
```
## 集成冒烟测试 (Linux)
```
./scripts/integration_smoke.sh
```
这将验证:
- 进程事件已发出
- 文件事件已发出
- 文件事件包含 `ret` 结果字段
- 当启用 `filters.syscall_allowlist` 时系统调用事件已发出(在 x86_64 冒烟路径上断言)
## V1 验证套件 (Linux)
```
./scripts/validate_v1_linux.sh
```
此套件验证:
- 基线进程/文件/系统调用发出
- PID 允许列表阻止所有行为
- UID 允许列表阻止所有行为
- UID 允许当前用户行为
- PID 允许自身行为(事件受限于预期 PID)
## V1 发布预检
跨平台预检:
```
./scripts/release_check_v1.sh
```
Linux 发布关卡:
```
./scripts/release_check_v1.sh --linux-strict
```
或运行完整的编排检查:
```
./scripts/run_all_checks.sh
```
标签:API安全, API集成, Bash脚本, CO-RE, Docker镜像, Homebrew安装, Hpfeeds, HTTP工具, IP 地址批量处理, JSON输出, libbpf, Linux内核, SQLite数据库, XML 请求, 事件解析, 内核监控, 内核级事件, 动态分析, 可观测性, 后渗透, 安全开发, 安全渗透, 数据流水线, 文件监控, 流量元数据, 现代C++, 系统调用, 系统遥测, 网络安全审计, 网络设备安全