docs(readme): 完善 C/S 架构与场景能力展示
从一次短暂的系统抖动出发,沿着时间窗口、进程线程和资源对象还原证据链,给出可复核的根因判断。
KOSMOS 是一套基于 eBPF 的系统异常观测与根因定位工具,覆盖 CPU、I/O、内存、锁竞争和系统调用热点 5 类异常。项目除了识别异常指标,还会继续回答“异常发生在哪个窗口、影响哪个进程或线程、由哪些指标共同证明、当前证据是否足以形成结论”。
传统监控通常止步于 CPU 使用率、磁盘时延或可用内存等单点指标。真实故障却往往跨越多个内核子系统:CPU 占用升高可能是用户态计算热点,也可能是运行队列拥堵;I/O 时延升高可能来自设备服务时间,也可能由写回压力或调度阻塞放大。
KOSMOS 将一次诊断组织为完整链路:
异常症状 └─> 同一时间窗口内的多子系统指标 └─> PID / TID / 设备 / 文件 / 锁实例 └─> 症状、机制、根因、佐证四类证据 └─> 可回溯的诊断结论与处理建议
例如面对“CPU 持续高于 90%”,系统会继续关联运行队列、线程调度等待、上下文切换和热点采样,区分用户态计算热点、内核热点、多线程饱和与调度竞争,并把命中的窗口、阈值和关联线程写入报告。
5 类场景通过共享场景契约组织为关联分析链路:
cpu
sched
runq
profiling
每条诊断发现都携带异常窗口、关联实体、实际值、阈值、单位和因果角色。系统完整保留每个窗口的规则条件、评估结果和判定原因,便于复核阈值、解释误报和重放分析过程。
规则引擎负责可重复的异常判定,AI Service 基于 Backend 生成的受控证据包提供第二诊断意见。系统会校验 AI 返回的证据 ID、PID 和 TID,只有能够对应真实观测数据的结果才会进入融合流程。
最终结论由确定性状态机裁决:
confirmed
partial
conflict
inconclusive
这种设计兼顾大模型的归纳解释能力与规则诊断的可重复性,保证最终根因能够对应实际观测证据。
KOSMOS 优先在内核侧处理高频信号。调度、缺页、I/O、锁、系统调用和性能采样等事件先在 BPF Map 中完成计数、直方图和 Top-N 聚合,再按窗口向用户态输出摘要。
aggregate
target_trace
system_trace
raw_debug
Agent 侧进一步使用目标过滤、按需采样、有界队列、元数据缓存和 PostgreSQL 批量写入控制放大效应。事件丢失、Map 压力和写入状态统一进入数据质量信息,供后续窗口处理和诊断裁决使用。
flowchart TB subgraph Client["C 端 · 被观测主机"] direction LR Kernel["Linux Kernel / procfs"] Agent["Agent能力探测 · eBPF 采集 · 预聚合"] Kernel --> Agent end subgraph Server["S 端 · 控制与分析服务"] direction TB subgraph Storage["PostgreSQL · 持久化与异步边界"] direction TB Raw["采集任务原始记录 · 聚合快照"] Result["分析结果窗口摘要 · 语义时间线"] end Processor["Processor窗口聚合 · 时间线 · 质量评估"] Backend["Backend任务编排 · 规则诊断 · 报告"] Frontend["Frontend观测工作台"] AI["AI Service(可选)证据驱动的第二意见"] Raw --> Processor Processor --> Result Result --> Backend Frontend <--> Backend Backend -->|"受控证据包"| AI AI -->|"独立诊断意见"| Backend end Backend -.->|HTTP 任务控制| Agent Agent -->|"PostgreSQL 数据写入"| Raw
C/S 模式下,C 端是被观测主机,只运行 Agent;S 端集中运行 PostgreSQL、Processor、Backend、Frontend 和可选 AI Service。Backend 通过 HTTP 控制 Agent 的采集任务,Agent 将采集记录和聚合快照写入 S 端 PostgreSQL。单机模式将两个区域部署在同一主机,复用相同的能力、事件和摘要契约。
KOSMOS 将观测完整度纳入诊断结论,并通过以下状态明确表达窗口的数据质量:
observed=true, no_events=true
observed=false, incomplete=true
以下示例用于展示结构化字段关系:
{ "overall_severity": "high", "summary": "检测到用户态计算热点", "findings": [ { "rule": "cpu_user_compute_hotspot", "rule_version": "competition-v1", "anomaly_type": "cpu_user_compute_hotspot", "suspected_root_cause": "目标线程长期占用 CPU,用户态热点样本集中", "related_pids": [1234], "related_tids": [1235], "evidence_chain": [ { "window_start_ns": 1000000000, "window_end_ns": 11000000000, "subsystem": "cpu", "metric": "cpu_usage_pct", "value": 9200, "threshold": 9000, "unit": "basis_points", "causal_role": "symptom" } ], "suggestions": ["检查热点线程及其调用栈"] } ], "limitations": [] }
报告可以继续下钻到逐窗口规则条件、跨子系统证据和线程级语义时间线,并可从工作台导出为 JSON。
项目通过共享契约和显式注册保持模块解耦:
contracts
新增观测子系统时,可以沿着“共享契约 → Collector → Processor Handler → Diagnosis Handler → Frontend Adapter”的扩展链路接入,通用流水线能够保持稳定。
基础环境为 openKylin 或其他 Linux 发行版、Kernel 6.6+、PostgreSQL、Go、Clang/LLVM、Node.js;Agent 需要 root 或等效的 eBPF、perf 和内核跟踪权限。
# 检查文档、契约、注册表和 CO-RE 构建 make test-architecture # 构建 Go 服务与前端 make build # 构建 Agent 分发包与 eBPF 对象 make build-ebpf # 启动本地完整栈 make run
部署前请阅读部署指南。规则引擎可以独立完成诊断,AI Service 可按需提供第二诊断意见。单机与 C/S 拆分部署的地址、权限和 PostgreSQL 配置以部署指南为准。
5 类标准场景均提供脚本入口:
make scenario-cpu make scenario-io make scenario-memory make scenario-lock make scenario-syscall
make test
make test-architecture
make test-core
make test-core-load
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
KOSMOS:基于 eBPF 的系统异常观测与根因定位工具
KOSMOS 是一套基于 eBPF 的系统异常观测与根因定位工具,覆盖 CPU、I/O、内存、锁竞争和系统调用热点 5 类异常。项目除了识别异常指标,还会继续回答“异常发生在哪个窗口、影响哪个进程或线程、由哪些指标共同证明、当前证据是否足以形成结论”。
项目定位
传统监控通常止步于 CPU 使用率、磁盘时延或可用内存等单点指标。真实故障却往往跨越多个内核子系统:CPU 占用升高可能是用户态计算热点,也可能是运行队列拥堵;I/O 时延升高可能来自设备服务时间,也可能由写回压力或调度阻塞放大。
KOSMOS 将一次诊断组织为完整链路:
例如面对“CPU 持续高于 90%”,系统会继续关联运行队列、线程调度等待、上下文切换和热点采样,区分用户态计算热点、内核热点、多线程饱和与调度竞争,并把命中的窗口、阈值和关联线程写入报告。
项目亮点
1. 从单项指标扩展到跨子系统关联
5 类场景通过共享场景契约组织为关联分析链路:
cpu、sched、runq和profiling,定位饱和核心、热点线程与函数;每条诊断发现都携带异常窗口、关联实体、实际值、阈值、单位和因果角色。系统完整保留每个窗口的规则条件、评估结果和判定原因,便于复核阈值、解释误报和重放分析过程。
2. 规则与 AI 协同,形成证据驱动的可信诊断
规则引擎负责可重复的异常判定,AI Service 基于 Backend 生成的受控证据包提供第二诊断意见。系统会校验 AI 返回的证据 ID、PID 和 TID,只有能够对应真实观测数据的结果才会进入融合流程。
最终结论由确定性状态机裁决:
confirmedpartialconflictconflictinconclusive并进入人工复核这种设计兼顾大模型的归纳解释能力与规则诊断的可重复性,保证最终根因能够对应实际观测证据。
3. 面向目标机开销设计的分层采集
KOSMOS 优先在内核侧处理高频信号。调度、缺页、I/O、锁、系统调用和性能采样等事件先在 BPF Map 中完成计数、直方图和 Top-N 聚合,再按窗口向用户态输出摘要。
aggregate用于默认持续观测;target_trace只跟踪指定目标及必要上下文;system_trace用于受时长限制的全系统调度分析;raw_debug用于短时、限量的原始事件排查。Agent 侧进一步使用目标过滤、按需采样、有界队列、元数据缓存和 PostgreSQL 批量写入控制放大效应。事件丢失、Map 压力和写入状态统一进入数据质量信息,供后续窗口处理和诊断裁决使用。
系统核心能力
系统架构
flowchart TB subgraph Client["C 端 · 被观测主机"] direction LR Kernel["Linux Kernel / procfs"] Agent["Agent能力探测 · eBPF 采集 · 预聚合"] Kernel --> Agent end subgraph Server["S 端 · 控制与分析服务"] direction TB subgraph Storage["PostgreSQL · 持久化与异步边界"] direction TB Raw["采集任务
原始记录 · 聚合快照"] Result["分析结果
窗口摘要 · 语义时间线"] end Processor["Processor
窗口聚合 · 时间线 · 质量评估"] Backend["Backend
任务编排 · 规则诊断 · 报告"] Frontend["Frontend
观测工作台"] AI["AI Service(可选)
证据驱动的第二意见"] Raw --> Processor Processor --> Result Result --> Backend Frontend <--> Backend Backend -->|"受控证据包"| AI AI -->|"独立诊断意见"| Backend end Backend -.->|HTTP 任务控制| Agent Agent -->|"PostgreSQL 数据写入"| Raw
C/S 模式下,C 端是被观测主机,只运行 Agent;S 端集中运行 PostgreSQL、Processor、Backend、Frontend 和可选 AI Service。Backend 通过 HTTP 控制 Agent 的采集任务,Agent 将采集记录和聚合快照写入 S 端 PostgreSQL。单机模式将两个区域部署在同一主机,复用相同的能力、事件和摘要契约。
5 类异常场景
KOSMOS 将观测完整度纳入诊断结论,并通过以下状态明确表达窗口的数据质量:
observed=true, no_events=true:观测完整,窗口内确实没有事件;observed=false, incomplete=true:当前窗口需要补充观测证据。赛题完成情况
诊断结果示例
以下示例用于展示结构化字段关系:
报告可以继续下钻到逐窗口规则条件、跨子系统证据和线程级语义时间线,并可从工作台导出为 JSON。
工程设计
项目通过共享契约和显式注册保持模块解耦:
contracts是跨组件能力、事件、场景和摘要结构的唯一事实来源;新增观测子系统时,可以沿着“共享契约 → Collector → Processor Handler → Diagnosis Handler → Frontend Adapter”的扩展链路接入,通用流水线能够保持稳定。
快速开始
基础环境为 openKylin 或其他 Linux 发行版、Kernel 6.6+、PostgreSQL、Go、Clang/LLVM、Node.js;Agent 需要 root 或等效的 eBPF、perf 和内核跟踪权限。
部署前请阅读部署指南。规则引擎可以独立完成诊断,AI Service 可按需提供第二诊断意见。单机与 C/S 拆分部署的地址、权限和 PostgreSQL 配置以部署指南为准。
复现与验证
5 类标准场景均提供脚本入口:
make testmake test-architecturemake test-coremake test-core-load项目导航