> For the complete documentation index, see [llms.txt](https://meetbill.gitbook.io/butterfly-project-doc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://meetbill.gitbook.io/butterfly-project-doc/project-handlers/chunfeng/butterfly-qingnang.md).

# 故障自愈(青囊)

## 青囊

## 1 项目概述

### 1.1 背景介绍及目标

### 1.2 名词说明

### 1.3 Roadmap

## 2 需求分析

> 需求分析重点是需求

### 2.1 功能需求

### 2.2 非功能需求

### 2.3 调研

#### 2.3.1 百度 ARk

[百度运维机器人](https://github.com/meetbill/ARK)

#### 2.3.2 st2

<https://github.com/StackStorm/st2>

```
StackStorm（又称"IFTTT for Ops"）是事件驱动的自动化，可进行自动修复，安全响应，故障排除，部署等。
```

![架构图](https://raw.githubusercontent.com/meetbill/meetbill_static/master/butterfly/qingnang/st2_architecture_diagram.jpg)

> * **Sensors**: 传感器是用于入口集成的 Python 插件，用于监视来自外部系统的事件，并在事件发生时触发 StackStorm 触发器。
> * **Triggers**: 触发器是外部事件的 StackStorm表示。有通用触发器（例如计时器，webhooks）和集成触发器（例如 Sensu 警报，JIRA 问题已更新）。可以通过编写传感器插件来定义新的触发器类型。
> * **Actions**: 操作是 StackStorm 出站集成。有通用操作（ SSH，HTTP 请求），集成（ OpenStack，Docker，Puppet ）或自定义操作。操作是通过添加几行元数据而被使用到StackStorm 中的 Python 插件或任何脚本。用户可以通过 CLI，API 或 Web UI 直接调用操作，也可以将其用作自动化的一部分-规则和工作流。
> * **Rules**: 规则将触发器映射到操作（或工作流），应用匹配条件，并将触发器有效负载数据映射到操作输入。
> * **Workflows**: 工作流将动作组合为“超级动作”，定义顺序，过渡条件，并将上下文数据从一个动作传递到下一个动作。大多数自动化是多步骤的（例如：多个动作）。就像“基本”动作一样，工作流在动作库中可用，并且可以手动调用或由规则触发。
> * **Packs**: 包是内容部署的单位。它们通过对集成（triggers and actions）和自动化（rules and workflows）进行分组，简化了 StackStorm 可插入内容的管理和共享。StackStorm Exchange上的包装数量越来越多。用户可以创建自己的包，在 GitHub 上共享它们，或将其提交给 StackStorm Exchange 组织。
> * **Audit trail**: 审核跟踪是手动或自动执行操作的历史记录，并记录并存储了触发上下文和执行结果的全部详细信息。它还在审计日志中捕获，以与外部日志记录和分析工具集成：LogStash，Splunk，statsd或syslog。

StackStorm 是具有模块化体系结构的服务。它由松散耦合的微服务组件组成，这些组件通过消息总线进行通信，并水平扩展以实现大规模自动化。StackStorm 具有完整的 REST API，CLI 客户端和 Web UI，供管理员和用户在本地或远程操作它，以及 Python 客户端绑定，以方便开发人员。

## 3 总体设计

> 总体设计重点是设计与折衷

### 3.1 系统架构

> 一般来说会有个简单的架构图，并配以文字对架构进行简要说明；

### 3.2 模块简介

> 架构图中如果有很多模块，需要对各个模块的功能进行简要介绍；

### 3.3 设计与折衷

> 设计与折衷是总体设计中最重要的部分；

### 3.4 潜在风险

## 4 详细设计

> 详细设计重点在“详细”

### 4.1 模块 xx

> (有了数据库+接口+流程，别的同学拿到详设文档，基本也能够搞定了)

#### 4.1.1 交互流程

> 简要的交互可用文字说明，复杂的交互建议使用流程图，交互图或其他图形进行说明

#### 4.1.2 数据库设计

#### 4.1.3 接口形式
