← Discover MCPs and Agents
o
AgentOtherGitHub

opentrace

基于 eBPF 的可扩展 Linux 内核可观测平台。支持命令行、MCP、Agent 模式,支持用户自定义追踪点与协议解析器

Links

README

From the repo.

CI Crap Docker Security Audit GitHub commit activity GitHub last commit

OpenTrace Logo

opentrace

Documentation

基于 eBPF 的可扩展 Linux 内核可观测平台,提供网络诊断、CPU 性能剖析、IO 诊断等核心能力,支持命令行与 MCP 服务两种调用方式,具备可扩展的应用层协议解析框架,允许用户自定义开发协议解析器。

📖 完整文档

核心功能

skb 丢包追踪

追踪内核网络栈中的 skb 丢包事件,支持按协议、地址、端口等条件过滤:

sudo opentrace-cli trace skbdrop -f "tcp port 80"

CPU 性能剖析

基于 perf event 的 CPU 采样,支持内核栈和用户栈的符号解析:

sudo opentrace-cli perf profile --pid 1234

应用层协议解析

可插拔的协议解析框架,内置 HTTP/1.x 和 HTTP/2 支持,易于扩展自定义协议。

MCP 服务

支持通过 MCP (Model Context Protocol) 服务调用,便于集成到 AI 工具链:

sudo opentrace-mcp

技术架构

┌─────────────────────────────────────────────────────────────────────────┐
│                           用户入口层                                      │
│                                                                         │
│  ┌──────────────┐  ┌─────────────────┐  ┌──────────────────────────┐   │
│  │ opentrace-cli │  │  opentrace-mcp  │  │     opentrace-agent      │   │
│  │  (命令行工具)  │  │  ┌──────┐       │  │  ┌────────┐ ┌────────┐ │   │
│  │              │  │  │ MCP  │       │  │  │Manager │ │  API   │ │   │
│  │              │  │  │(数据)│       │  │  │(Exporter│ │(REST)  │ │   │
│  └──────┬───────┘  │  └──┬───┘       │  │  │ 生命周期)│ │(axum)  │ │   │
│         │          └─────┼───────────┘  │  └────┬────┘ └────┬───┘ │   │
└─────────┼────────────────┼──────────────┼───────┼───────────┼─────┘   │
          │                │              │       │           │         │
          ▼                ▼              ▼       ▼           ▼         │
┌─────────────────────────────────────────────────────────────────────────┐
│                        opentrace-kit                                    │
│           通用 HTTP Server (axum/TLS/Auth/Health)                       │
└─────────────────────────────────────────────────────────────────────────┘
          │                │              │
          ▼                ▼              ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                            核心能力层                                     │
│                            opentrace-bpf                                 │
│    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐             │
│    │  Collector   │    │  Sink        │    │  Formatter   │             │
│    │  (eBPF采集)   │    │  (数据导出)  │    │  (格式化)    │             │
│    └──────────────┘    └──────────────┘    └──────────────┘             │
└─────────────────────────────────────────────────────────────────────────┘
组件作用位置
opentrace-cli命令行工具,直接调用 opentrace-bpfcrates/opentrace-cli/
opentrace-mcpMCP 服务,通过 opentrace-kit 提供 HTTP 服务crates/opentrace-mcp/
opentrace-agentAgent 服务(Prometheus 指标 + REST API)crates/opentrace-agent/
opentrace-kit通用 HTTP 服务器框架,为 mcp/agent 提供基础设施crates/opentrace-kit/
opentrace-server管理服务器(占位,待实现)crates/opentrace-server/
Collector用户态 eBPF 程序,负责挂载探针、采集内核数据crates/opentrace-bpf/src/collector/
Sink数据导出器,将采集的数据发送到目标(终端/通道等)crates/opentrace-bpf/src/sink/
Formatter数据格式化器,将 Event 格式化为可读字符串crates/opentrace-bpf/src/formatter.rs
Protocol应用层协议解析器,将原始字节解析为结构化帧crates/opentrace-bpf/src/protocol/
Symbolizer符号解析(内核/用户态/Go/Java)crates/opentrace-bpf/src/symbolizer/

