阿里混沌工程-chaosblade工具初识

阿里混沌工程-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-operator: Kubernetes 平台实验场景实现,将混沌实验通过 Kubernetes 标准的 CRD 方式定义,很方便的使用 Kubernetes 资源操作的方式来创建、更新、删除实验场景,包括使用 kubectl、client-go 等方式执行,而且还可以使用上述的 chaosblade cli 工具执行。
chaosblade-exec-jvm: Java 应用实验场景实现,使用 Java Agent 技术动态挂载,无需任何接入,零成本使用,而且支持卸载,完全回收 Agent 创建的各种资源。
chaosblade-exec-cplus: C++ 应用实验场景实现,使用 GDB 技术实现方法、代码行级别的实验场景注入。

Chaosblade

二、安装

chaosblade下载地址

wget -c https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/1.3.0/chaosblade-1.3.0-linux-amd64.tar.gz
tar -zxvf chaosblade-1.3.0-linux-amd64.tar.gz
  • 环境变量配置

若安装目录为/root/chaosblade/chaosblade-1.3.0

cat >> ~/.bash_profile << \EOF
PATH=$PATH:/root/chaosblade/chaosblade-1.3.0
export PATH

EOF
source ~/.bash_profile

三、使用

官方文档

官方文档介绍较为详细,下面选择部分命令测试。

[root@node1 ~]# blade create -h
Create a chaos engineering experiment

Usage:
  blade create [command]

Aliases:
  create, c

Examples:
blade create cpu load --cpu-percent 60

Available Commands:
  cplus       C++ chaos experiments
  cpu         Cpu experiment
  disk        Disk experiment
  docker      Docker experiment
  druid       Experiment with the Druid
  dubbo       Experiment with the Dubbo
  es          ElasticSearch experiment!
  file        File experiment
  gateway     gateway experiment!
  hbase       hbase experiment!
  http        http experiment
  jedis       jedis experiment
  jvm         Experiment with the JVM
  k8s         Kubernetes experiment
  kafka       kafka experiment
  lettuce     redis client lettuce experiment
  log         log experiment
  mem         Mem experiment
  mongodb     MongoDB experiment
  mysql       mysql experiment
  network     Network experiment
  process     Process experiment
  psql        Postgrelsql experiment
  rabbitmq    rabbitmq experiment
  redisson    redisson experiment
  rocketmq    Rocketmq experiment,can make message send or pull delay and exception
  script      Script chaos experiment
  servlet     java servlet experiment
  strace      strace experiment
  systemd     Systemd experiment
  tars        tars experiment

Flags:
  -a, --async             whether to create asynchronously, default is false
  -e, --endpoint string   the create result reporting address. It takes effect only when the async value is true and the value is not empty
  -h, --help              help for create
  -n, --nohup             used to internal async create, no need to config
      --uid string        Set Uid for the experiment, adapt to docker

Global Flags:
  -d, --debug   Set client to DEBUG mode

Use "blade create [command] --help" for more information about a command.


1.chaosblade-exec-os

1.1销毁试验
blade status --type create
blade destroy 6fa04946baf42920
1.2.cpu满载试验

旨在 CPU 在特定负载下,验证服务质量、监控告警、流量调度、弹性伸缩等能力。

blade create cpu fullload --timeout 60
1.3.IO试验

验证磁盘 io 高负载下对系统服务的影响,比如监控告警、服务稳定性等。

blade create disk burn --read --path /home
blade create disk burn --write --path /home
1.4.磁盘满载试验

验证磁盘满下对系统服务的影响,比如监控告警、服务稳定性等。
此处使用fallocate预分配空间,瞬间占满空间(对于大部分文件系统例如ext4 xfs)并不实际占用空间。

df -h /home
blade c disk fill --path /home --percent 80 --retain-handle
df -h /home
df -h /home
blade c disk fill --path /home --reserve 0 --timeout 30
df -h /home
1.5.blade server

提供http服务,供远程调用

blade server start -p 9526

开放防火墙端口9526/tcp

firewall-cmd --zone=public --add-port=9526/tcp --permanent
firewall-cmd --reload

其中%20空格

curl  http://192.168.198.131:9526/chaosblade?cmd=create%20cpu%20load%20--cpu-percent%2050
curl http://192.168.198.131:9526/chaosblade?cmd=destroy%204b454fae5486e53e

更多……

2.chaosblade-exec-docker

2.1.nginx网络延迟试验

可使用另外一台客户端机器测试网络延迟,time curl http://192.168.198.131/可能涉及多次访问。

docker pull nginx:latest
docker run --name nginx-test -p 80:80 -d nginx
time curl http://192.168.198.131/
blade create docker network delay --time 3000 --interface eth0 --local-port 80 --container-id 70b82b112fac
time curl http://192.168.198.131/
blade destroy 0de302011f872a49

3.chaosblade-exec-jvm

  • blade prepare jvm(耗时数秒)是执行blade create jvm的先决条件;
  • blade prepare jvm对同一个进程多次进行挂载java agent操作,仅有一个实例,更新时间发生变化。
  • 新版本中,执行blade create jvm操作,若没有处于运行状态的blade prepare jvm实例,则会隐式创建(旧版本可能会报错),因此还是推荐显示创建blade prepare jvm实例。
3.1.jvm延迟

说明:fb5a73661026c4f0blade create jvm试验实例ID;d54ae242c4538e97为隐式生成的blade prepare jvm实例ID

blade status --type prepare --target jvm
blade create jvm delay --time 3000 --classname=com.example.blade.HelloController --methodname=hello  --pid 6428
blade status --type prepare --target jvm
blade destroy fb5a73661026c4f0
blade status --type prepare --target jvm
blade revoke d54ae242c4538e97

或者

说明:4d5adfcbc7d46956blade create jvm试验实例ID;c05f768526eaf4db为显式生成的blade prepare jvm实例ID

blade prepare jvm  --pid 6428
blade create jvm delay --time 3000 --classname=com.example.blade.HelloController --methodname=hello  --pid 6428
blade status --type prepare --target jvm
blade destroy 4d5adfcbc7d46956"
blade revoke c05f768526eaf4db
blade status --type prepare --target jvm
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬山境KL攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值