目录
目录README.md

RCABench - 根因分析算法评测平台

一个基于云原生技术的分布式系统根因分析算法评测平台,专为微服务架构下的故障诊断算法提供标准化评估环境。

🚀 项目简介

RCABench 是一个完整的根因分析算法评测平台,集成了混沌工程、数据采集、算法执行和结果评估等功能模块。平台通过向 TrainTicket 微服务应用注入预定义故障,收集系统可观测性数据,并为各类根因分析算法提供统一的评测环境。

核心特性

  • 🎯 混沌实验: 支持自动化故障注入,模拟真实的系统异常场景
  • 📊 数据采集: 基于 OpenTelemetry 的多维度可观测性数据收集
  • 🧠 算法集成: 容器化算法执行,支持多种根因分析算法
  • 📈 标准评估: 统一的评估指标和基准测试流程
  • ☁️ 云原生: 基于 Kubernetes 的可扩展部署架构

📋 系统要求

  • Kubernetes 集群 (v1.20+)
  • Docker Engine (v20.10+)
  • Helm (v3.0+)
  • Skaffold (v1.39+)
  • kubectl 客户端工具

🛠️ 技术栈

后端核心

  • 语言: Go 1.23.2
  • 框架: Gin (REST API)
  • 数据库: MariaDB + Redis + ClickHouse
  • 监控: Jaeger (分布式链路追踪)
  • 文档: Swagger API

基础设施

  • 容器编排: Kubernetes + Helm
  • 镜像仓库: Harbor
  • 开发工具: Skaffold
  • 存储: NFS + Kubernetes PV/PVC

环境准备

  1. 创建 Kubernetes Secret
kubectl create secret generic kube-config \
  --from-file=kubeconfig=/home/nn/.kube/config \
  -n experiment
  1. 确保 Docker 服务运行

本地开发

# 启动本地调试环境
make debug

生产部署

devbox shell

# 部署到 Kubernetes 集群
make build

📁 系统架构图

系统架构图

📁 项目结构

rcabench/
├── algorithms/              # 算法实现
│   └── gat/                # GAT 图注意力网络算法
├── experiments_controller/  # 实验控制器
│   ├── client/             # 外部服务客户端
│   ├── executor/           # 执行引擎
│   ├── handlers/           # HTTP 处理器
│   └── repository/         # 数据访问层
├── benchmarks/             # 基准数据集
├── experiments/            # 实验配置
├── reports/                # 实验报告
├── helm/                   # Helm Charts
├── sdk/                    # SDK 工具包
│   └── python/            # Python SDK
├── docker-compose.yaml     # 本地开发环境
└── skaffold.yaml          # 部署配置

🔧 系统说明

系统模块

  1. fault_injection 注入异常
  2. build_dataset 构建数据集
  3. build_image 构建镜像
  4. algo_execution 执行算法
  5. collect_result 收集算法结果
  6. evaluate_metric 算法评估

核心服务端口

服务 端口 描述
experiments-controller 8081 主要 API 服务
Redis 6379 缓存和消息队列
MariaDB 3306 主数据库
Jaeger 16686 链路追踪 UI

⚙️ 系统流程

系统流程

📚 API 文档

启动服务后,访问 Swagger API 文档:

http://localhost:8081/swagger/index.html

🐛 异常类型

chaos-experiment 仓库中支持 31 种异常注入,罗列在 handler.go 中的 ChaosHandlers。下面列举 2 个常见异常类型。

CPUStress

CPU 压力测试混沌实验规格配置,用于定义 CPU 压力测试的各项参数。

字段名 类型 取值范围 描述
Duration int 1-60 持续时间(单位:分钟)
Namespace int 0-0 字符串类型(动态配置)
ContainerIdx int 0-0 容器索引(动态配置)
CPULoad int 1-100 CPU 负载百分比
CPUWorker int 1-3 并发执行 CPU 压力测试线程数

Injection api 注入 spec

{
  "children": {
    "4": {
      "children": {
        "0": {
          "value": 1
        },
        "1": {
          "value": 0
        },
        "2": {
          "value": 42
        },
        "3": {
          "value": 35
        },
        "4": {
          "value": 2
        }
      }
    }
  },
  "value": 4
}

PodKill

PodKill 定义 Pod 终止混沌实验的配置参数,通过杀死指定的 Pod 来测试系统的容错能力和恢复机制。

字段名 类型 取值范围 描述
Duration int 1-60 持续时间(单位:分钟)
Namespace int 0-0 字符串类型(动态配置)
ContainerIdx int 0-0 容器索引(动态配置)

Injection api 注入 spec

{
  "children": {
    "0": {
      "children": {
        "0": {
          "value": 1
        },
        "1": {
          "value": 0
        },
        "2": {
          "value": 42
        }
      }
    }
  },
  "value": 0
}

📈 算法支持与运行结果

当前支持的根因分析算法:

  • Dummyalgo 算法测试
  • E-diagnose benchmark 基准算法
  • GAT (Graph Attention Networks): 基于图注意力网络的异常检测

添加新算法

  1. 创建算法 Docker 镜像
  2. 推送到 Harbor 仓库
  3. 通过 API 注册算法
  4. 配置评测参数

GAT 算法性能表现

算法运行结果

算法数据集存于 data.zip

基于 TrainTicket 微服务系统的评测结果:

指标 数值 说明
准确率(Accuracy) 0.9632 分类器正确分类的样本数与总样本数之比
精确率 (Precision) 1.0 检测到的异常中真正异常的比例
召回率 (Recall) 0.9265 实际异常中被正确检测的比例
F1-Score 0.9618 准确率和召回率的调和平均值
AUC 0.958

结果数据格式

{
  "threshold": 5.698366328327373e16,
  "precision": 1.0,
  "recall": 0.9264705882352942,
  "f1_score": 0.9618320610687023,
  "specificity": 1.0,
  "accuracy": 0.9632352941176471,
  "auc_score": 0.9578287197231834,
  "confusion_matrix": {
    "tn": 68,
    "fp": 0,
    "fn": 5,
    "tp": 63
  },
  "classification_report": {
    "0": {
      "precision": 0.9315068493150684,
      "recall": 1.0,
      "f1-score": 0.96453900709219
      85,
      "support": 68.0
    },
    "1": {
      "precision": 1.0,
      "recall": 0.9264705882352942,
      "f1-score": 0.9618320610687023,
      "support": 68.0
    },
    "accuracy": 0.9632352941176471,
    "macro avg": {
      "precision": 0.9657534246575342,
      "recall": 0.9632352941176471,
      "f1-score": 0.9631855340804505,
      "support": 136.0
    },
    "weighted avg": {
      "precision": 0.9657534246575342,
      "recall": 0.9632352941176471,
      "f1-score": 0.9631855340804504,
      "support": 136.0
    }
  }
}

性能可视化图表

混淆矩阵

混淆矩阵

PR 曲线

PR 曲线

ROC 曲线

ROC 曲线

关于
5.4 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号