环境要求

  • Linux 内核 ≥ 3.10(支持 kprobe / eBPF)
  • Rust ≥ 1.95.0
  • 运行时需 root 或等价的 BPF / 内核追踪权限

安装

1. Rust 工具链

rustup install 1.95.0
rustup default 1.95.0

2. 系统依赖

Debian / Ubuntu:

sudo apt update
sudo apt install -y clang llvm bpftool libelf-dev zlib1g-dev build-essential

RHEL / CentOS / Fedora:

sudo dnf install -y clang llvm bpftool elfutils-libelf-devel zlib-devel gcc make

3. BTF 准备

检查内核是否已暴露 BTF:

ls -l /sys/kernel/btf/vmlinux

存在该文件:无需额外操作,直接进入构建步骤。

不存在该文件:使用项目内置流程生成本地 BTF:

make install-pahole       # 安装 pahole (dwarves)
make install-debuginfo    # 安装当前内核 debuginfo / dbgsym
make vmlinux              # 生成 scripts/include/vmlinux.{h,btf}

Arch Linux 官方仓库不提供 kernel-debuginfo,需从 AUR 安装 linux-debug 或自行编译带调试符号的内核。

4. 构建

推荐使用 Makefile(自动探测 BTF 并按需准备依赖):

make build       # debug 构建
make release     # release 构建
make info        # 输出发行版 / 内核 / 架构 / BTF 检测结果

也可直接使用 cargo(要求 BTF 已就绪或已手动放置 scripts/include/vmlinux.{h,btf}):

cargo build                              # 默认构建 opentrace-mcp
cargo build --package opentrace-cli      # 构建 CLI 工具

5. 可选:Java 符号支持

对 Java 进程进行性能剖析需要 jallsyms

git clone https://github.com/3Xpl0it3r/jallsyms.git
cd jallsyms && make && sudo make install

使用

CLI

追踪 skb drop 事件:

sudo ./target/debug/opentrace-cli trace skbdrop
sudo ./target/debug/opentrace-cli trace skbdrop -f "tcp port 80"
sudo ./target/debug/opentrace-cli trace skbdrop -f "host 10.0.0.1 and tcp and port 443"
sudo ./target/debug/opentrace-cli trace skbdrop -f "src host 10.0.0.1 and dst port 443"
sudo ./target/debug/opentrace-cli trace skbdrop -f "udp port 53"

过滤表达式支持:tcp / udp / icmp / host / src host / dst host / port / src port / dst port

命令行参数:

参数说明
-f, --filter <EXPR>过滤表达式
-i, --iface <IFACE>指定网络接口
-p, --pid <PID>按进程 ID 过滤
--pname <NAME>按进程名过滤
--container-id <ID>按容器 ID 过滤
--container-name <NAME>按容器名过滤
--pod <POD>按 Kubernetes Pod 名称过滤
-6, --v6启用 IPv6 相关参数

MCP 服务

启动服务(默认监听 0.0.0.0:9999):

sudo ./target/debug/opentrace-mcp
# 或
sudo cargo run --package opentrace-mcp

健康检查:

curl http://127.0.0.1:9999/healthz

skbdrop 工具参数:

参数说明
any_host匹配源地址或目的地址
src_host匹配源地址
dst_host匹配目的地址
any_port匹配源端口或目的端口
src_port匹配源端口
dst_port匹配目的端口
ip_protoIP 协议(tcp / udp / icmp 或协议号 6 / 17 / 1
eth_proto以太网协议(ipv4 / ipv6 或协议号 0x0800 / 0x86DD

调用后服务端等待 skb drop 事件并返回匹配项;若超时未捕获到事件则返回空结果。

二次开发

详细的二次开发指南请参考文档:

License

Apache-2.0

Collected info

  • 8 stars
  • Language: Rust
  • Source updated: 6/23/2026