PyRCA
PyRCA 是一款专为根因分析(RCA)打造的 Python 机器学习库,旨在帮助工程师快速定位微服务架构中的系统故障源头。随着现代应用日益复杂,数百个服务间的相互依赖使得故障排查变得极具挑战,PyRCA 通过整合先进的算法与端到端流程,有效解决了从海量监控指标中识别异常并追溯根本原因的难题。
该工具主要面向运维工程师(SRE)、后端开发者以及从事系统可靠性研究的研究人员。它目前专注于基于指标的根因分析,内置了多种前沿算法,包括用于并行识别异常指标的ε-Diagnosis,以及基于因果拓扑图的贝叶斯推断和随机游走等方法。此外,PyRCA 还提供了一项独特功能:允许用户结合时间序列数据与领域知识便捷地构建因果图,从而加速图解决方案的开发。
除了提供统一的模型训练与调用接口,PyRCA 还内置了基准测试模块,便于学术界和工业界评估不同 RCA 方法的效果。虽然当前版本侧重于指标分析,但未来计划扩展至链路追踪和日志分析领域。无论是需要快速排查线上故障的实战派,还是希望验证新算法的研究者,PyRCA 都是一个高效且易于上手的专业助手。
使用场景
某电商平台的 SRE 团队在“双十一”大促期间,面对由数百个微服务组成的复杂交易系统,急需在突发流量高峰导致的服务延迟中快速定位故障根源。
没有 PyRCA 时
- 人工排查效率低下:工程师需手动登录多个监控系统,逐一对比数百项 KPI 指标,耗时数小时才能缩小怀疑范围。
- 误判率高:缺乏科学的因果推断,往往将受影响的下游服务误判为故障源头,导致修复方向错误,业务中断时间延长。
- 依赖专家经验:故障定位高度依赖资深人员的个人经验,新人难以独立处理,且无法将排查逻辑标准化复用。
- 拓扑关系模糊:服务间的调用链和因果依赖仅存在于文档或老员工脑中,缺乏基于实时数据构建的动态因果图辅助决策。
使用 PyRCA 后
- 自动化根因定位:利用 PyRCA 内置的 ε-Diagnosis 算法并行分析异常指标,系统在分钟级内自动锁定引发延迟的核心数据库连接池服务。
- 精准因果推断:通过贝叶斯推理(Bayesian Inference)结合实时拓扑图,准确区分“病因”与“症状”,避免了对正常下游服务的无效重启。
- 降低门槛与标准化:统一的 Python 接口让初级工程师也能调用先进的 RCA 算法,将排查流程固化为可复用的代码脚本。
- 动态图谱构建:直接利用观测到的时间序列数据自动构建因果图,实时反映微服务间的依赖变化,无需人工维护静态拓扑文档。
PyRCA 将原本需要数小时的人工“大海捞针”式排查,转化为分钟级的自动化精准诊断,显著提升了微服务架构下的系统稳定性与运维效率。
运行环境要求
未说明
未说明

