rename script
基于 eBPF 的系统异常观测与智能根因定位工具
woodpecker 以低侵入、低开销的方式持续采集内核与用户态行为数据,通过可扩展插件系统实时检测 CPU 饱和、I/O 抖动、内存压力、锁竞争、系统调用热点等典型异常,并在异常触发时即时调用 LLM 推理引擎完成根因分析,输出结构化诊断报告与操作建议。
AI 驱动的根因分析
model
model_deep
基于 eBPF 的可扩展插件系统
.bpf.o
rate()
delta()
统一 HTTP API 架构
woodpeckerd (daemon) ├── eBPF / procfs 数据采集 ├── 规则引擎检测 + 告警存储 (SQLite) ├── LLM agent (根因分析 / 交互对话) ├── 插件热加载管理 └── HTTP API :8787 ├── woodpecker (CLI) ├── woodpecker_tui (TUI) └── 浏览器 Web UI
# 需要 Rust 工具链(推荐 1.78+)和 libbpf-dev cargo build --release # 产出的二进制: # target/release/woodpeckerd — daemon # target/release/woodpecker — CLI # target/release/woodpecker_tui — TUI
创建 /etc/woodpecker/config.yaml(可从下方示例复制):
/etc/woodpecker/config.yaml
database: path: /var/lib/woodpecker/woodpecker.db socket: path: /run/woodpecker/woodpecker.sock source: ebpf # ebpf(默认)或 procfs(无 root 时回退) interval: 5 # 采样间隔(秒) window: 12 # 滑动窗口帧数(= 最近 60 秒) detectors: - cpu_saturation - cpu_hot_process - io_latency - mem_pressure - lock_contention - syscall_hotspot plugins: dir: /etc/woodpecker/plugins # 已安装插件目录 llm: provider: openai # openai 兼容格式(DeepSeek 等) base_url: https://api.deepseek.com api_key: ${DEEPSEEK_API_KEY} # 支持 ${ENV_VAR} 占位,不必明文写入配置 model: deepseek-chat model_deep: deepseek-reasoner # 可选,--deep 分析时使用 knowledge_dir: /etc/woodpecker/knowledge web: bind: 127.0.0.1:8787 # 非 loopback 时必须显式设置 token
初始化目录:
sudo mkdir -p /etc/woodpecker/plugins /var/lib/woodpecker /run/woodpecker sudo cp -r plugins/* /etc/woodpecker/plugins/ # 安装内置插件
直接启动:
sudo DEEPSEEK_API_KEY=sk-... ./target/release/woodpeckerd --config /etc/woodpecker/config.yaml
启动后 daemon 输出类似:
[INFO] woodpeckerd starting (pid 12345, log level Info) [INFO] config loaded: db=/var/lib/woodpecker/woodpecker.db bind=127.0.0.1:8787 interval=5s window=12 [INFO] auth token written to /tmp/woodpecker_token [INFO] HTTP API listening on 127.0.0.1:8787
认证 token 自动生成并写入 /tmp/woodpecker_token(0600 权限),CLI / TUI 自动读取,无需手动传入。
/tmp/woodpecker_token
注册为 systemd 服务:
# 将二进制安装到 PATH sudo cp target/release/woodpeckerd /usr/local/bin/ # 创建 systemd unit sudo tee /etc/systemd/system/woodpecker.service > /dev/null <<'EOF' [Unit] Description=woodpecker system anomaly observation daemon After=network.target [Service] Type=simple ExecStart=/usr/local/bin/woodpeckerd --config /etc/woodpecker/config.yaml Environment="DEEPSEEK_API_KEY=sk-..." Restart=on-failure RestartSec=5 # eBPF 需要以下能力;如不希望完整 root 可用 AmbientCapabilities User=root [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl enable --now woodpecker sudo systemctl status woodpecker
woodpecker
# 安装(可选) sudo cp target/release/woodpecker /usr/local/bin/ # 查看 daemon 状态 woodpecker status # Incident 管理 woodpecker incidents list # 最新 50 条 woodpecker incidents list --active # 仅活跃告警 woodpecker incidents list --limit 100 woodpecker incidents show <ID> # 详情(Markdown) woodpecker incidents show <ID> --format json # json|yaml|md woodpecker incidents export json # 全量导出 woodpecker incidents export md --id <ID> # 单条导出 # LLM 根因分析 woodpecker analyze <ID> # 标准分析 woodpecker analyze <ID> --deep # 使用深度 RCA 模型 # 监控会话(针对特定进程的专项观测) woodpecker session start <label> --target-match llama woodpecker session start <label> --target-pid 1234 --duration-secs 120 woodpecker session list woodpecker session stop <ID> woodpecker session show <ID> # 插件管理 woodpecker plugin list # 已加载的插件 woodpecker plugin install <路径> # 安装新插件 woodpecker plugin reload <名称> # 热重载 woodpecker plugin remove <名称> # 单次诊断(无需启动 daemon) woodpecker oneshot --source procfs woodpecker oneshot --source ebpf -f json
woodpecker_tui
# 安装(可选) sudo cp target/release/woodpecker_tui /usr/local/bin/ # 启动(自动连接 127.0.0.1:8787,读取 /tmp/woodpecker_token) woodpecker_tui # 连接自定义地址 woodpecker_tui --config /etc/woodpecker/config.yaml
TUI 键盘操作:
h/j/k/l
Tab
Enter
a
r
q
Ctrl-C
Web UI 已内嵌于 daemon 二进制,daemon 启动后直接用浏览器访问:
http://127.0.0.1:8787
如需从其他机器访问,修改配置中的 web.bind:
web.bind
web: bind: 0.0.0.0:8787 token: your-static-token # 非 loopback 时必须显式设置
然后访问 http://<host-ip>:8787,在登录页输入 token。
http://<host-ip>:8787
Web UI 功能:
/api/metrics/live
Web UI 是 React (Vite) 应用,源码在 ../comp_frondend/,构建产物嵌入 daemon 二进制:
../comp_frondend/
cd ../comp_frondend bash build-and-embed.sh # npm install + vite build → woodpecker_web/dist/ + 重新编译 daemon
Vite 直接输出到 crates/woodpecker_web/dist/(daemon 通过 include_dir! 嵌入),因此改动前端后必须同时重新编译 daemon。开发时 npm run dev 通过 Vite 代理连接本地 daemon(用 ?token=<tok> 传入认证)。
crates/woodpecker_web/dist/
include_dir!
npm run dev
?token=<tok>
一个最小插件的目录结构:
my_plugin/ ├── manifest.yaml # 插件元数据、eBPF attach、指标声明、规则引用 ├── my_plugin.bpf.o # CO-RE 预编译的 eBPF 目标文件 ├── rules/ │ └── my_plugin.yaml # 规则 DSL(触发条件 + 告警级别) └── knowledge/ └── my_plugin.md # LLM 可读的诊断知识库
安装后通过 CLI 热加载,无需重启 daemon:
woodpecker plugin install ./my_plugin/
详细开发指南见 skills/ 目录下的插件模板。
skills/
# CPU 压力 bash scripts/verify_cpu.sh # I/O 抖动 bash scripts/verify_io.sh # 内存抖动 bash scripts/verify_mem.sh # 锁竞争 bash scripts/verify_lock.sh # 系统调用热点 bash scripts/verify_syscall.sh
CAP_BPF
CAP_PERFMON
CAP_SYS_ADMIN
原始赛题说明见 docs/README.official.md。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
woodpecker
基于 eBPF 的系统异常观测与智能根因定位工具
woodpecker 以低侵入、低开销的方式持续采集内核与用户态行为数据,通过可扩展插件系统实时检测 CPU 饱和、I/O 抖动、内存压力、锁竞争、系统调用热点等典型异常,并在异常触发时即时调用 LLM 推理引擎完成根因分析,输出结构化诊断报告与操作建议。
特性
AI 驱动的根因分析
model)+ 深度 RCA 模型(model_deep)基于 eBPF 的可扩展插件系统
.bpf.o)+ 指标声明 + 规则 DSL + 知识库rate()、delta()、滑动窗口聚合、多维度关联表达式统一 HTTP API 架构
架构一览
快速开始
1. 构建
2. 准备配置文件
创建
/etc/woodpecker/config.yaml(可从下方示例复制):初始化目录:
运行说明
Daemon
直接启动:
启动后 daemon 输出类似:
认证 token 自动生成并写入
/tmp/woodpecker_token(0600 权限),CLI / TUI 自动读取,无需手动传入。注册为 systemd 服务:
CLI (
woodpecker)TUI (
woodpecker_tui)TUI 键盘操作:
h/j/k/l或方向键TabEnterarq/Ctrl-CWeb UI
Web UI 已内嵌于 daemon 二进制,daemon 启动后直接用浏览器访问:
如需从其他机器访问,修改配置中的
web.bind:然后访问
http://<host-ip>:8787,在登录页输入 token。Web UI 功能:
/api/metrics/live)Web UI 构建
Web UI 是 React (Vite) 应用,源码在
../comp_frondend/,构建产物嵌入 daemon 二进制:Vite 直接输出到
crates/woodpecker_web/dist/(daemon 通过include_dir!嵌入),因此改动前端后必须同时重新编译 daemon。开发时npm run dev通过 Vite 代理连接本地 daemon(用?token=<tok>传入认证)。插件开发
一个最小插件的目录结构:
安装后通过 CLI 热加载,无需重启 daemon:
详细开发指南见
skills/目录下的插件模板。异常复现脚本
要求
CAP_BPF、CAP_PERFMON、CAP_SYS_ADMIN(或直接以 root 运行)原始赛题说明见 docs/README.official.md。