Deepsight 工程设计文档
1. 项目文件架构
为了确保 “重边缘、轻中心” 的设计哲学在落地时得以高效实现,项目采用 Monorepo(单仓) 架构。结构设计强调数据管线的物理映射,并在底层网络极限压缩与顶层 LLM 语义透明之间做出了严谨的模块解耦。
1.1 目录结构
plaintext
Deepsight/
├── docs/ # [文档] 架构设计、开发手册与用户指南
├── proto/ # [契约] Protobuf 接口定义 (单一事实来源)
│ ├── v1/ # 核心 RPC 接口 (基于 oneof 联合体,保留动态字典同步机制)
│ ├── common/ # 全局枚举与基础类型
│ └── modules/ # 模块载荷 (network, storage 等强类型定义)
├── api/ # [生成] 自动生成的 Go/C 契约代码 (受 Git 显式追踪保护)
├── 3rd/libbpf # [拉取] Git Submodule 拉取的底层 libbpf 库
├── probe/ # [边缘] Deepsight 探针 (C + Go 双体架构)
│ ├── bpf/ # [内核态] eBPF C 源码 (基于 CO-RE 编写)
│ ├── loader/ # 基于 cilium/ebpf 的探针生命周期管理
│ ├── exporter/ # [上行出口] 处理 PushTelemetry 单向流
│ ├── transformer/ # [用户态] 符号翻译、字典 ID 分配、令牌桶限流 (熔断保护)
│ ├── executor/ # [下行执行] 监听 TaskChannel 追踪指令
│ └── cmd/ # 探针入口程序
├── server/ # [中心] Deepsight 复合网关 (Go)
│ ├── ingester/ # [接入层] gRPC 服务端,执行字典反向映射与语义延迟翻译
│ ├── buffer/ # [记忆引擎] 冷热分级缓存 (纯内存 Metrics + 内嵌 KV 事件持久化)
│ ├── mcp/ # [外交官] MCP 协议适配与大模型 Prompt 约束
│ ├── dispatcher/ # [调度层] 负责长短任务智能分流 (同步阻塞 vs 凭证 Ticket)
│ └── cmd/ # 网关入口程序 (常态化守护进程)
├── internal/ # [私有] 跨模块共享的私有库
│ └── deps/ # 固化底层外部运行时 (如 ebpf/grpc) 防 go mod tidy 误删
├── configs/ # [配置] 环境参数与 MCP Prompts 专家 SOP 模板
├── scripts/ # [工具] 自动化运维与 DevOps 脚本矩阵
│ ├── setup/ # 系统环境与项目级初始化配置
│ ├── dev/ # 特权隔离的编译与本地测试入口
│ └── tests/ # 内核负载刺激与探针触发源
└── tests/ # [集成] 需要 Root 权限的端到端 (E2E) 测试链1.2 模块设计要点
- 网络与语义解耦:底层 RPC 通信采用增量动态字典压缩长字符串以保护物理带宽。网关
ingester模块负责执行“延迟翻译”,将整型 ID 还原为纯文本,结合强类型oneof联合体,确保直接为 LLM 提供所见即所得的明文 JSON。 - 状态一致性与会话隔离:引入基于
session_token的字典生命周期管理。面对进程重启或网络闪断,Probe 会在重连时上报全量字典;Server 端则通过安全覆盖当前活跃字典并颁发新会话 Token,完美解耦探针物理状态的脆弱性与历史数据的连贯性。 - 边缘熔断保护:在
transformer模块强制引入令牌桶限流。当内核发生高频异常风暴时触发同质化事件截断,仅向上传递高价值样本与截断计数,确保宿主机 CPU 安全。 - 长短任务智能调度:MCP 交互基于耗时采取分流策略。短任务(<15s)采用同步阻塞模式直接返回闭环结果;长耗时任务(>15s)下发任务凭证(Ticket),配合 Prompt 强制约束 LLM 结束当前回合,稍后凭 Ticket 提取数据。
- 双体探针架构:Probe 采用 C + Go 的黄金组合。C 语言负责受限内核态的安全“采矿”,Go 语言负责用户态的符号翻译、字典压缩与高并发网络传输。
2. 项目管理
项目采用 “契约驱动” 模式,为了支撑 eBPF 复杂底层与双语言开发,工程基础底座由“三剑客”与分层测试体系共同构建:
2.1 基础设施三剑客
- 环境依赖 (
scripts/setup/):init.sh负责 C 编译链、eBPF 工具链以及 Go 环境的系统级拉起。setup.sh负责生成项目配置(vmlinux.h,.clangd),并在本地注入 Git Hooks。
- 构建与防线 (
Makefile):- 彻底剥离运行属性,专注静态处理。
- 执行
make build闭环双端编译,利用go generate ./probe/...动态扫描并挂载 eBPF 编译链。 - 利用
make fmt与make lint守卫代码底线(已绑定至 pre-commit hook)。
- 特权运行与调试 (
scripts/dev/):run_probe.sh与run_server.sh,专门处理提权(sudo)、环境变量配置和复杂的调试前置条件,屏蔽直接操作二进制的风险。
2.2 测试分层策略
根据 eBPF 项目的特性,测试分为两道物理隔离的防线:
- 纯用户态逻辑测试 (Unit Tests):就近存放(如
transformer_test.go),与业务代码同目录混排,不触碰内核,通过make test极速验证。 - 端到端集成测试 (E2E Tests):统一放置于根目录
tests/文件夹中。此类测试强依赖真实内核环境和 Root 权限,专门用于验证探针注入和事件消费链路。
2.3 资产管理
- 提示词即代码 (Prompt as Code):将 LLM 专家诊断 SOP (Prompts) 作为核心系统资产,统一存放于
configs/目录。支持 Server 启动时热加载,实现 AI 诊断逻辑与核心代码的生命周期解耦。
3. 项目交付
Deepsight 的交付物旨在实现 “单一二进制分发、冷热状态自闭环”。
3.1 产出形态
- Probe (边缘):
- 形态:包含嵌入式 eBPF 字节码的单一 Go 二进制文件。
- 职责:极致轻量化,专注数据提取、限流与高压缩比推送,不承载持久化逻辑。
- Server (中心):
- 形态:复合型有状态守护进程 (Stateful Daemon)。
- 特性:采用冷热分级存储架构。纯内存 FIFO 数组保障 Metrics 极速响应,底层轻量级内嵌 KV 引擎(如 bbolt)结合特征防抖算法,强制以 100% 延迟翻译后的明文形态落盘,保障核心故障 Events 断电不丢失。
3.2 部署与网络关系
- 权限受控:Probe 必须以
root权限运行,以满足 eBPF 挂载及内核符号表读取的需求。 - 内向连接模型:Probe 启动后主动出站连接 Server 的 gRPC 端口,完美适配 VPC 防火墙拦截外部流量的规则。Server 仅被动监听内部数据流并对外暴露受控的 MCP HTTP 接口。
4. 实验性工程边界声明
为了在 V1.0 阶段快速验证“大模型感知系统底层”的核心链路,防止被 Day-2 的运维合规需求拖慢研发节奏,本项目在工程实现上确立以下“极致务实”的边界纪律:
- 内核支持策略 (CO-RE Only):
- 全面采用 CO-RE (Compile Once – Run Everywhere) 技术栈。
- 基线要求:目标宿主机必须开启 BTF (BPF Type Format) 特性,建议 Linux Kernel >= 5.8。
- 工程取舍:拒绝向后兼容无 BTF 的老旧内核,拒绝引入 BCC 运行时编译链,以确保 Probe 是一个极度纯净的单一 Go 二进制文件。
- 部署形态 (Bare Metal First):
- 首发版本仅面向物理机/虚拟机 (Bare Metal / VM)。
- 工程取舍:采用简单的 Systemd 守护进程部署即可。暂不考虑 Kubernetes DaemonSet 容器化部署带来的权限提权 (
privileged) 及命名空间穿透等繁杂问题。
- 安全与认证 (Zero-Friction Sec):
- gRPC 链路:采用明文 TCP 传输,暂不引入 mTLS 双向认证。
- MCP 接口:暂不设立 API Key 或 JWT 鉴权,避免复杂的审计日志库。
- 防御底线:安全防御彻底依赖于 VPC 网络层隔离。Server 端的所有监听端口(gRPC 与 HTTP)必须在配置中严格绑定为内网 IP 或
127.0.0.1,严禁绑定0.0.0.0暴露至公网。
- 自身可观测性 (Log as Metrics):
- 工程取舍:暂不引入 Prometheus、Grafana 等重量级时序指标系统。
- 替代方案:状态监控全面退化为日志。利用 Go 1.21+ 的
log/slog将 Probe 的限流截断次数、Server 的内存水位等信息,以结构化 JSON 格式定时输出至标准输出。同时保留一个极简的system://healthMCP Resource 供大模型执行基础探活。