当前位置: 首页 > 工具软件 > ChaosBlade > 使用案例 >

ChaosBlade学习

呼延卓
2023-12-01

一、ChaosBlade简介

ChaosBlade 是阿里巴巴开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,帮助企业提升分布式系统的容错能力,并且在企业上云或往云原生系统迁移过程中业务连续性保障。

Chaosblade 是内部 MonkeyKing 对外开源的项目,其建立在阿里巴巴近十年故障测试和演练实践基础上,结合了集团各业务的最佳创意和实践。

ChaosBlade 不仅使用简单,而且支持丰富的实验场景,场景包括:

  • 基础资源:比如 CPU、内存、网络、磁盘、进程等实验场景;
  • Java 应用:比如数据库、缓存、消息、JVM 本身、微服务等,还可以指定任意类方法注入各种复杂的实验场景;
  • C++ 应用:比如指定任意方法或某行代码注入延迟、变量和返回值篡改等实验场景;
  • Docker 容器:比如杀容器、容器内 CPU、内存、网络、磁盘、进程等实验场景;
  • 云原生平台:比如 Kubernetes 平台节点上 CPU、内存、网络、磁盘、进程实验场景,Pod 网络和 Pod 本身实验场景如杀 Pod,容器的实验场景如上述的 Docker 容器实验场景;

将场景按领域实现封装成一个个单独的项目,不仅可以使领域内场景标准化实现,而且非常方便场景水平和垂直扩展,通过遵循混沌实验模型,实现 chaosblade cli 统一调用。目前包含的项目如下:

  • 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 技术实现方法、代码行级别的实验场景注入。

二、使用介绍

2.1 环境配置

chaosblade 工具是开箱即用的,只需要下载并解压缩其 release 文件,就可以调用其中的可执行文件来进行故障注入。

# 创建chaosblade
mkdir -p /home/work/chaos/bin && cd /home/work/chaos/bin

# 下载release文件
curl https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/1.2.0/chaosblade-1.2.0-linux-amd64.tar.gz -o chaosblade-1.2.0-linux-amd64.tar.gz

# 解压缩
tar -zxvf chaosblade-1.2.0-linux-amd64.tar.gz && rm chaosblade-1.2.0-linux-amd64.tar.gz

# 给当前会话新增blade命令
$ alias blade="/home/work/chaos/bin/chaosblade-1.2.0/blade"

2.2 配置网络丢包

针对特定ip、端口配置丢包率99%,丢包持续时间120s

blade create network loss --percent 99 --interface eth0 --destination-ip ip1,ip2,ip3,ip4 --remote-port port1,port2 --timeout 120

2.3 注入方法延时

blade create jvm delay --time 10000 --classname=com.xxx.ContractFacade --methodname=queryContract --pid 18020

2.4 修改方法返回值

2.5 抛出自定义异常

blade create jvm throwCustomException --exception java.lang.Exception --exception-message this-is-a-mocked-exception --classname=com.xxx.InstallmentContractServer --methodname=queryContract --pid 18020

2.6 cpu满载

blade create cpu fullload

2.7磁盘IO高

blade create disk burn --write --read  --size 10 --timeout 300

2.8 禁止端口访问

blade create network drop --local-port 80 --remote-port 80

2.9 网络延时

blade create network delay --interface eth0 --time 3000 --local-port 6483 --remote-port 6483

2.10查看创建的实验记录

blade status --type create

2.11 查看销毁的实验记录

blade status --type destroy

2.12 访问域名失败

blade create network dns --domain staging.ipay.com --ip 192.10.10.1

2.13 访问域名延时

blade create network delay --time 6000 --offset 100 --interface eth0 --remote-port 80 --destination-ip 192.0.2.11

2.14 销毁模拟实验

blade destroy uuid

三、ChaosBlade原理探析

3.1 

 类似资料: