# 故障自愈(青囊)

## 青囊

## 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 接口形式


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://meetbill.gitbook.io/butterfly-project-doc/project-handlers/chunfeng/butterfly-qingnang.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
