目录

ebpf-anomaly-rootcause

ebpf-anomaly-rootcause 是一个面向 Linux/openKylin/openEuler 的系统异常观测与根因定位工具。项目用 Python 组织诊断流程,结合 procfs 与 bpftrace/eBPF 采集 CPU、I/O、内存、锁竞争和系统调用信号,并输出 JSON、完整 Markdown 报告和更容易阅读的中文摘要报告。

参赛快速入口

已有项目目录:一条命令完成真实测试并启动报告服务

项目已经下载到 Linux 服务器时,使用下面这一条命令。--skip-install 表示复用当前目录,不会再次克隆仓库;脚本会检查环境、复用已经安装的依赖,只补充缺少的运行条件,然后执行真实 Linux 主机闭环并生成报告。

cd /root/anomdiag-codex-test && bash install-and-run.sh --real --skip-install --dir /root/anomdiag-codex-test --out reports/my-real-test && (ss -lnt | grep -q ':18081 ' || nohup python3 -m http.server 18081 --bind 127.0.0.1 </dev/null >/tmp/anomdiag-report.log 2>&1 &)

运行完成后,主要产物位于:

reports/my-real-test/打开报告.html       # 完整中文 HTML 报告
reports/my-real-test/latest.html         # 稳定的最新报告入口
reports/my-real-test/latest_summary.md   # 命令行可读摘要
reports/my-real-test/all_diagnosis.json  # 机器可解析诊断结果
reports/my-real-test/acceptance_matrix.md # 赛题验收矩阵

直接在 Linux 终端查看摘要:

cd /root/anomdiag-codex-test && sed -n '1,220p' reports/my-real-test/latest_summary.md

首次安装和重复测试是两种入口。目标目录不存在时使用后文的“各系统一键安装”;目录已经存在时必须使用上面的 --skip-install 命令,否则 Git 会提示目标目录非空。

云服务器没有桌面:在 Windows 浏览器查看报告

报告生成和测试都在 Linux 云服务器上进行,Windows 只负责通过 SSH 安全通道显示报告。报告服务只监听服务器的 127.0.0.1,不需要开放云服务器的 18081 安全组端口。

Windows PowerShell 执行(不要在 Linux 服务器终端执行):

ssh -N -L 18080:127.0.0.1:18081 root@<服务器IP>

输入密码或使用 SSH 私钥后,窗口保持不动表示通道正在工作。保持 PowerShell 窗口开启,在 Windows 浏览器访问:

http://127.0.0.1:18080/reports/my-real-test/latest.html

查看结束后,在 PowerShell 中按 Ctrl+C 关闭通道。

如果服务器重装后出现 REMOTE HOST IDENTIFICATION HAS CHANGED,先通过云平台控制台核对服务器当前 SSH 指纹;确认服务器身份无误后再执行:

ssh-keygen -R <服务器IP>

随后重新建立 SSH 通道。不要在未核对指纹时直接忽略该安全警告。

真实运行结果解读

一次完整报告不是只输出“发现异常”,而是按照“结果摘要 → 异常排序 → 主因排序 → 诊断详情 → 证据链 → 优化建议”组织。当前归档的真实运行结果展示了以下诊断闭环:

1. 先给出主因,再展示多异常排序

  • 报告识别出 CPU、锁竞争、系统调用、调度链路等并发异常,并为每个候选给出严重级别、关联进程/线程、疑似根因、置信度和关键证据。
  • 主因判断为锁竞争性能退化,疑似根因为 futex/互斥锁竞争,综合置信度为 0.95
  • 主因评分为 562.0,高于 CPU 和系统调用候选;排序同时考虑严重程度、置信度、证据丰富度和因果支持,不只依赖单项指标。

2. 锁竞争定位到进程、线程和资源对象

  • 异常类型:lock_contention
  • 目标对象:hbrclient / PID 552 / TID 594
  • 采集来源:bpftrace
  • 资源关联:线程等待状态与 futex_wait_queue 关联,并保留候选线程、等待次数、热点函数和原始证据字段。
  • 结论依据:严重级别、关键指标、进程定位、线程定位、资源关联和原始证据共同支撑 0.95 综合置信度。

