目录
git仓库:chaosblade/README_CN.md at master · chaosblade-io/chaosblade · GitHub
ChaosBlade是什么?
ChaosBlade: 一个简单易用且功能强大的混沌实验实施工具
ChaosBlade是阿里巴巴开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,可用于引入各种异常和故障,例如断网、丢包延迟、服务器宕机、cpu、内存d等资源耗尽等,以测试系统的稳定性和可靠性。
通过这种方式,团队可以评估系统在面对异常情况时的表现,并针对性地改进系统设计、架构或部署流程,从而提高系统的鲁棒性和可用性。
混沌实验(Chaos Engineering)是一种系统设计和测试方法,旨在帮助组织发现和解决系统中的弱点和故障点。在混沌实验中,工程团队会有意地引入各种异常和故障,例如断网、服务器宕机、资源耗尽等,以测试系统的稳定性和可靠性。通过这种方式,团队可以评估系统在面对异常情况时的表现,并针对性地改进系统设计、架构或部署流程,从而提高系统的鲁棒性和可用性。
混沌实验通常是在生产环境中进行的,但是在小范围、有限影响的情况下进行,以最大程度地减少对业务的影响。这种方法强调了对系统的持续测试和改进,以确保系统能够在不断变化的环境中保持稳定和可靠。
ChaosBlade可以制造哪些工况/故障?
ChaosBlade 支持丰富的实验场景,场景包括:
- 基础资源:比如 CPU、内存、网络、磁盘、进程等实验场景;
- Java 应用:比如数据库、缓存、消息、JVM 本身、微服务等,还可以指定任意类方法注入各种复杂的实验场景;
- C++ 应用:比如指定任意方法或某行代码注入延迟、变量和返回值篡改等实验场景;
- Docker 容器:比如杀容器、容器内 CPU、内存、网络、磁盘、进程等实验场景;
- 云原生平台:比如 Kubernetes 平台节点上 CPU、内存、网络、磁盘、进程实验场景,Pod 网络和 Pod 本身实验场景如杀 Pod,容器的实验场景如上述的 Docker 容器实验场景;
上面每个场景按领域实现封装成单独的项目,目前包含的项目如下:
- chaosblade:混沌实验管理工具,包含创建实验、销毁实验、查询实验、实验环境准备、实验环境撤销等命令,是混沌实验的执行工具,执行方式包含 CLI 和 HTTP 两种。提供完善的命令、实验场景、场景参数说明,操作简洁清晰。
- chaosblade-spec-go: 混沌实验模型 Golang 语言定义,便于使用 Golang 语言实现的场景都基于此规范便捷实现。
- chaosblade-exec-os: 基础资源实验场景实现。
- chaosblade-exec-docker: Docker 容器实验场景实现,通过调用 Docker API 标准化实现。
- chaosblade-exec-cri: 容器实验场景实现,通过调用 CRI 标准化实现。
- chaosblade-operator: Kubernetes 平台实验场景实现,将混沌实验通过 Kubernetes 标准的 CRD 方式定义,很方便的使用 Kubernetes 资源操作的方式来创建、更新、删除实验场景,包括使用 kubectl、client-go 等方式执行,而且还可以使用上述的 chaosblade cli 工具执行。
- chaosblade-exec-jvm: Java 应用实验场景实现,使用 Java Agent 技术动态挂载,无需任何接入,零成本使用,而且支持卸载,完全回收 Agent 创建的各种资源。
- chaosblade-exec-cplus: C++ 应用实验场景实现,使用 GDB 技术实现方法、代码行级别的实验场景注入。
使用文档
你可以从 Releases 地址下载最新的 chaosblade 工具包,解压即用。如果想注入 Kubernetes 相关故障场景,需要安装 chaosblade-operator,详细的中文使用文档请查看 chaosblade-help-zh-cn。
chaosblade 支持 CLI 和 HTTP 两种调用方式,支持的命令如下:
- prepare:简写 p,混沌实验前的准备,比如演练 Java 应用,则需要挂载 java agent。例如要演练的应用名是 business,则在目标主机上执行
blade p jvm --process business
。如果挂载成功,返回挂载的 uid,用于状态查询或者撤销挂载。 - revoke:简写 r,撤销之前混沌实验准备,比如卸载 java agent。命令是
blade revoke UID
- create: 简写是 c,创建一个混沌演练实验,指执行故障注入。命令是
blade create [TARGET] [ACTION] [FLAGS]
,比如实施一次 Dubbo consumer 调用 xxx.xxx.Service 接口延迟 3s,则执行的命令为blade create dubbo delay --consumer --time 3000 --service xxx.xxx.Service
,如果注入成功,则返回实验的 uid,用于状态查询和销毁此实验使用。 - destroy:简写是 d,销毁之前的混沌实验,比如销毁上面提到的 Dubbo 延迟实验,命令是
blade destroy UID
- status:简写 s,查询准备阶段或者实验的状态,命令是
blade status UID
或者blade status --type create
- server:启动 web server,暴露 HTTP 服务,可以通过 HTTP 请求来调用 chaosblade。例如在目标机器xxxx上执行:
blade server start -p 9526
,执行 CPU 满载实验:curl "http:/xxxx:9526/chaosblade?cmd=create%20cpu%20fullload"
以上命令帮助均可使用 blade help [COMMAND]
或者 blade [COMMAND] -h
查看,也可查看新手指南,或者上述中文使用文档,快速上手使用。
基础资源实验场景(网络,内存,CPU等)
(git主页:https://github.com/chaosblade-io/chaosblade-exec-os/blob/master/README_CN.md)
chaosblade 可测试的场景很多,我们这里以为<基础资源混沌实验场景>例了解.
Chaosblade-exec-os: 这个项目主要用于测试基础资源故障场景: CPU、内存、网络、磁盘等,每个场景下又细分了很多故障,比如网络丢包、网络延迟,且场景有支持很多参数来控制影响面,且每个故障场景都有兜底策略,保障故障注入可控。
使用
此项目可以单独编译后使用,但更建议通过 chaosblade CLI 工具使用,因为其操作简单且就有完善的场景管理和命令提示。详细的中文使用文档请参考:README | chaosblade-help-zh-CN
编译
此项目采用 golang 语言编写,所以需要先安装最新的 golang 版本,最低支持的版本是 1.11。Clone 工程后进入项目目录执行以下命令进行编译:
make
如果在 mac 系统上,编译当前系统的版本,请执行:
make build_darwin
如果想在 mac 系统上,编译 linux 系统版本,请执行:
make build_linux
你也可以只 clone chaosblade 项目,在项目目录下执行 make
或 make build_linux
来统一编译,实现通过 blade cli 工具执行此项目故障场景。