项目介绍
机器变慢时,CPU、I/O 和内存指标往往一起变化。麒麟脉镜从内核事件入手,沿着“异常发生了什么、影响了谁、依据是什么”这条线索,把诊断结果落到具体的线程、进程或资源上。排查人员可以从根因候选回看窗口统计,再找到支持判断的事件和探针来源。
项目面向 openKylin,观察 CPU、I/O、Memory、Lock 和 Syscall 五类异常。日常运行可以保持较轻的采集范围;出现可疑活动后,自适应运行时围绕目标加深诊断,再逐步回到常态观测。
传统监控擅长画出整机指标曲线,但曲线升高之后,仍需在多个工具之间寻找进程、内核事件和异常机制的联系。OAS 把采集、窗口聚合、异常判断、实体归因和根因排序放进同一条诊断链。报告不仅给出结果,还记录指标、测量方式、阈值来源、候选实体和证据状态。
五类事件使用统一的时间与身份字段。遇到异步 I/O 或后台回收一类难以精确归属的活动,报告会保留候选和证据边界,让目标进程与外部系统活动分开呈现。
架构图中的 A 到 D 是数据路径,E、F 分别管理采集深度和平台能力;蓝色实线表示数据流,橙色虚线表示控制流。
从探针捕获事件到生成报告,数据依次经过内核态状态维护、ring buffer 传输、用户态规范化、事件存储、窗口聚合与分析。需要逐条解释的记录会进入事件存储;高频指标可以先在内核侧聚合。图中的每一步都对应一次明确的数据处理,便于从最终报告回看采集来源。
OAS 将 event、窗口聚合快照、finding 和最终 report 分开建模。高频事件可以先聚合,但聚合结果不会被写成一条不存在的原始事件。这样一来,报告里的引用可以回到实际保存的事件或快照。
检测层结合固定阈值、Z-score、中位数绝对偏差(MAD)、CUSUM 等方法。每种方法先检查输入是否有效,再记录自己在本次判断中的贡献:使用了什么基线、触发了什么条件、为何跳过或使用后备方法。根因排序先生成与异常类型相符的实体候选,再结合证据完整性、关联关系与可追溯性给出稳定的 Top-1、Top-3 结果。
Memory 定向诊断还检查当前访问窗口中的新鲜证据。报告能区分这次访问真正采到的事件与先前窗口留下的记录。沿着一条 finding,可以查到其证据状态、窗口快照、原始事件与探针来源;图中最后的记录环节对应本次运行及交付文件的身份校验。
不同任务需要不同的采集深度。长期观测优先控制事件量;短时取证则可以围绕可疑实体提高细节。运行时从 LOW_OVERHEAD 出发,在分数与停留时间达到条件时自然进入 TARGETED,必要时继续进入 EXHAUSTIVE。回落受 hysteresis、cooldown 和资源预算约束;运行时通过控制映射调整作用域,并复用已加载的采集会话。
LOW_OVERHEAD
TARGETED
EXHAUSTIVE
项目主要在 Linux/openKylin 上构建和运行。平台能力矩阵记录了 x86_64、ARM64、RISC-V 的已验证范围;实际可挂接的探针还取决于当前内核提供的 BTF、tracepoint 和 kprobe 等能力。
bpftool
在使用 apt 的 openKylin 环境,可以先安装常用开发包;包名如随发行版变化,以本机软件源为准:
sudo apt update sudo apt install build-essential pkg-config python3 clang llvm \ libbpf-dev libelf-dev zlib1g-dev libzstd-dev
bpftool 可单独安装;缺少它时,构建脚本会按仓库中的 min_core.h 路径处理。检查工具链和头文件:
min_core.h
make check-deps
克隆仓库后,在项目根目录执行:
make -j2
项目不要求安装到系统目录;构建产物放在 src/dist/,可直接从这里运行。make 优先构建实时 BPF 程序和用户态程序;如果机器缺少实时构建依赖,它可能只生成演示版,或者在已有受支持产物时使用仓库提供的预构建文件。要明确构建当前源码的普通实时版本,请在依赖齐全时运行:
src/dist/
make
make -C src build ls src/dist/oas src/dist/bpf/*.bpf.o
应得到用户态程序和五个 BPF 对象。编译和运行发生在同一目标机时,BPF 架构参数由构建脚本依据 uname -m 选择。
uname -m
先看命令行选项,再用确定性演示熟悉报告:
./src/dist/oas --help make demo # 或 bash demo/run.sh
演示约运行 5 秒,在终端输出 JSON 报告;它不加载 BPF。需要观察当前机器的真实内核活动时,请使用 live 模式:
live
sudo ./src/dist/oas --mode live --duration 30 --format json \ --config src/configs/openkylin.yaml \ --bpf-dir src/dist/bpf --out /tmp/oas-report.json
JSON 报告写入 /tmp/oas-report.json,相邻的 /tmp/oas-report.raw-events.ndjson 保存本次原始事件。看一条 finding 时,可以依次核对异常类型与时间窗口、实体身份、测量和阈值来源、根因候选,以及 trace_refs 和 evidence_chain 中的引用。
/tmp/oas-report.json
/tmp/oas-report.raw-events.ndjson
trace_refs
evidence_chain
页面源码位于 src/web/。它展示已有的验证摘要和平台能力,不会从浏览器启动 live 任务。完整证据数据在位的工作树可从项目根目录启动:
python3 src/web/serve.py --host 127.0.0.1 --port 4173
浏览器访问 http://127.0.0.1:4173/。当前精简提交主要保留页面、接口和验证工具;页面所读取的冻结证据 JSON 需与 src/web/serve.py 中的路径一同提供。
http://127.0.0.1:4173/
src/web/serve.py
make test
在项目根目录运行此命令。测试包括 C 单元逻辑、事件 ABI、状态转换、负载协议、测量语义及报告校验。想先确认基本演示入口,可运行 make demo;要验证真实内核采集,则需要在具备 BPF 权限和相应内核能力的 Linux 主机上运行前述 live 命令,检查输出报告及原始事件。需要查看输出字段时,可从 诊断报告 Schema 和 根因排序 Schema 入手;规则与阈值配置在 src/rules/ 和 src/configs/。
make demo
决赛阶段的系统设计、实验口径和结果写在项目说明书,主要创新与对应代码、验证依据写在项目创新说明。不同架构的实际挂接能力以平台矩阵和运行报告为准。
README.md 项目介绍、环境依赖、安装、构建、运行与测试入口 src/ 用户态程序、五类 BPF 探针、配置、规则、Schema 和 Web 页面 tests/ 单元测试、协议测试、测试输入和场景脚本 demo/ 一键演示脚本与说明 docs/ 项目说明书、创新与分工材料、工具声明及架构图 presentation/ 决赛演示 PPT、PDF 和 MP4 视频
PARTIAL_FALLBACK
low_overhead
balanced
项目许可证见 LICENSE,第三方组件及使用边界见 THIRD_PARTY_NOTICES.md。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
麒麟脉镜(OAS)
项目简介
机器变慢时,CPU、I/O 和内存指标往往一起变化。麒麟脉镜从内核事件入手,沿着“异常发生了什么、影响了谁、依据是什么”这条线索,把诊断结果落到具体的线程、进程或资源上。排查人员可以从根因候选回看窗口统计,再找到支持判断的事件和探针来源。
项目面向 openKylin,观察 CPU、I/O、Memory、Lock 和 Syscall 五类异常。日常运行可以保持较轻的采集范围;出现可疑活动后,自适应运行时围绕目标加深诊断,再逐步回到常态观测。
先看哪里
应用场景与主要功能
传统监控擅长画出整机指标曲线,但曲线升高之后,仍需在多个工具之间寻找进程、内核事件和异常机制的联系。OAS 把采集、窗口聚合、异常判断、实体归因和根因排序放进同一条诊断链。报告不仅给出结果,还记录指标、测量方式、阈值来源、候选实体和证据状态。
五类事件使用统一的时间与身份字段。遇到异步 I/O 或后台回收一类难以精确归属的活动,报告会保留候选和证据边界,让目标进程与外部系统活动分开呈现。
总体架构
架构图中的 A 到 D 是数据路径,E、F 分别管理采集深度和平台能力;蓝色实线表示数据流,橙色虚线表示控制流。
从内核事件到诊断报告
从探针捕获事件到生成报告,数据依次经过内核态状态维护、ring buffer 传输、用户态规范化、事件存储、窗口聚合与分析。需要逐条解释的记录会进入事件存储;高频指标可以先在内核侧聚合。图中的每一步都对应一次明确的数据处理,便于从最终报告回看采集来源。
异常检测与根因定位
OAS 将 event、窗口聚合快照、finding 和最终 report 分开建模。高频事件可以先聚合,但聚合结果不会被写成一条不存在的原始事件。这样一来,报告里的引用可以回到实际保存的事件或快照。
检测层结合固定阈值、Z-score、中位数绝对偏差(MAD)、CUSUM 等方法。每种方法先检查输入是否有效,再记录自己在本次判断中的贡献:使用了什么基线、触发了什么条件、为何跳过或使用后备方法。根因排序先生成与异常类型相符的实体候选,再结合证据完整性、关联关系与可追溯性给出稳定的 Top-1、Top-3 结果。
Memory 定向诊断还检查当前访问窗口中的新鲜证据。报告能区分这次访问真正采到的事件与先前窗口留下的记录。沿着一条 finding,可以查到其证据状态、窗口快照、原始事件与探针来源;图中最后的记录环节对应本次运行及交付文件的身份校验。
自适应运行
不同任务需要不同的采集深度。长期观测优先控制事件量;短时取证则可以围绕可疑实体提高细节。运行时从
LOW_OVERHEAD出发,在分数与停留时间达到条件时自然进入TARGETED,必要时继续进入EXHAUSTIVE。回落受 hysteresis、cooldown 和资源预算约束;运行时通过控制映射调整作用域,并复用已加载的采集会话。系统环境与依赖
项目主要在 Linux/openKylin 上构建和运行。平台能力矩阵记录了 x86_64、ARM64、RISC-V 的已验证范围;实际可挂接的探针还取决于当前内核提供的 BTF、tracepoint 和 kprobe 等能力。
bpftool可生成匹配当前内核的类型头文件。在使用 apt 的 openKylin 环境,可以先安装常用开发包;包名如随发行版变化,以本机软件源为准:
bpftool可单独安装;缺少它时,构建脚本会按仓库中的min_core.h路径处理。检查工具链和头文件:安装与构建
克隆仓库后,在项目根目录执行:
项目不要求安装到系统目录;构建产物放在
src/dist/,可直接从这里运行。make优先构建实时 BPF 程序和用户态程序;如果机器缺少实时构建依赖,它可能只生成演示版,或者在已有受支持产物时使用仓库提供的预构建文件。要明确构建当前源码的普通实时版本,请在依赖齐全时运行:应得到用户态程序和五个 BPF 对象。编译和运行发生在同一目标机时,BPF 架构参数由构建脚本依据
uname -m选择。运行方法
先看命令行选项,再用确定性演示熟悉报告:
演示约运行 5 秒,在终端输出 JSON 报告;它不加载 BPF。需要观察当前机器的真实内核活动时,请使用
live模式:JSON 报告写入
/tmp/oas-report.json,相邻的/tmp/oas-report.raw-events.ndjson保存本次原始事件。看一条 finding 时,可以依次核对异常类型与时间窗口、实体身份、测量和阈值来源、根因候选,以及trace_refs和evidence_chain中的引用。只读 Web 面板
页面源码位于 src/web/。它展示已有的验证摘要和平台能力,不会从浏览器启动 live 任务。完整证据数据在位的工作树可从项目根目录启动:
浏览器访问
http://127.0.0.1:4173/。当前精简提交主要保留页面、接口和验证工具;页面所读取的冻结证据 JSON 需与src/web/serve.py中的路径一同提供。测试方法与验证材料
在项目根目录运行此命令。测试包括 C 单元逻辑、事件 ABI、状态转换、负载协议、测量语义及报告校验。想先确认基本演示入口,可运行
make demo;要验证真实内核采集,则需要在具备 BPF 权限和相应内核能力的 Linux 主机上运行前述live命令,检查输出报告及原始事件。需要查看输出字段时,可从 诊断报告 Schema 和 根因排序 Schema 入手;规则与阈值配置在 src/rules/ 和 src/configs/。决赛阶段的系统设计、实验口径和结果写在项目说明书,主要创新与对应代码、验证依据写在项目创新说明。不同架构的实际挂接能力以平台矩阵和运行报告为准。
项目文件
已知限制
PARTIAL_FALLBACK;RISC-V 的部分 Syscall 兼容入口只记录活动,不提供返回值与时延测量。low_overhead或balanced配置。许可证
项目许可证见 LICENSE,第三方组件及使用边界见 THIRD_PARTY_NOTICES.md。