目录

eBPF RCA Agent:基于 eBPF 的系统异常观测与根因定位工具

1. 项目简介

本项目面向“基于 eBPF 的系统异常观测与根因定位工具”赛题,设计并实现了一套轻量级系统异常观测与诊断工具。工具基于 eBPF、Go、Cilium/ebpf、clang/LLVM 等开源技术栈,能够在 openKylin / Linux 环境下对典型系统异常进行实时观测、指标采集、事件关联分析和结构化诊断结果输出。

当前版本重点支持以下能力:

  • 基于 eBPF 采集调度、系统调用、块设备 I/O、内存回收、锁竞争等运行时事件;
  • 支持 CPU 异常占用、系统调用热点、I/O 延迟抖动、内存压力、锁竞争五类典型异常场景;
  • 输出 JSON 与 Markdown 两类结构化诊断报告;
  • 提供一键安装、环境检查、编译构建和场景复现脚本;
  • 支持在 openKylin Kernel 6.6 及以上环境中编译和运行。

本项目当前版本主要面向本地虚拟机和 openKylin 评测环境,强调可复现、可验证和工程可用性。


2. 支持的异常场景

异常类型 说明 输出示例
CPU_HIGH_USAGE CPU 异常占用、调度延迟、热点函数分析 outputs/cpu_result.md
SYSCALL_HOTSPOT 高频或高耗时系统调用热点 outputs/syscall_result.md
IO_LATENCY_JITTER 随机 I/O 压力、I/O 延迟抖动 outputs/io_result.md
MEMORY_PRESSURE 内存压力、缺页、回收抖动 outputs/mem_result.md
LOCK_CONTENTION mutex/futex 等锁竞争导致的性能退化 outputs/lock_result.md

运行全部场景后,会额外生成汇总结果:

outputs/all_result.json

3. 项目结构

.
├── bpf/                    # eBPF C 程序
├── cmd/rca/                # CLI 主程序入口
├── configs/                # 默认配置文件
├── docs/                   # 使用说明与设计文档
├── internal/               # Go 核心模块
│   ├── analyzer/           # 根因分析逻辑
│   ├── collector/          # 不同异常类型的采集器
│   ├── config/             # 配置解析
│   ├── model/              # 诊断结果数据结构
│   ├── report/             # JSON / Markdown 报告生成
│   └── utils/              # 工具函数
├── scripts/                # 安装、检查、复现场景脚本
├── outputs/                # 诊断输出结果
├── Makefile
├── go.mod
└── README.md

4. 环境要求

基础评测环境建议如下:

  • 操作系统:openKylin / Ubuntu / Debian 系 Linux
  • Kernel:6.6 及以上版本优先
  • 架构:x86_64
  • 权限:root 权限,或具备加载 eBPF 程序所需能力
  • 依赖工具:
    • Go
    • clang / LLVM
    • gcc / make
    • bpftool
    • libbpf-dev
    • stress-ng
    • fio

说明:当前版本主要在 openKylin Kernel 6.6 环境下验证,其他发行版可作为兼容性扩展。


5. 快速开始

5.1 安装依赖

bash scripts/install_deps.sh

如果脚本提示 openKylin 的系统保护机制阻止 apt 安装,可按提示执行:

sudo mm-cli -o
sudo reboot

重启后重新运行安装脚本。


5.2 检查环境

make check

或直接运行:

bash scripts/check_env.sh

环境检查会确认以下必须项:

  • Go
  • clang
  • llvm-objdump
  • make
  • gcc
  • git
  • fio
  • stress-ng
  • bpftool
  • libbpf header
  • kernel BTF
  • kernel headers
  • bpf/bin/ 输出目录可写

5.3 编译项目

make build

编译成功后会生成:

bin/rca

可查看帮助信息:

./bin/rca --help

5.4 一键运行全部异常场景

sudo make run-all

运行完成后,结果会输出到:

outputs/cpu_result.json
outputs/cpu_result.md
outputs/syscall_result.json
outputs/syscall_result.md
outputs/io_result.json
outputs/io_result.md
outputs/mem_result.json
outputs/mem_result.md
outputs/lock_result.json
outputs/lock_result.md
outputs/all_result.json

6. 单场景复现

CPU 异常占用

sudo make run-cpu

输出:

outputs/cpu_result.json
outputs/cpu_result.md

系统调用热点

sudo make run-syscall

输出:

outputs/syscall_result.json
outputs/syscall_result.md

I/O 延迟抖动

sudo make run-io

输出:

outputs/io_result.json
outputs/io_result.md

内存压力

sudo make run-memory

输出:

outputs/mem_result.json
outputs/mem_result.md

锁竞争

sudo make run-lock

输出:

outputs/lock_result.json
outputs/lock_result.md

7. CLI 使用方式

除 Makefile 封装命令外,也可以直接使用 bin/rca 运行诊断。

示例:

sudo ./bin/rca \
  --mode cpu \
  --duration 60 \
  --config configs/default.yaml \
  --output outputs/cpu_result.json

CPU 场景支持可选热点函数剖析:

sudo ./bin/rca \
  --mode cpu \
  --duration 60 \
  --config configs/default.yaml \
  --enable-cpu-hotspot \
  --hotspot-duration 30 \
  --hotspot-frequency 99 \
  --hotspot-output-prefix outputs/cpu_hotspot \
  --output outputs/cpu_result.json

说明:CPU 热点函数剖析会调用 perf 作为辅助采样工具。若当前环境不支持 perf 或权限不足,工具不会直接失败,而是在结果中记录 profile_errorunavailable_features


8. 输出结果说明

每个诊断结果至少包含以下字段:

  • 异常类型
  • 时间窗口
  • 置信度
  • 相关进程或线程
  • 关键指标
  • 证据链
  • 疑似根因
  • 建议性分析结论

Markdown 报告用于人工查看,JSON 结果用于机器解析和后续扩展。


9. 当前版本限制

当前版本仍存在以下限制:

  1. 主要验证环境为 openKylin Kernel 6.6 x86_64;
  2. 部分 tracepoint 或内核特性在不同发行版上可能存在差异;
  3. CPU 热点函数剖析依赖 perf 权限,部分环境下可能降级;
  4. 当前版本重点面向本地虚拟机和标准复现场景,容器场景观测仍属于后续扩展方向;
  5. 诊断规则以规则化证据链为主,暂未引入复杂机器学习模型。

10. 后续计划

后续版本计划继续完善:

  • 多平台适配,包括 ARM64 和更多 Linux 发行版;
  • 容器 / cgroup 维度的异常归因;
  • 更细粒度的锁对象与文件路径归因;
  • 轻量级 Web Dashboard 展示诊断结果;
  • 性能开销评估与对比实验;
  • 更完整的测试用例和 CI 检查流程。

11. 许可证与说明

本项目为系统创新赛道参赛作品,当前版本用于 openKylin 环境下的系统异常观测与根因定位实验验证。

关于
47.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号