3. 系统调用错误模式关联到具体进程

  • 报告将系统调用异常关联到 AliYunDunMonito / PID 1352 / TID 1358
  • read/EAGAINfutex/ETIMEDOUT 等模式按调用次数聚合,同时区分目标进程与背景噪声。
  • 证据链保留异常分类、关键指标、进程关联、线程关联、资源关联和根因决策步骤,便于从结论反向复核原始观测。

4. 与赛题结构化输出要求的对应关系

赛题字段 报告位置
异常类型 异常摘要、异常排名、诊断详情
关联对象 影响对象、关联进程表、关联线程表、关联资源表
关键指标 关键指标表、置信度来源、热点统计
异常时间窗口 时间线中的开始时间、结束时间、持续时间和采样间隔
疑似根因 一句话结论、主因排序、根因判断
证据链 证据链表、原始证据、热点函数和调用栈
建议性结论 优化建议、复核步骤

上述结果来自真实 Linux 主机运行报告。不同主机的进程、线程、指标和根因会随当时负载变化;README 只说明当前归档结果,不把它替代为 openKylin、其他架构或其他内核版本的真机证明。

参赛材料

演示视频及参赛材料网盘下载

GitLink 平台暂不支持在 Web 端解析 Git LFS 大文件,因此演示视频不通过 Git LFS 或普通 Git 提交。完整初赛材料已上传至百度网盘:

网盘内容包括:

演示视频.mp4
演示ppt.pptx
操作系统开源创新大赛项目说明书-AnomDiag.docx
操作系统开源创新大赛 作品原创承诺书.jpg

仓库根目录保留 README、源代码、演示 PPT、项目说明书和原创承诺书;演示视频仅通过上述网盘链接提供。

当前能力

  • anomdiag diagnose:执行采集、规则分析和报告生成,输出结构化根因诊断结果。
  • anomdiag summarize:把 JSON 诊断结果转换成中文可读摘要,方便直接查看和答辩展示。
  • anomdiag doctor:检查 bpftrace、stress-ng、fio、tracefs/procfs 等运行环境。
  • anomdiag install-deps:打印或执行当前 Linux 发行版的依赖安装命令。
  • --dry-run:在没有 eBPF 权限的开发机上验证完整流程。
  • 支持诊断目标:cpuiomemorylocksyscallall
  • 支持 JSONYAMLMarkdownHTML 输出;报告包含异常类型、关联进程/线程、关键指标、时间窗口、疑似根因、证据链、建议结论和主因排序。
  • 提供赛题验收矩阵:scripts/acceptance_matrix.py 会根据报告和证据目录生成 acceptance_matrix.jsonacceptance_matrix.md,把评分项拆成“已验证 / 部分验证 / 待真机 / 未通过”。
  • 支持容器/cgroup 上下文识别:Docker、Podman、containerd、container ID、cgroup 路径和资源限制字段。
  • 内置插件化元数据:CPU、I/O、内存、锁竞争、syscall 插件均可独立扩展新的采集信号和诊断规则。
  • CPU 目标支持 procfs 基线模式,在没有 bpftrace 时也能给出诊断结果。
  • I/O、锁竞争、系统调用目标在没有 bpftrace 时会明确降级为不可用提示。

目录结构

anomdiag/
  collectors/   # 指标采集入口,当前以 procfs + bpftrace 为主
  analyzers/    # 根因判断规则
  report/       # JSON、完整 Markdown、可读摘要报告
  utils/        # 命令执行、运行环境探测、指标模型
bpftrace/       # bpftrace 采集脚本
scripts/        # 异常复现与演示脚本
examples/       # 示例输入/输出
docs/           # 设计与开发文档
tests/          # 自动化测试

安装

各系统一键安装、运行并生成报告

脚本会先检查 git、Python、虚拟环境等基础工具;已安装的工具会直接复用,只安装缺少的依赖。随后自动运行 CPU、I/O、内存、锁竞争和系统调用诊断,并生成 HTML、Markdown、JSON 和 YAML 报告。

