PodFlow 是一个面向容器环境的智能故障诊断插件,基于 eBPF/bpftrace 采集内核级观测数据,通过规则引擎和 AI 增强生成诊断结论,并支持告警推送。
采集 7 类容器性能证据:
- Block I/O:块设备 I/O 延迟
- Network:网络连接延迟
- Syscall Latency:系统调用延迟
- OOM Events:内存溢出事件
- FS Stall:文件系统卡顿
- NRI Events:容器生命周期事件
- Cgroup Metrics:Cgroup 资源指标
支持 5 种诊断规则:
- Threshold Rule:阈值规则
- Trend Rule:趋势规则
- Correlation Rule:关联规则
- Statistical Rule:统计规则
- Custom Rule:自定义规则
集成真实 AI 服务:
- OpenAI:GPT-4、GPT-3.5-turbo
- Anthropic:Claude 3 系列
- 缓存机制:避免重复调用
- 重试机制:指数退避算法
- 降级策略:AI 不可用时保持核心链路
支持多种告警推送方式:
- Webhook:HTTP 回调
- Kafka:消息队列
- Email:邮件通知
- 钉钉:企业通讯
- 企业微信:企业通讯
- UID 验证:基于 UID 的权限验证
- gRPC 通道:安全的通道隔离
- TLS 支持:加密通信
- 异步处理:Tokio 异步运行时
- 缓存优化:智能缓存机制
- 批量处理:批量事件处理
- 并发支持:支持大规模集群
| 指标 | 值 |
|---|---|
| 代码行数 | 28,700 行 |
| 源文件数 | 62 个 |
| 测试数 | 139 个 |
| 测试通过率 | 100% |
| 编译警告 | 0 个 |
| 质量评分 | 100/100 |
- 操作系统: Linux 内核 5.8+(支持 eBPF)
- Rust 工具链: 1.70+(编译时需要)
- bpftrace: v0.19+
- 权限: root 或 CAP_BPF, CAP_SYS_ADMIN, CAP_SYS_PTRACE
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y bpftrace curl build-essential pkg-config libssl-dev
# CentOS/RHEL
sudo yum install -y bpftrace curl gcc make openssl-devel
# openEuler
sudo dnf install -y bpftrace curl gcc make openssl-devel# 克隆项目
git clone https://github.com/TDnorthgarden/PodFlow.git
cd PodFlow
# 编译项目
cargo build --release
# 安装 bpftrace 脚本
sudo mkdir -p /usr/share/podflow/bpftrace
sudo cp -r scripts/bpftrace/* /usr/share/podflow/bpftrace/
sudo chmod -R 755 /usr/share/podflow/bpftrace# 启动服务(需要 root 权限)
sudo ./target/release/podflow
# 在另一个终端使用 CLI
./target/release/podflow-cli -s http://localhost:8080 trigger --cgroup-id <cgroup-id> --evidence-types network,block_io┌─────────────────────────────────────────────────────────────┐
│ Kubernetes / Runtime │
│ ┌─────────────┐ │
│ │ NRI │─────Pod Metadata─────┐ │
│ └─────────────┘ │ │
└───────────────────────────────────────┼────────────────────┘
│
┌───────────────────────────────────────▼────────────────────┐
│ PodFlow (Core Plugin) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Trigger │ │ Collector │ │ Evidence │ │
│ │ Service │ │ (bpftrace) │ │ Aggregator │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────────┼─────────────────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ Diagnosis │ │
│ │ Engine │ │
│ └───────┬───────┘ │
│ │ │
│ ┌───────▼───────┐ ┌─────────────┐ │
│ │ Result │ │ AI │ │
│ │ Publisher │◄─┤ Adapter │ │
│ └───────┬───────┘ └─────────────┘ │
│ │ │
└──────────────────────────┼─────────────────────────────────┘
│
┌────────▼────────┐
│ Output Targets │
│ ┌─────────────┐ │
│ │ Local Logs │ │
│ │ (JSON) │ │
│ └─────────────┘ │
│ ┌─────────────┐ │
│ │ Alert │ │
│ │ Platform │ │
│ └─────────────┘ │
└─────────────────┘
┌─────────────────┐ gRPC/Unix Socket ┌─────────────────┐
│ Main Service │◄──────────────────────►│ Collector │
│ (non-privileged)│ │ Daemon │
│ │ │ (privileged) │
│ - HTTP API │ │ - bpftrace │
│ - CLI │ │ - eBPF │
│ - Rule Engine │ │ - kernel │
│ - AI Adapter │ │ monitoring │
└─────────────────┘ └─────────────────┘
podflow/
├── src/
│ ├── main.rs # 主服务入口
│ ├── lib.rs # 库定义
│ ├── bin/
│ │ ├── podflow_observer_cli.rs # CLI 工具
│ │ └── collector_daemon.rs # 特权采集守护进程
│ ├── api/ # HTTP API 实现
│ ├── collector/ # 数据采集模块
│ ├── diagnosis/ # 诊断引擎
│ ├── ai/ # AI 增强模块
│ ├── publisher/ # 结果发布器
│ └── types/ # 类型定义
├── scripts/
│ └── bpftrace/ # bpftrace 采集脚本
│ ├── network/ # 网络诊断脚本
│ ├── block_io/ # 块设备 I/O 脚本
│ ├── syscall_latency/ # 系统调用延迟脚本
│ └── templates/ # 脚本模板
├── systemd/ # systemd 服务文件
├── docs/ # 项目文档
├── examples/ # 使用示例
├── cases/ # 故障案例库
├── proto/ # gRPC 协议定义
├── plans/ # 项目规划文档
├── Cargo.toml # Rust 项目配置
├── config.yaml # 主配置文件
└── README.md # 本文档
创建 /etc/podflow/config.yaml:
# 服务器配置
server:
bind_address: "0.0.0.0"
port: 8080
# 日志级别
log_level: "info"
# AI 配置(可选)
ai:
enabled: true
provider: "openai" # openai, claude, local
model: "gpt-4"
api_key: "your-api-key"
timeout_secs: 30
# 告警配置(可选)
alert:
enabled: true
webhook_url: "https://your-alert-platform.com/webhook"
throttle_secs: 60
# 条件触发器
condition_triggers:
- name: "high_io_latency"
condition: "block_io.io_latency_p99_ms > 100"
evidence_types: ["block_io", "syscall_latency"]
window_seconds: 30
cooldown_seconds: 300
enabled: true
# 采集器配置
collector:
daemon_socket: "/run/podflow/collector.sock"
fallback_mode: "dev_sudo"
max_collection_time_secs: 60- 快速开始: docs/USER_GUIDE.md - 完整的用户使用指南
- 常见问题: docs/FAQ.md - 常见问题解答
- 最佳实践: docs/BEST_PRACTICES.md - 生产环境最佳实践
- 项目概述: docs/01_overview.md
- 数据模式: docs/02_schemas.md
- NRI映射: docs/03_nri_mapping_spec.md
- 字段映射: docs/08_collector_bpftrace_to_fields.md
- 案例库: docs/10_case_library_guide.md
- API契约: docs/05_api_cli_contract.md
- 排障指南: docs/PRODUCTION_DEPLOYMENT_OPERATIONS_MANUAL.md
curl -X POST http://localhost:8080/v1/diagnostics:trigger \
-H "Content-Type: application/json" \
-d '{
"target": {
"pod": {
"namespace": "default",
"name": "nginx"
}
},
"evidence_types": ["network", "block_io"],
"time_window": {
"start_time": "2024-01-01T00:00:00Z",
"end_time": "2024-01-01T00:01:00Z"
}
}'curl "http://localhost:8080/v1/diagnostics/<task-id>"# 查看帮助
./target/release/podflow-cli --help
# 触发诊断
./target/release/podflow-cli -s http://localhost:8080 trigger \
--cgroup-id <cgroup-id> \
--evidence-types network,block_io
# 查询 AI 增强结果(使用诊断 ID)
./target/release/podflow-cli -s http://localhost:8080 query --diagnosis-id <diagnosis-id>
# 查看服务状态
./target/release/podflow-cli -s http://localhost:8080 status
⚠️ 注意: Docker 支持正在开发中,以下 Dockerfile 为参考示例。
创建 Dockerfile:
FROM rust:1.70 as builder
WORKDIR /app
COPY . .
RUN cargo build --release
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y bpftrace && rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/podflow /usr/local/bin/
COPY --from=builder /app/target/release/podflow-collector /usr/local/bin/
COPY --from=builder /app/scripts/bpftrace /usr/share/podflow/bpftrace
COPY config.yaml /etc/podflow/config.yaml
EXPOSE 8080
CMD ["podflow"]构建并运行:
docker build -t podflow:latest .
docker run -d --name podflow --privileged --pid=host -p 8080:8080 podflow:latestdocker run -d \
--name podflow \
--privileged \
--pid=host \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v /run/podflow:/run/podflow \
-v /etc/podflow:/etc/podflow:ro \
-p 8080:8080 \
podflow:latest# 创建系统用户和组
sudo groupadd podflow
sudo useradd -r -g podflow -s /bin/false podflow
# 创建目录
sudo mkdir -p /etc/podflow /var/log/podflow /run/podflow /usr/share/podflow/bpftrace
# 复制文件
sudo cp systemd/*.service /etc/systemd/system/
sudo cp config.yaml /etc/podflow/
sudo cp -r scripts/bpftrace/* /usr/share/podflow/bpftrace/
# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable podflow-collector podflow
sudo systemctl start podflow-collector podflow| 证据类型 | 采集指标 | 输出字段 |
|---|---|---|
network |
TCP 连接延迟、丢包率、连通率 | latency_p99_ms, loss_rate, connect_rate |
block_io |
I/O 延迟、吞吐量、队列深度 | io_latency_p99_ms, throughput_mbps, queue_depth |
syscall_latency |
系统调用延迟统计 | top_syscalls, p99_latency_ms, call_count |
fs_stall |
文件系统卡顿分析 | stall_duration_ms, operation_type, file_path |
cgroup_contention |
cgroup 资源争抢 | cpu_throttle_rate, memory_usage_percent, io_wait_time |
oom |
OOM 事件检测 | oom_time, victim_pid, memory_usage_before |
⚠️ 开发阶段声明
本项目处于积极开发阶段(v0.1.0),部分功能尚未达到生产就绪状态。
预计生产就绪时间:3-4 周
# OpenAI
ai:
enabled: true
provider: "openai"
model: "gpt-4"
api_key: "sk-..."
# Claude
ai:
enabled: true
provider: "claude"
model: "claude-3-opus-20240229"
api_key: "sk-ant-..."
# 本地模型(如 vLLM)
ai:
enabled: true
provider: "local"
model: "qwen/qwen3-coder-next"
api_base: "http://localhost:1234/v1"{
"ai_enhancement": {
"status": "completed",
"summary": "检测到网络延迟异常升高,可能与后端服务负载过高有关",
"root_cause_analysis": "1. 网络延迟 P99 从 50ms 升高到 200ms\n2. 同时观察到 CPU 使用率上升 30%\n3. 后端服务响应时间同步增加",
"actionable_steps": [
"检查后端服务监控指标",
"验证网络带宽使用情况",
"考虑增加服务实例或优化查询"
],
"confidence": 0.85
}
}项目内置 openEuler 社区常见故障模式:
# 查看所有案例(开发中)
# ./target/release/podflow-cli case list
# 匹配当前状态(开发中)
# ./target/release/podflow-cli case match --target pod:nginx内置案例包括:
cpu_throttle: CPU Throttle 导致服务延迟升高memory_pressure: 内存压力触发 OOM Killnetwork_latency_spike: 网络延迟 P99 异常升高disk_io_latency: 磁盘 IO 延迟导致应用卡顿
# 基础健康检查
curl http://localhost:8080/health
# 详细健康状态
curl http://localhost:8080/health/ready
# 统计信息
curl http://localhost:8080/health/stats# 查看服务日志
sudo journalctl -u podflow -f
# 查看采集守护进程日志
sudo journalctl -u podflow-collector -f
# 查看结构化诊断日志
tail -f /var/log/podflow/diagnostics.log-
权限不足
# 检查 bpftrace 权限 sudo bpftrace -l 'tracepoint:syscalls:sys_enter_*' | head -5 # 检查 capabilities sudo getcap /usr/local/bin/podflow-collector
-
bpftrace 脚本加载失败
# 验证脚本语法 sudo bpftrace -d /usr/share/podflow/bpftrace/network/tcp_connect.bt # 检查内核版本 uname -r
-
服务无法启动
# 检查端口占用 sudo lsof -i :8080 # 查看服务状态 sudo systemctl status podflow sudo journalctl -u podflow -n 50
# 启用调试日志
export RUST_LOG=debug
./target/release/podflow
# 或修改配置文件
log_level: "debug"欢迎提交 Issue 和 Pull Request!
- Fork 项目
- 创建功能分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 打开 Pull Request
# 安装开发依赖
cargo install cargo-watch
# 运行测试
cargo test
# 开发模式运行
cargo watch -x run
# 代码格式化
cargo fmt
# 代码检查
cargo clippy本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
- 项目主页: https://github.com/TDnorthgarden/PodFlow
- 问题反馈: GitHub Issues
- 文档: 项目 Wiki
感谢以下开源项目:
PodFlow - 让容器故障诊断更智能、更高效! 🚀