【混沌测试】ChaosBlade:从安装到实战

embedded/2024/11/18 12:09:18/

ChaosBlade:从安装到实战

  • 1.工具介绍
  • 2.安装步骤
    • 2.1 准备
    • 2.2 安装
  • 3.实战
    • 3.1 模拟 CPU 负载实验
    • 3.2 模拟内存占用实验
    • 3.3 模拟磁盘 IO 负载实验

在这里插入图片描述

1.工具介绍

🚀 GitHub 地址:https://github.com/chaosblade-io/chaosblade

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

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

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

2.安装步骤

2.1 准备

你可以从 Releases 地址下载最新的 chaosblade 工具包,解压即用。
在这里插入图片描述
你可以用 lscpu 命令检查 Linux 系统是使用 AMD 还是 ARM 架构。

在这里插入图片描述

查看输出中的 Architecture 字段,如果显示 x86_64,则系统是 AMD64 架构。

2.2 安装

博主使用的是 1.7.4 版本。

cd /usr/local/chaosblade
tar -xzf chaosblade-1.7.4-linux-amd64.tar.gz

在这里插入图片描述
在这里插入图片描述

运行以下命令验证 ChaosBlade 是否安装成功。

在这里插入图片描述

3.实战

🚀 使用教程https://chaosblade.io/docs/experiment-types/host/

在这里插入图片描述

3.1 模拟 CPU 负载实验

🚀 实验指导https://chaosblade.io/docs/experiment-types/host/cpu/blade_create_cpu_load

使用 ChaosBladeblade create 命令来模拟 CPU 占用率达到 50 % 50\% 50%

./blade create cpu fullload --cpu-percent 50

返回如下:

{"code":200,"success":true,"result":"e3d80b7db0adaef1"}

可以使用 tophtop 命令来查看 CPU 占用率,确认是否达到了预期的 50 % 50\% 50%

在这里插入图片描述

我们可以看一下云主机的 CPU 利用率指标。

在这里插入图片描述

实验完成后,可以使用 blade destroy 命令来停止实验。

./blade destroy e3d80b7db0adaef1

在这里插入图片描述

我们看一下整个实验过程的 CPU 利用率的情况。

在这里插入图片描述

3.2 模拟内存占用实验

🚀 实验指导https://chaosblade.io/docs/experiment-types/host/mem/blade_create_mem_load

使用 ChaosBladeblade create 命令来模拟内存占用率达到 50 % 50\% 50%

./blade create mem load --mode ram --mem-percent 50

在这里插入图片描述

可以使用 free -mtop 命令来查看内存占用率,确认是否达到了预期的 50 % 50\% 50%

在这里插入图片描述

实验完成后,可以使用 blade destroy 命令来停止实验。

./blade destroy 404700834746a2a5

在这里插入图片描述

3.3 模拟磁盘 IO 负载实验

🚀 实验指导https://chaosblade.io/docs/experiment-types/host/disk/blade%20create%20disk%20burn

在执行实验之前可先观察磁盘 IO 读写负载。

iostat -x -t 10

在这里插入图片描述
rkB/swkB/s%utiliostat 命令输出中的几个重要指标,用于监控系统磁盘 I/O 性能。下面是对这些指标的简要解释:

  • rkB/sRead Kilobytes per second
    • 含义:表示 每秒钟从磁盘读取的数据量,单位是千字节(KB)。
    • 用途:用于衡量磁盘读取操作的性能。数值越大,表示读取速度越快。
  • wkB/sWrite Kilobytes per second
    • 含义:表示 每秒钟写入磁盘的数据量,单位是千字节(KB)。
    • 用途:用于衡量磁盘写入操作的性能。数值越大,表示写入速度越快。
  • %utilUtilization
    • 含义:表示 磁盘设备的利用率,即磁盘设备在采样期间处于繁忙状态的时间百分比。
    • 用途:用于衡量磁盘设备的负载情况。数值越高,表示磁盘设备越繁忙。如果 %util 接近 100%,可能表示磁盘设备已经达到了其最大处理能力,可能会出现性能瓶颈

执行磁盘读 IO 负载高场景。