Ubuntu / Debian / apt 系统

sudo apt-get update && sudo apt-get install -y curl ca-certificates && curl -fsSL https://gitlink.org.cn/HzKM93cJLW/jyedxtycgcygydwgj/raw/master/install-and-run.sh | sudo bash -s -- --real --dir /opt/anomdiag

查看结果:

cd /opt/anomdiag && cat reports/one-command-real/latest_summary.md

openKylin

sudo apt-get update && sudo apt-get install -y curl ca-certificates && curl -fsSL https://gitlink.org.cn/HzKM93cJLW/jyedxtycgcygydwgj/raw/master/install-and-run.sh | sudo bash -s -- --real --dir /opt/anomdiag

查看结果:

cd /opt/anomdiag && cat reports/one-command-real/latest_summary.md

openEuler / Anolis / Fedora / RHEL / Rocky / AlmaLinux

sudo sh -c 'command -v dnf >/dev/null && dnf install -y curl ca-certificates || yum install -y curl ca-certificates' && curl -fsSL https://gitlink.org.cn/HzKM93cJLW/jyedxtycgcygydwgj/raw/master/install-and-run.sh | sudo bash -s -- --real --dir /opt/anomdiag

查看结果:

cd /opt/anomdiag && cat reports/one-command-real/latest_summary.md

openSUSE / SUSE

sudo zypper --non-interactive install curl ca-certificates && curl -fsSL https://gitlink.org.cn/HzKM93cJLW/jyedxtycgcygydwgj/raw/master/install-and-run.sh | sudo bash -s -- --real --dir /opt/anomdiag

查看结果:

cd /opt/anomdiag && cat reports/one-command-real/latest_summary.md

已经下载源码

cd ebpf-anomaly-rootcause && sudo bash install-and-run.sh --real --skip-install --dir "$PWD"

查看结果:

cat reports/one-command-real/latest_summary.md

报告默认位于 /opt/anomdiag/reports/one-command-real/,优先查看:

打开报告.html
latest_summary.md
acceptance_matrix.md
all_diagnosis.json

图形桌面中可以直接打开完整 HTML 报告:

xdg-open /opt/anomdiag/reports/one-command-real/打开报告.html

无图形桌面时,建议只在服务器回环地址启动报告服务:

python3 -m http.server 18081 --bind 127.0.0.1 --directory /opt/anomdiag

随后按照前文“云服务器没有桌面”的方法建立 SSH 通道并访问报告,不需要对公网开放报告端口。

通用安装入口

刚初始化好的 Linux 云服务器也可以用一条命令只部署代码和依赖:

curl -fsSL https://gitlink.org.cn/HzKM93cJLW/jyedxtycgcygydwgj/raw/master/install.sh | bash

如果希望新系统从零安装并立刻跑出一份验证结果,使用一条完整命令:

dnf install -y git python3 python3-pip python3-virtualenv curl ca-certificates || yum install -y git python3 python3-pip curl ca-certificates; cd /root && rm -rf jyedxtycgcygydwgj && git clone https://gitlink.org.cn/HzKM93cJLW/jyedxtycgcygydwgj.git && cd jyedxtycgcygydwgj && bash install-and-run.sh --real --dir /root/jyedxtycgcygydwgj

该命令会拉取项目、安装系统依赖、准备 Python 环境、尽量安装 bpftrace/stress-ng/fio 和 Docker/Podman,然后运行真实 Linux 主机闭环。报告输出到 reports/one-command-real

如果项目代码已经在当前目录,只想运行轻量验证:

bash install-and-run.sh --smoke --skip-install --dir "$PWD"

可选模式:

bash install-and-run.sh --smoke        # 安装后轻量跑通
bash install-and-run.sh --real         # 安装后真实主机闭环
bash install-and-run.sh --review       # 安装后生成最终评审材料
bash install-and-run.sh --score-sprint # 安装后运行高分冲刺自测

