Add LICENSE
基于 eBPF 的系统异常观测与根因定位工具
ebpf-diag 是一款轻量级、低开销的 Linux 系统异常实时观测与诊断工具,基于 eBPF 技术实现。支持对 CPU 异常占用、I/O 延迟抖动、内存抖动、锁竞争等典型异常场景进行实时观测、指标采集、事件关联分析和结构化诊断结果输出。
赛题: 全国研究生操作系统比赛 — 基于 eBPF 的系统异常观测与根因定位工具
目标平台: openKylin (Kernel 6.6+), x86_64 / ARM64
当前版本: v0.2.0 (5/5 类异常已覆盖,性能基准已验证)
代码仓库: https://gitlink.org.cn/llg987/jyedxtycgcygydwgj
# 安装依赖 (Ubuntu/openKylin) sudo apt install -y build-essential cmake clang llvm libbpf-dev libelf-dev zlib1g-dev # 注意: Ubuntu 22.04 的 libbpf-dev 版本为 0.5.0, 需手动升级: # git clone --depth 1 --branch v1.4.0 https://github.com/libbpf/libbpf.git # cd libbpf/src && make -j$(nproc) && sudo make install # 生成 vmlinux.h (基于当前内核) bpftool btf dump file /sys/kernel/btf/vmlinux format c > ebpf/vmlinux.h # 编译 mkdir build && cd build cmake .. && make -j$(nproc)
# 监控 CPU 和内存异常,60秒,JSON 输出 sudo ./build/ebpf-diag --monitor cpu,mem --duration 60 --output json # 全场景监控(5 类异常 + 交叉关联分析) sudo ./build/ebpf-diag --monitor all --duration 60 \ --output json --output-file output/report.json --verbose # 一键测试 sudo bash scripts/test_all.sh # 列出可用探针 sudo ./build/ebpf-diag --list-probes
cd docker docker-compose build docker-compose run --privileged ebpf-diag-dev
ebpf-diag/ ├── ebpf/ # eBPF 内核态程序 (.bpf.c) │ ├── cpu.bpf.c # CPU 异常观测探针 (sched_switch + sched_wakeup) │ ├── memory.bpf.c # 内存异常观测探针 (page_alloc + kswapd + OOM) │ ├── io.bpf.c # I/O 延迟观测探针 (block_rq_issue + block_rq_complete) │ ├── lock.bpf.c # 锁竞争观测探针 (futex_wait kprobe + kretprobe) │ ├── syscall.bpf.c # 系统调用热点探针 (sys_enter + sys_exit) │ └── common.bpf.h # 共享 eBPF 数据结构 ├── include/ # 用户态头文件 │ ├── types.h # 公共数据类型 (Event, Metrics, AnomalyReport) │ ├── collector.h # 采集器接口 (BaseCollector, 5 类 Collector) │ ├── detector.h # 检测器接口 (自适应基线检测) │ ├── analyzer.h # 根因分析引擎 + EvidenceBuilder │ └── reporter.h # 报告输出 (JsonReporter + SummaryData) ├── src/ # 用户态 C++ 实现 │ ├── main.cpp # CLI 入口 + 主循环 │ ├── core/ # EbpfLoader, EventReader, Logger, Symbols │ ├── collector/ # 5 类指标采集器 (主导进程追踪) │ ├── detector/ # 5 类异常检测器 (自适应基线) │ ├── analyzer/ # 根因分析 + 多维交叉关联 │ └── reporter/ # JSON 结构化输出 + 系统摘要 ├── scripts/ # 7 个测试脚本 (test_*.sh, benchmark.sh) ├── docker/ # Dockerfile + docker-compose.yml ├── docs/ # 设计文档、测试方法、阶段总结 └── output/ # 诊断输出目录
stress-ng --cpu 4
stress-ng --vm 4 80%
fio
futex_wait
{ "tool": "ebpf-diag", "version": "0.2.0", "duration_seconds": 30, "total_anomalies": 24, "anomalies": [ { "type": "CPU异常占用", "severity": "critical", "object": { "pid": 161000, "comm": "stress-ng" }, "key_metrics": { "CPU使用率": 358.23, "上下文切换": 160463 }, "suspected_root_cause": "用户态计算热点导致CPU持续饱和", "evidence_chain": [ "CPU利用率 358% 超过阈值 90%", "异常持续 3 个观测窗口", "关联进程: stress-ng (PID=161000)" ], "suggestion": "检查进程 stress-ng (PID=161000) 的计算逻辑是否可优化", "confidence": 0.67 } ], "summary": { "system_health_score": 0, "dominant_issue": "锁竞争", "overall_assessment": "系统负载较重,多类异常并发...", "breakdown": { "cpu": 7, "memory": 0, "io": 0, "lock": 10, "syscall": 2, "correlations": 7 } } }
GPL-2.0
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
ebpf-diag
基于 eBPF 的系统异常观测与根因定位工具
简介
ebpf-diag 是一款轻量级、低开销的 Linux 系统异常实时观测与诊断工具,基于 eBPF 技术实现。支持对 CPU 异常占用、I/O 延迟抖动、内存抖动、锁竞争等典型异常场景进行实时观测、指标采集、事件关联分析和结构化诊断结果输出。
赛题: 全国研究生操作系统比赛 — 基于 eBPF 的系统异常观测与根因定位工具
目标平台: openKylin (Kernel 6.6+), x86_64 / ARM64
当前版本: v0.2.0 (5/5 类异常已覆盖,性能基准已验证)
代码仓库: https://gitlink.org.cn/llg987/jyedxtycgcygydwgj
特性
快速开始
环境要求
编译
运行
Docker 环境
项目结构
支持的异常场景
stress-ng --cpu 4stress-ng --vm 4 80%fioon SD 卡futex_wait,测量实际等待时间验证环境
输出格式
文档导航
许可证
GPL-2.0