快速开始
PyRCA:用于根本原因分析的 Python 库
目录
简介
微服务架构的应用正以迅猛的速度增长,多服务应用程序已成为现实世界 IT 应用中的标准范式。通常,一个多服务应用程序由数百个相互协作的服务组成,这使得检测服务故障并确定其根本原因变得越来越困难。根本原因分析(RCA)方法通常依赖于在这些服务上监控的关键绩效指标、跟踪数据或日志,以便在检测到系统故障时确定根本原因。此类方法可以帮助工程师和 SRE 在故障排除过程中提高效率。
PyRCA 是一个基于 Python 的机器学习库,旨在通过提供多种最先进的 RCA 算法以及构建 RCA 解决方案的端到端流程,来促进根本原因分析工作。目前,PyRCA 主要专注于基于指标的 RCA,包括两类算法:(1) 通过指标数据分析,在观察到异常的同时识别出异常指标,例如 ε-诊断;(2) 基于表示观测指标之间因果关系的拓扑图或因果图来识别根本原因,例如贝叶斯推断和随机游走。PyRCA 还提供了一个便捷的工具,用于从观测的时间序列数据和领域知识中构建因果图,使用户能够快速开发基于图的解决方案。此外,PyRCA 提供了一个用于评估各种 RCA 方法的基准测试,这对工业界和学术研究都具有重要价值。
以下列出了我们库中支持的 RCA 方法:
- ε-诊断
- 基于贝叶斯推断的 RCA(BI)
- 基于随机游走的 RCA(RW)
- 根因发现方法(RCD)
- 基于假设检验的 RCA(HT)
我们将继续改进这个库,使其在未来更加全面。未来,PyRCA 还将支持基于跟踪和日志的 RCA 方法。
安装
您可以通过运行 pip install sfr-pyrca 从 PyPI 安装 pyrca。您也可以从源代码安装:克隆 PyRCA 仓库,进入根目录,然后运行 pip install .,或者使用 pip install -e . 以可编辑模式安装。您还可以安装额外的依赖项:
- 用于绘图与可视化:运行
pip install sfr-pyrca[plot],或从仓库根目录运行pip install .[plot]。 - 安装所有依赖项:运行
pip install sfr-pyrca[all],或从仓库根目录运行pip install .[all]。
快速入门
PyRCA 提供了一个统一的接口,用于训练 RCA 模型和查找根本原因。要应用某种 RCA 方法,您只需指定:
- 所选的 RCA 方法:例如,
BayesianNetwork、EpsilonDiagnosis。 - 方法配置:例如,
BayesianNetworkConfig、EpsilonDiagnosisConfig。 - 用于初始化/训练的时间序列数据:例如,一个 Pandas DataFrame 格式的时间序列数据。
- 事件窗口中的异常时间序列数据:RCA 方法需要事件窗口内的异常 KPI 指标。
我们以 BayesianNetwork 为例。假设 graph_df 是表示指标之间因果关系的图的 Pandas DataFrame(如何构建此类因果图将在稍后讨论),而 df 是包含历史观测时间序列数据的 Pandas DataFrame(例如,索引为时间戳,每列代表一个被监控的指标)。要训练一个 BayesianNetwork,您可以简单地运行以下代码:
from pyrca.analyzers.bayesian import BayesianNetwork
model = BayesianNetwork(config=BayesianNetwork.config_class(graph=graph_df))
model.train(df)
model.save("model_folder")
模型训练完成后,您可以使用它来查找由某个异常检测器检测到的一组异常指标所对应的事件的根本原因(您可以使用 PyRCA 中支持的基于统计的检测器,或我们 Merlion 库中支持的其他异常检测方法),例如:
from pyrca.analyzers.bayesian import BayesianNetwork
model = BayesianNetwork.load("model_folder")
results = model.find_root_causes(["observed_anomalous_metric", ...])
print(results.to_dict())
对于其他 RCA 方法,您可以编写与上述类似的代码来查找根本原因。例如,如果您想尝试 EpsilonDiagnosis,可以按如下方式初始化 EpsilonDiagnosis:
from pyrca.analyzers.epsilon_diagnosis import EpsilonDiagnosis
model = EpsilonDiagnosis(config=EpsilonDiagnosis.config_class(alpha=0.01))
model.train(normal_data)
这里,normal_data 是历史上观测到的无异常的时间序列数据。要识别根本原因,您可以运行:
results = model.find_root_causes(abnormal_data)
print(results.to_dict())
其中,abnormal_data 是在事件窗口内收集的时间序列数据。
如上所述,某些 RCA 方法(如 BayesianNetwork)需要将因果图作为输入。要从观测到的时间序列数据中构建此类因果图,您可以使用我们的工具,运行 python -m pyrca.tools。该命令将启动一个用于时间序列数据分析和因果发现的 Dash 应用程序。