./blade create disk burn --read --path /home
  • --path string:指定提升磁盘 IO 的目录,会作用于其所在的磁盘上,默认值是 /
  • --read:触发提升磁盘读 IO 负载,会创建 600M 的文件用于读,销毁实验会自动删除。
  • --size string:块大小, 单位是 M,默认值是 10,一般不需要修改,除非想更大的提高 IO 负载。
  • --timeout string:设定运行时长,单位是秒,通用参数。
  • --write:触发提升磁盘写 IO 负载,会根据块大小的值来写入一个文件,比如块大小是 10,则固定的块的数量是 100,则会创建 1000M 的文件,销毁实验会自动删除。

执行 iostat 命令可以看到读负载增大,使用率达 99.8 % 99.8\% 99.8%

在这里插入图片描述
实验完成后,可以使用 blade destroy 命令来停止实验。

./blade destroy 9440545fd5599b6b

在这里插入图片描述
在这里插入图片描述

可同时执行读写 IO 负载场景,不指定 path,默认值是 /

./blade create disk burn --read --write

在这里插入图片描述

通过 iostat 命令可以看到,整个磁盘的 IO 使用率达到了 94.37 % 94.37\% 94.37%

在这里插入图片描述

可以看一下云主机针对硬盘相关的指标数据。

在这里插入图片描述

实验完成后,可以使用 blade destroy 命令来停止实验。

在这里插入图片描述


http://www.ppmy.cn/embedded/138532.html

相关文章

批量将当前目录里的所有pdf 转化为png 格式

下面是一个 Python 脚本,可以批量将当前目录中的所有 PDF 文件转换为 PNG 格式,每页 PDF 文件会生成对应的 PNG 图片: import os from pdf2image import convert_from_path# 指定当前目录 directory os.getcwd()# 获取当前目录中所有的 PDF…

游戏引擎学习第13天

视频参考:https://www.bilibili.com/video/BV1QQUaYMEEz/ 改代码的地方尽量一张图说清楚吧,懒得浪费时间 game.h #pragma once #include <cmath> #include <cstdint> #include <malloc.h>#define internal static // 用于定义内翻译单元内部函数 #…

【springboot】启动原理

目录 1. 说明2. 启动类与注解3. SpringApplication的构建与服务类型确定4. 启动流程5. 自动配置与Bean实例化6. 启动内嵌服务器 1. 说明 1.Spring Boot的启动原理是一个复杂而又精妙的流程&#xff0c;它涉及多个组件和步骤的协同工作。 2. 启动类与注解 1.Spring Boot应用通…

【更新中】《硬件架构的艺术》笔记(三):处理多个时钟

介绍 单时钟设计更易于实现&#xff0c;也更少出现亚稳态、建立和保持时间违例方面的问题。但在实践中&#xff0c;很少有设计只在一个时钟下运行。 多时钟域 多个始终可以有以下一种或多种时钟关系&#xff1a; 1、时钟频率不同。 2、时钟频率相同&#xff0c;但相位不同…

【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os

1、gcc -O的作用 GCC 提供的 -O 系列选项用于优化代码。这些选项可以控制编译器对代码进行优化的程度和类型&#xff0c;从而提高代码的性能、减小代码体积或优化其他特性。 2、gcc -Og -O0 -O1 -O2 -O3 -Os 2.1 gcc -Og 启用调试友好的优化&#xff0c;平衡调试器功能与性…

JAVA-链表

1.链表的概念及结构 链表是一种物理存储结构上非连续存储结构(逻辑上连续)&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 注意&#xff1a; 根据上图可看出&#xff0c;链表是在逻辑结构连续的&#xff0c;但是在物理结构上不一定现实中的结点一般都是通…

嵌入式开发人员如何选择合适的开源前端框架进行Web开发

在嵌入式系统的Web开发中&#xff0c;前端框架的选择对于项目的成败有着决定性的影响。一个合适的框架不仅能提高开发效率&#xff0c;还能保证系统的稳定性和可扩展性。本文将介绍几款适用于嵌入式Web开发的开源前端框架&#xff0c;并探讨它们的优缺点。 1. Element Plus V…

C++:boost库安装

官网&#xff1a;https://www.boost.org/ Boost 库在 C 社区中广受欢迎&#xff0c;主要因为它提供了丰富、强大且稳定的功能&#xff0c;可以显著提高开发效率和代码质量。下面是使用 Boost 库的主要优势和特点&#xff1a; 1. 丰富的功能集合 Boost 提供了数十个高质量的 …