AetherOps — eBPF + AI Multi-Agent + K8s 自愈
基于 eBPF 内核探针的零侵入智能运维系统:eBPF 采集 → AI 多 Agent 分析 → K8s 分级自愈 。
Go 数据面可脱离认知面独立运行,内置本地专家规则引擎作为 LLM 降级方案。
flowchart TB
subgraph Kernel["Linux 内核"]
A1["kprobe tcp_sendmsg<br/>fentry tcp_close<br/>tracepoint inet_sock_set_state"]
A2["TC clsact<br/>丢包熔断"]
end
subgraph Go["Go 数据面 (Data Plane)"]
B["Ring Buffer<br/>事件采集"]
C["ServiceGraph<br/>滑动窗口 P95 + EMA"]
D["异常检测<br/>延迟 + 调用量 + 错误率"]
E["反向随机游走<br/>根因分析"]
F["MCP Server<br/>(:50052)"]
G["专家规则引擎<br/>(LLM 降级)"]
H["分级自愈执行<br/>TC 丢包 / Pod 重启"]
end
A1 --> B --> C
C --> D --> E
E --> G
E --> F
G --> H
F -- "JSON-RPC 2.0<br/>Streamable HTTP" --> I
subgraph Python["Python 认知面 (Cognitive Plane)"]
I["Supervisor Agent"]
J["Topology Analyst"]
K["Causal Analyst"]
L["LLM Diagnostician<br/>+ 启发式回退"]
M["Risk Assessor"]
N["Remediation Executor<br/>+ 恢复验证"]
I --> J & K & L & M & N
end
subgraph Safety["自愈安全层"]
O["金丝雀执行"]
P["爆炸半径门控"]
Q["频繁锁定"]
end
H --> Safety
Loading
探针
C 文件
Hook 点
测量内容
适用场景
tracer
bpf/net_trace.c
kprobe/kretprobe tcp_sendmsg
内核缓冲拷贝时间 (µs)
通用 TCP 流量拓扑
tcp_conntrack
bpf/tcp_conntrack.c
tracepoint sock/inet_sock_set_state
连接生命周期 RTT(~ms)
短连接 RTT 检测,tc netem 等网络级故障
tcp_rtt
bpf/tcp_rtt.c
fentry tcp_close
内核平滑 RTT(srtt_us)
连接关闭时读取内核 TCP 栈 RTT
tc_drop
bpf/tc_drop.c
TC clsact
丢包
自愈熔断
http_probe
bpf/http_probe.c
uprobe HTTP/gRPC handler
HTTP 请求耗时 + 状态码
HTTP 服务细分
redis_trace
bpf/redis_trace.c
kprobe tcp_sendmsg (6379 端口)
Redis 命令名 (GET/SET/MGET...)
Redis 协议发现
proto_classifier
bpf/proto_classifier.c
kprobe tcp_sendmsg
协议类型 (HTTP1/HTTP2/MySQL/Redis)
自动协议识别
trace_context
bpf/trace_context.c
kprobe tcp_sendmsg
W3C/Jaeger/Datadog TraceID/SpanID
指标-拓扑-trace 三位一体
关键设计:
tcp_rtt.c 使用 fentry/tcp_close + BPF_CORE_READ(tcp_sock, srtt_us) 直接读取内核平滑 RTT(cilium/ebpf tcprtt 模式,MIT License),零中间状态,比手动 send/recv 配对更可靠
tcp_conntrack.c 使用 tracepoint inet_sock_set_state 捕获 TCP 状态转换(BCC tcpstates 模式,BSD-2 License),tracepoint 直接提供五元组,无需 BPF_CORE_READ
各探针独立 Ring Buffer,消费 goroutine 并行处理,互不阻塞
RTT > 30s 的事件被丢弃(异常值);连接 < 1ms 在 BPF 侧过滤(失败/中止连接)
tcp_sendmsg 测量内核缓冲拷贝(~µs),不受网络延迟影响;网络级故障检测依赖 tcp_conntrack(连接级 wall-clock)和 tcp_rtt(内核 SRTT)双数据源
BPF verifier 约束:所有字符串比较展开为无循环字节匹配
三维异常评分 :延迟 (P95 偏离度) + 调用量 (QPS 突变) + 错误率
稳定基线 :EMA 平滑的 BaselineP95,仅在非异常窗口更新(BaselineGateMultiplier = 2.0)
反向随机游走 :从异常边沿拓扑反向传播,定位根因节点
故障聚类 :按节点+时间聚类异常模式
规则
检测条件
动作
cpu-throttle
同节点所有出边 P95 同时升高,错误率 < 1%
SCALE_UP
conn-pool-exhaustion
单条 DB 边高延迟+高错误,邻居边正常
POD_RESTART
network-partition
单节点所有边错误率 > 90%
TC_DROP
cascading-failure
延迟沿拓扑链递增
TC_DROP 隔离
retry-storm
调用量 > 3x 正常,延迟仅微增
CONFIG_CHANGE
降级链:LLM 诊断 → 本地专家规则 → 启发式 → "unknown"
机制
说明
金丝雀执行
先对 1 个 pod 执行 → 观察 30s → 异常分数下降才全量
爆炸半径门控
影响 > 20 服务 → 拒绝+升级人工;> 10 → 拒绝自动执行
频繁锁定
10 分钟内同一服务 3 次 → 锁定自动操作,强制人工介入
防抖冷却
同一节点自愈后 120s 冷却期
策略引擎
OPA 风格 JSON 策略文件,deny/warn 双重效果
Dry Run
影子模式:全流程诊断+决策,不实际执行
组件健康检查 :30s 周期检查 8 个 eBPF 组件状态
19 个 Prometheus 指标 :业务指标 (edge_latency, anomaly_score, root_cause_score)、自监控 (ringbuf_events, ringbuf_dropped, decision_latency, component_health)、协议指标 (redis_commands, http_requests)
自适应采样 :异常检测触发时自动从 100ms 降至 10ms 采样间隔
结构化审计日志 :AuditEntry 记录动作/目标/评分/策略/专家规则/金丝雀结果/MTTR
Linux 5.8+ (BPF CO-RE),libbpf ≥ 1.0
Go 1.24+
Python 3.11+ (认知面可选)
# 编译 eBPF 绑定 + Go 二进制
make build
# 本地运行(模拟延迟模式)
sudo SIMULATE_LATENCY=1 ./ebpf-local
# 或直接编译运行
go generate ./cmd/tracer/...
go build -o ebpf-local ./cmd/tracer/
sudo EBPF_IFACE=eth0 DRY_RUN=1 ./ebpf-local
cd python
pip install --break-system-packages -e .
export LLM_PROVIDER=deepseek
export LLM_API_KEY=your-key
python -m aetherops.demo
# 部署数据面 DaemonSet + 认知面 Deployment
kubectl apply -f deploy/ebpf-tracer.yaml
kubectl apply -f deploy/aetherops-core.yaml
# 或使用安装脚本
bash deploy/aetherops-install.sh
# Helm
helm install aetherops deploy/helm/aetherops
sudo bash deploy/nonk8s/install.sh
# 安装 systemd 服务:aetherops-tracer.service + aetherops-core.service
sudo systemctl start aetherops-tracer aetherops-core
所有配置通过环境变量覆盖,前缀 CFG_。
变量
默认值
说明
CFG_P95_MULTIPLIER
1.2
异常延迟阈值倍数
CFG_ANALYSIS_INTERVAL
15
分析间隔 (秒)
CFG_MITIGATION_COOLDOWN_SEC
120
自愈冷却时间 (秒)
CFG_MAX_SUSPECTS
5
最大嫌疑节点数
CFG_METRICS_ADDR
:2112
Prometheus 监听地址
CFG_MCP_ADDR
:50052
MCP 服务地址
CFG_TC_DROP_TTL
5
TC drop 规则 TTL (分钟)
CFG_HTTP_PROBE_TARGET
/proc/self/exe
uprobe 目标二进制
DRY_RUN
false
影子模式开关
EBPF_IFACE
ens33
网络接口名
POLICY_FILE
(空)
策略 JSON 文件路径
完整配置参考 docs/configuration.md 。
工具
说明
get_topology
获取当前服务拓扑(节点、边、异常分数)
evaluate_remediation
评估自愈动作的爆炸半径和风险等级
execute_remediation
通过分级执行管线执行自愈动作
check_policy
检查动作是否符合策略规则
list_policies
列出所有活跃的策略规则
资源
URI
说明
Current Topology
topology://current
实时拓扑快照 (JSON)
Anomaly Events
topology://anomalies
近期异常事件流
Policy Rules
policy://rules
活跃策略规则列表
指标
类型
说明
ebpf_edge_latency_ms
Histogram
边调用延迟
ebpf_edge_anomaly_score
Gauge
边异常分数
ebpf_root_cause_score
Gauge
根因嫌疑分数
ebpf_ringbuf_events_total
Counter
Ringbuf 事件量 (按 buffer)
ebpf_decision_latency_ms
Histogram
事件到决策的端到端延迟
ebpf_agent_health
Gauge
组件健康状态 (1/0)
ebpf_redis_commands_total
Counter
Redis 命令量 (按命令)
ebpf_http_requests_total
Counter
HTTP 请求量
完整指标列表见 docs/configuration.md 。
bpf/ # eBPF C 探针
cmd/tracer/ # Go 应用入口
internal/
config/ # 配置加载 (env → Config)
detection/ # 异常检测 + 根因分析 + 专家规则
errors/ # 错误哨兵
graph/ # 服务拓扑图
mcp/ # MCP JSON-RPC 服务
metrics/ # Prometheus 指标注册
remediation/ # 自愈执行 + 策略引擎 + 安全门控
resolver/ # 服务名解析 (PID → 进程名)
proto/ # Protobuf 定义
python/
src/aetherops/
core/ # MCP 客户端 + LLM Provider + 诊断
workflows/ # Multi-Agent 工作流
deploy/ # K8s manifests + Helm + 安装脚本
config/ # Prometheus + Grafana 配置
docker/ # Dockerfile
scripts/ # 构建 + 混沌实验脚本
docs/ # 文档
风险
条件
执行方式
LOW
影响范围小、错误预算充足
自动执行
MEDIUM
影响有限
通知 SRE,金丝雀执行
HIGH
多服务影响、错误预算高消耗
仅告警,需人工审批
MIT