该仪表板使用户能够尝试不同的因果发现方法、自定义因果发现参数、添加领域知识约束(例如根节点/叶节点、禁止/必须存在的边),并可视化生成的因果图。此功能简化了基于领域知识手动修订因果图的过程。如果用户对工具生成的图满意,可以将其下载下来,随后该图可被 PyRCA 支持的 RCA 方法使用。
或者,用户也可以不使用仪表板,而是直接编写代码来构建此类图。包 pyrca.graphs.causal 包含了几种流行的因果发现方法,用户可以加以利用。所有这些方法都支持领域知识约束。例如,如果用户希望在观测到的时间序列数据 df 上应用 PC 算法来构建因果图,可以使用以下代码:
from pyrca.graphs.causal.pc import PC
model = PC(PC.config_class())
graph_df = model.train(df)
如果您有一些领域知识约束,可以运行:
from pyrca.graphs.causal.pc import PC
model = PC(PC.config_class(domain_knowledge_file="file_path"))
graph_df = model.train(df)
领域知识文件采用 YAML 格式,例如:
causal-graph:
root-nodes: ["A", "B"]
leaf-nodes: ["E", "F"]
forbids:
- ["A", "E"]
requires:
- ["A", "C"]
该领域知识文件说明:
- 指标 A 和 B 必须是根节点,
- 指标 E 和 F 必须是叶节点,
- A 和 E 之间不能有连接,
- A 和 C 之间必须存在连接。
您可以根据此模板编写自己的领域知识文件,以生成更可靠的因果图。
应用示例
这里是一个将 BayesianNetwork 应用于构建 RCA 解决方案的真实世界示例,该示例改编自我们的内部用例。其中,“config”文件夹包含基于统计的异常检测器的设置以及领域知识;“models”文件夹则存储因果图和训练好的贝叶斯网络。“rca.py”文件中的 RCAEngine 类实现了利用 PyRCA 提供的模块来构建因果图、训练贝叶斯网络以及查找根本原因的方法。如果基于统计的异常检测器和贝叶斯推理适合您的问题,您可以直接使用该类。例如,给定一个时间序列 DataFrame df,您可以通过以下代码构建并训练一个贝叶斯网络:
from pyrca.applications.example.rca import RCAEngine
engine = RCAEngine()
engine.build_causal_graph(
df=df,
run_pdag2dag=True,
max_num_points=5000000,
verbose=True
)
bn = engine.train_bayesian_network(dfs=[df])
bn.print_probabilities()
贝叶斯网络构建完成后,您可以直接用它来查找根本原因:
engine = RCAEngine()
result = engine.find_root_causes_bn(anomalies=["conn_pool", "apt"])
pprint.pprint(result)
find_root_causes_bn 的输入是一组由基于统计的异常检测器检测到的异常指标。该方法会估计某个节点成为根本原因的概率,并提取从潜在的根本原因节点到叶节点的路径。
基准测试
下表总结了不同方法在模拟数据集上的根因分析性能。
如何生成模拟数据集可以参见这里,
而如何测试不同的根因分析方法则可以参见这里。
| 召回率@1 | 召回率@3 | 召回率@5 | |
|---|---|---|---|
| ε-Diagnosis | 0.06 ± 0.02 | 0.16 ± 0.04 | 0.16 ± 0.04 |
| RCD | 0.28 ± 0.05 | 0.29 ± 0.05 | 0.30 ± 0.05 |
| Local-RCD | 0.44 ± 0.05 | 0.70 ± 0.05 | 0.70 ± 0.05 |
| Random Walk | 0.07 ± 0.03 | 0.20 ± 0.04 | 0.24 ± 0.04 |
| Random Walk (PC) | 0.06 ± 0.02 | 0.17 ± 0.04 | 0.21 ± 0.04 |
| Bayesian Inference | 0.15 ± 0.04 | 0.35 ± 0.05 | 0.43 ± 0.05 |
| Bayesian Inference (PC) | 0.11 ± 0.03 | 0.30 ± 0.05 | 0.40 ± 0.05 |
| Hypothesis-testing | 1.00 ± 0.00 | 1.00 ± 0.00 | 1.00 ± 0.00 |
| Hypothesis-testing (PC) | 0.95 ± 0.02 | 1.00 ± 0.00 | 1.00 ± 0.00 |
| Hypothesis-testing (ADJ) | 0.95 ± 0.02 | 1.00 ± 0.00 | 1.00 ± 0.00 |
| Hypothesis-testing (ADJ-PC) | 0.77 ± 0.04 | 0.92 ± 0.03 | 0.92 ± 0.03 |
ε-Diagnosis 和 RCD 属于单阶段的根因分析方法,而其余方法均为双阶段的根因分析方法。
Local-RCD 表示采用局部学习的 RCD 算法。Bayesian Inference 算法通过估计每个结构因果模型来计算根因得分。Hypothesis-testing (ADJ) 表示带有后代调整的假设检验算法。对于双阶段模型,未带后缀的算法表示根因定位算法使用真实因果图进行模型训练。而带有“PC”后缀的算法则表示因果图是通过 PC 算法估计得到的。
如何贡献
我们欢迎开源社区为改进本库做出贡献!
在开始之前,请先克隆本仓库,运行 pip install pre-commit,并在仓库的根目录下执行 pre-commit install。这将确保您每次提交时,所有文件都格式正确,并包含适当的许可证头信息。
要向本库添加新的根因分析方法,您可以按照以下步骤操作:
- 在
pyrca/analyzers文件夹中为该根因分析方法创建一个新的 Python 脚本文件。 - 创建一个继承自
pyrca.base.BaseConfig的配置类。 - 创建一个继承自
pyrca.analyzers.base.BaseRCA的方法类。新方法的构造函数应以新的配置实例作为输入。 - 实现
train函数,用于训练或初始化新方法。 - 实现
find_root_causes函数,该函数应返回一个pyrca.analyzers.base.RCAResults实例,用于存储根因分析结果。
要添加新的因果发现方法,您可以按照以下步骤操作:
- 在
pyrca/graphs/causal文件夹中为该因果发现方法创建一个新的 Python 脚本文件。 - 创建一个继承自
pyrca.graphs.causal.base.CausalModelConfig的配置类。 - 创建一个继承自
pyrca.graphs.causal.base.CausalModel的方法类。新方法的构造函数应以新的配置实例作为输入。 - 实现
_train函数,该函数应返回发现的因果图。_train函数的输入参数包括时间序列数据框、禁止和必须存在的边列表以及其他附加参数。
联系我们
如果您有任何问题、意见或建议,请随时通过 pyrca@salesforce.com 与我们联系。
许可证
版本历史
v1.0.12023/06/27v1.0.02023/05/18v0.0.12023/04/27常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器