如果系统还没有 curl,先装 curl,或用:

wget -O- https://gitlink.org.cn/HzKM93cJLW/jyedxtycgcygydwgj/raw/master/install.sh | bash

默认安装到 /root/ebpf-anomaly-rootcause-gitlink,会拉取 master 分支并执行 bash run.sh init --yes。需要改目录时:

curl -fsSL https://gitlink.org.cn/HzKM93cJLW/jyedxtycgcygydwgj/raw/master/install.sh | \
  INSTALL_DIR=/opt/anomdiag bash

最简方式只需要记住根目录的 run.sh

bash run.sh init          # 初始化
bash run.sh doctor        # 检查环境
bash run.sh smoke         # 轻量跑通,生成报告和校验摘要
bash run.sh demo          # 一键生成快速演示证据
bash run.sh demo cpu      # 单独复现并查看 CPU 摘要
bash run.sh quick         # 快速生成演示报告索引
bash run.sh verify        # 当前环境完整验收
bash run.sh real          # 真实 Linux 主机闭环验证
bash run.sh score-sprint  # 高分冲刺自测汇总
bash run.sh benchmark     # 多轮准确率、根因命中率和性能开销量化评测
bash run.sh container-setup # 准备 Docker/Podman 容器运行时
bash run.sh container-check # 运行容器真测或边界报告
bash run.sh package       # 生成可迁移源码包

参赛量化评测使用统一入口:

bash run.sh benchmark reports/contest-benchmark

默认对五类标准场景重复运行 3 轮,输出异常识别准确率、精确率、召回率、误报率、漏报率、根因 Top-1 命中率、进程/资源对象命中率、证据链覆盖率,以及 CPU、内存、平均时延、P99 和吞吐影响。结果位于:

reports/contest-benchmark/contest_benchmark.md
reports/contest-benchmark/contest_benchmark.json
reports/contest-benchmark/stability/stability_report.md

只验证评测程序和报告结构时使用:

bash run.sh benchmark reports/contest-benchmark --quick

如果只想先确认项目能不能跑起来,优先执行:

bash run.sh smoke

它会生成 reports/smoke/打开报告.html、结构化诊断结果和 schema 校验摘要,适合 2C2G 云服务器或刚换系统时先看闭环。等环境稳定后,再运行:

bash run.sh real reports/real-host

这一步用于补真实 Linux 主机证据,包括真实采集、业务影响、调用栈、容器边界和验收矩阵。

新 Linux 机器上推荐先使用一键初始化入口:

bash run.sh init

默认只打印系统依赖安装计划,并自动创建 .venv、安装 Python 包、运行基础自测和 dry-run 验证。如果确认允许脚本安装系统依赖:

bash run.sh init --yes

也可以手动安装:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"

在 openKylin/openEuler/Ubuntu 真机或云服务器上采集 eBPF 信号时,建议先检查环境:

anomdiag doctor
anomdiag install-deps

如果想先看“当前机器下一步该跑什么”,生成环境指纹:

bash run.sh plan

其中 startup_plan 会给出就绪等级、推荐命令、阻塞项、缺失工具、容器就绪状态、缺失 tracepoint 数量和可安全宣称边界。

如果确认要自动安装依赖:

anomdiag install-deps --yes

容器真测需要 Docker 或 Podman。默认先生成安装计划,不会改系统:

bash run.sh container-setup

确认要安装并启动运行时时再执行:

bash run.sh container-setup --yes --runtime docker --verify

已有 Docker/Podman 后可直接跑容器闭环:

bash run.sh container-check reports/container-real

生成可迁移源码包:

bash run.sh package

打包产物会放在 dist/,解压后执行 bash run.sh init 即可在新系统初始化。

不同系统的真机验证接口已预留在 platforms/ 目录。后续重置服务器或切换到 openKylin、openEuler、Debian、Anolis、ARM64、RISC-V、Kernel 6.6+ 环境时,只需要在目标系统运行:

bash run.sh verify reports/platform-verify

再把 doctor.txtacceptance_matrix.mdlatest_summary.md 等结果放到对应平台目录即可。

评分项完成度与证据边界

评分维度 当前完成情况 现有证据 仍需补充
5 类异常场景 已实现 CPU、I/O、内存、锁竞争、系统调用均有采集器、分析器、复现脚本和结构化 finding 在最终评测主机重复运行真实闭环,证明稳定观测能力
结构化输出 已实现 JSON、YAML、Markdown、HTML;字段覆盖异常类型、对象、指标、时间窗口、根因、证据链和建议 以最终真机报告重新生成提交材料
多平台适配 部分完成 Ubuntu x86_64、Debian x86_64、Kernel 6.6+ 已有归档;提供 apt/dnf/yum/zypper 安装入口 openKylin 是赛题基础环境,仍需补真实运行归档;ARM64/RISC-V 属于加分补测
异常识别准确率 能力已实现,量化证据待加强 五类标准压力场景可自动归类 增加多轮 Ground Truth 测试,统计正确率、误报率和漏报率
根因定位准确率 能力已实现,量化证据待加强 可定位进程、线程、syscall、设备/文件、锁/futex、热点函数和调用栈 统计各场景根因 Top-1、对象命中率和失败案例
证据链一致性 已实现 finding 保留关键指标、对象关联、证据步骤、置信度来源和复核路径 最终真机复测后更新证据清单与 SHA256
CPU/内存开销 已提供测量 业务影响和稳定性脚本记录诊断进程 CPU、RSS 最终机器运行 60 秒以上、重复 3 次
平均/P99/吞吐影响 已提供测量 业务压测矩阵输出基线与诊断期间的平均时延、P99、吞吐变化 最终机器长测,使用均值与波动作为提交数据
代码规范 已完成 pytest、ruff、模块化目录、CI 工作流 提交前运行最终质量门禁
文档完整性 基本完成 安装、使用、测试、开发、交付、限制和平台复测文档 按最终提交模板整理项目说明书和 PPT
复现脚本 已完成 install-and-run.shrun.sh real、五类 demo、平台和容器验证脚本 在全新 openKylin 环境复核一键安装
测试说明 已完成 docs/testing.mddocs/testing_zh.md、自动化测试和示例输出 将最终 openKylin 实测日志纳入提交包

当前代码和报告链路可以复现与评审,但“代码能力已实现”不等于“对应平台或量化分值已经取得”。提交前优先补 openKylin Kernel 6.6+ 真实闭环、准确率统计和长时间性能开销三类证据。

快速看到结果

如果只是想快速看到一组可展示产物:

bash run.sh smoke
cat reports/smoke/smoke_result.md

它会调用轻量 quick 流程,生成 5 类异常 dry-run 诊断、JSON/YAML/Markdown/HTML 输出、中文摘要、验收矩阵和 schema_check.md/json。最适合刚迁移到新系统、2C2G 云服务器先跑通、或给评委快速复核入口。

如果想直接生成默认快速演示目录:

bash run.sh quick
cat reports/quick/index.md

它会生成 dry-run 诊断、scheduler 快速演示、中文摘要、HTML 报告、验收矩阵和一个统一索引,适合开发机或刚迁移到新系统时先验流程。若当前系统不支持真实 scheduler 采集,索引会保留缺失/待验证状态。

生成后最方便查看的是:

reports/quick/打开报告.html  # 双击打开最新 HTML 报告
reports/quick/latest.html    # 最新 HTML 报告
reports/quick/index.md       # 所有产物索引

在云服务器或真实 Linux 主机上跑完整闭环:

bash run.sh real reports/real-host

该命令会执行 5 类基础异常、调度链路、业务影响测量、结构化总报告和验收矩阵,并生成 reports/real-host/打开报告.html。这是后续把 dry-run 证据替换成真实主机证据的主入口。

高分冲刺自测入口:

bash run.sh score-sprint reports/score-sprint

默认使用轻量 quick 模式,适合 2C2G 服务器先验证完整链路;最终答辩机器上建议运行:

bash run.sh score-sprint reports/score-sprint --full

默认命令会串联快速五类异常、低开销业务压测、容器补测入口和平台补测入口,并输出 reports/score-sprint/score_sprint.mdreports/score-sprint/score_sprint.jsonreports/score-sprint/score_sprint_schema_check.mdreports/score-sprint/score_sprint_schema_check.json--full 才会额外重跑最终 review/提交材料链路。container_retest 在没有 Docker/Podman 的环境中可能显示 needs_review,这表示容器真测待 Linux 容器环境补证,不代表轻量链路失败。score_sprint 摘要会同步读取 reports/showcase/evidence_maturity.json,显示证据成熟度、弱项数量和下一步真机补证动作。

最适合演示的一条命令:

bash run.sh demo cpu

脚本会自动制造一个 CPU 压力场景,运行 CPU 诊断,并在终端打印 reports/latest_summary.md 的中文可读摘要。输出文件包括:

reports/cpu_real.json        # 完整机器可读结果
reports/latest_summary.md    # 中文可读摘要
reports/cpu_stress.log       # 压力工具日志

内存压力演示:

bash run.sh demo memory

默认参数会使用较保守的内存压力,适合 2 核 2G 云服务器先跑通。输出文件包括:

reports/memory_real.json             # 完整机器可读结果
reports/latest_memory_summary.md     # 中文可读摘要
reports/memory_stress.log            # 压力工具日志

I/O 延迟抖动演示:

bash run.sh demo io

脚本会启动随机读写压力,运行 I/O 诊断,并生成中文可读摘要:

reports/io_real.json                 # 完整机器可读结果
reports/latest_io_summary.md         # 中文可读摘要
reports/io_stress.log                # 压力工具日志

如果已经有 JSON 诊断结果,也可以单独生成摘要:

anomdiag summarize reports/cpu_real.json --output reports/latest_summary.md
cat reports/latest_summary.md

调度延迟 / 运行队列压力演示:

bash run.sh demo scheduler

输出文件包括:

reports/scheduler_real.json          # 完整机器可读结果
reports/latest_scheduler_summary.md  # 中文可读摘要
reports/scheduler_stress.log         # 压力脚本日志

常用命令

查看支持的诊断目标:

bash run.sh targets

在任意开发环境验证流程:

bash run.sh diagnose all --duration 5 --dry-run --format markdown

采集 CPU 异常信号并输出 JSON:

anomdiag diagnose cpu --duration 30 --format json --output reports/cpu.json

采集内存压力信号并输出 JSON:

anomdiag diagnose memory --duration 10 --format json --output reports/memory.json

采集 I/O 延迟信号并输出 JSON:

anomdiag diagnose io --duration 10 --format json --output reports/io.json

输出完整 Markdown 报告:

anomdiag diagnose cpu --duration 30 --format markdown --output reports/cpu.md

输出 YAML 结构化报告:

anomdiag diagnose all --duration 10 --format yaml --output reports/diagnosis.yaml

输出 HTML 报告:

anomdiag diagnose all --duration 10 --format html --output reports/diagnosis.html

结构化诊断字段

diagnose 输出会保留原始 metricsfindings,同时增加 diagnosis 顶层字段,便于机器解析和人工复核:

diagnosis.schema_version              # 报告结构版本
diagnosis.time_window                 # 观测开始/结束时间、持续时间、采样间隔
diagnosis.automatic_classification    # CPU/I/O/内存/锁/syscall 自动归类
diagnosis.primary_cause               # 多异常并发时的主因
diagnosis.findings_ranked             # 按严重级别和置信度排序的异常列表
diagnosis.correlations                # 多维关联关系
diagnosis.runtime_overhead            # 采集方式、指标数量、开销测量说明
diagnosis.container_observability     # 容器运行时、container ID、cgroup 上下文
diagnosis.plugins                     # 内置插件清单和扩展点
diagnosis.compatibility_matrix        # 架构、发行版、内核适配矩阵

每条 finding 也会补充:

anomaly_type             # 异常类型
related_processes        # 关联进程
related_threads          # 关联线程,存在 tid 时自动填充
related_resources        # 块设备、文件路径、锁实例、syscall 等资源
container_context        # Docker / Podman / containerd / cgroup 信息
key_metrics              # 支撑判断的关键指标
time_window              # 当前结论对应的观测窗口
suspected_root_cause     # 疑似根因
evidence_chain           # 为什么这么判断的证据链
recommendations          # 建议性结论
confidence               # 诊断置信度
rank                     # 主因排序

当前 CPU、内存、I/O 已能稳定形成真实闭环;CPU 已补线程级热点、热点函数和用户态栈样本,I/O 已补文件路径,锁竞争已补线程等待、wchan/futex 热点和 futex 栈样本,syscall 已补具体调用、错误码和慢调用栈样本;容器/cgroup 上下文、插件清单和 HTML 报告也已接入。

平台适配说明:当前已归档 Ubuntu x86_64 与 Debian x86_64 真实证据,其中 Debian 归档覆盖 Kernel 6.6+ 环境;openKylin、openEuler、Anolis、ARM64、RISC-V 走 procfs 基线兼容设计,eBPF 路径需要目标系统提供 tracefs/debugfs 与 bpftrace tracepoints。anomdiag doctor 会输出当前机器的架构、发行版、内核和兼容矩阵。

旧命令 anomdiag run --target cpu 仍然可用,diagnose 是更适合比赛演示的别名。

兼容性

  • 在主流 Linux 发行版上,procfs 基线模式通常可用。
  • 需要 eBPF/bpftrace 的目标,要求 Linux 内核、root 权限、tracefs/debugfs 和 bpftrace 可用。
  • 如果 eBPF 条件不足,工具会自动降级,并在报告中标明当前采集模式。
  • Windows 本机可以用 --dry-run 做流程开发;真实 eBPF 采集应放在 Linux 机器或云服务器上。

异常复现

bash scripts/reproduce/cpu_stress.sh
bash scripts/reproduce/io_stress.sh
bash scripts/reproduce/memory_stress.sh
bash scripts/reproduce/lock_stress.sh

建议先启动对应复现脚本,再运行 anomdiag diagnose <target> 采集诊断结果。

锁竞争诊断示例:

bash scripts/reproduce/lock_stress.sh 20 8 &
anomdiag diagnose lock --duration 8 --format json --output reports/lock.json
anomdiag summarize reports/lock.json --output reports/latest_lock_summary.md

开发

python -m pytest
python -m ruff check .

质量门禁一键复核:

bash run.sh final-check reports/ci-check

该命令会串联 Bash 语法检查、pytest、ruff、轻量跑通、发布自检、最终评审链路和提交包复核,并生成 reports/ci-check/quality_gate_summary.mdreports/ci-check/submission_check.md/json,适合作为提交前的标准自测入口。CI 内部仍使用 scripts/ci_check.sh

开销测量:

bash scripts/bench/overhead.sh 10 reports
cat reports/overhead.md

更多开发说明见 docs/development.md,测试与复现说明见 docs/testing.md

答辩看板

比赛展示时建议优先运行:

bash run.sh showcase reports/showcase

它会基于 quick 证据生成一个中文最终演示页面,把五类异常定位、关键证据、验收矩阵、真实平台归档和现场复测命令汇总到一个入口。生成后优先打开:

reports/showcase/打开报告.html
reports/showcase/showcase.html
reports/showcase/showcase.md
reports/showcase/showcase_summary.json
reports/showcase/one_minute_review.md
reports/showcase/one_minute_review.json
reports/showcase/requirements_audit.md
reports/showcase/requirements_audit.json
reports/showcase/showcase_check.md
reports/showcase/schema_check.md
reports/showcase/schema_check.json
reports/showcase/evidence_timeline.md
reports/showcase/evidence_timeline.json
reports/showcase/evidence_linkage.md
reports/showcase/evidence_linkage.json
reports/showcase/rulebook.md
reports/showcase/rulebook.json
reports/showcase/defense_faq.md
reports/showcase/defense_faq.json
reports/showcase/final_runbook.md
reports/showcase/final_runbook.json
reports/showcase/defense_script.md
reports/showcase/evidence_manifest.json
reports/showcase/evidence_manifest.md
reports/showcase/final_acceptance.json
reports/showcase/final_acceptance.md
reports/showcase/submission_index.json
reports/showcase/submission_index.md
reports/showcase/submission_boundary.json
reports/showcase/submission_boundary.md
reports/showcase/scorecard.json
reports/showcase/scorecard.md
reports/showcase/platform_test_plan.json
reports/showcase/platform_test_plan.md
reports/showcase/gap_audit.json
reports/showcase/gap_audit.md
reports/showcase/score_review.json
reports/showcase/score_review.md
reports/showcase/overhead_budget.json
reports/showcase/overhead_budget.md
reports/showcase/provenance_audit.json
reports/showcase/provenance_audit.md
reports/showcase/container/container_readiness.md
reports/showcase/container/container_readiness.json

其中 one_minute_review.md/json 是评委一分钟摘要,快速展示结论、主因排序、评分点和必看材料;requirements_audit.md/json 是最终要求逐项审计表,逐条说明完成状态、证据和待真机项;showcase_summary.json 适合机器解析和复核,包含五类异常、主因排序、复核路径、评分点映射、业务影响、平台归档、关键产物和复现命令;showcase_check.md 是最终演示材料完整性校验,要求未通过项为 0;schema_check.md/json 是核心诊断 JSON 与演示交付 JSON 的 Schema 契约校验结果;submission_boundary.md/json 用于解释“当前包可提交”与“仍有待真机补证项”之间的边界,列出可安全宣称和不应夸大的内容;scorecard.md/json 是高分证据卡,汇总评分项证据强度、待真机项和复测命令;platform_test_plan.md/json 是跨平台真机补测计划,列出 openKylin、openEuler、Anolis、Debian、ARM64、RISC-V、Kernel 6.6+ 的复测命令和归档目录;gap_audit.md/json 是最终差距审计,集中展示已验证项、待真机项、不能夸大宣称和下一步冲刺命令;score_review.md/json 是最终评分预审,按评分维度给出保守自评分、冲刺上限、扣分原因和满分条件;evidence_maturity.md/json 是证据成熟度分级,按高分项标出可展示、当前系统较完整、真机可复核、跨平台增强和待补证状态;overhead_budget.md/json 是低开销预算审计,集中复核平均延迟、P99、吞吐、CPU 和 RSS 是否在阈值内;provenance_audit.md/json 是提交溯源审计,记录 git 版本、提交包 SHA256、关键报告哈希和新鲜度风险;evidence_timeline.md/json 按 rank 汇总时间窗口、目标对象、关键指标、证据链和建议,便于复核“为什么这么判断”;final_runbook.md/json 是最终答辩运行手册,包含 10 分钟演示流程、预期结果、证据路径和现场兜底;defense_script.md 是答辩讲解稿,按演示顺序列出该说什么、打开哪些产物;evidence_manifest.json/md 是带 SHA256 的证据清单;final_acceptance.json/md 是最终提交验收结论;submission_index.json/md 是提交包索引,说明每个关键文件的用途和查看顺序。

container/container_readiness.md/json 用于说明容器观测是否已经完成真实闭环。如果当前服务器没有 Docker/Podman/containerd,它会明确标记为待真机项,并列出通过标准和复测命令;只有目标容器进程、线程、cgroup CPU/memory 和证据链都命中时,才会标记为可以宣称真实容器闭环通过。

生成最终比赛提交 zip:

bash run.sh submit-package

产物会放在 dist/anomdiag-submission-<commit>.zip,包含最终看板、验收结论、提交索引、证据清单、讲解稿、结构化诊断报告和 source/ 源码快照;同时生成 *.check.md/json 自检结果。提交包自检会复核 manifest、SHA256、源码快照、一键脚本、shell 便携性和 source/.gitattributes 换行策略。

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

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