混沌工程 ChaosMeta 的全新版本 V0.6.0 现已正式发布!该版本包含了许多新特性和增强功能,在编排界面提供了包括流量注入、度量等各类节点的支持,可视化支撑演练全流程。解决混沌工程原则中“持续自动化运行实验”的最后一公里问题。

简介

ChaosMeta 是一款面向自动化演练而设计的云原生混沌工程平台。提供了可视化编排调度、数据隔离、多云管理等平台功能,以及丰富的故障注入能力,覆盖演练全生命周期。凝聚了蚂蚁集团在公司级大规模红蓝攻防演练实践中多年积累的方法论、技术能力以及产品能力。

新版本特性

新版本中,新增了DNS异常、日志注入等故障能力,并且在可视化编排界面中提供了对流量注入、度量等各类节点的支持,提供自动化混沌工程的支撑能力。

▌无损注入

日志注入是一个简单的故障能力,本质上就是对文件追加文本内容。但是由此延伸的无损注入思想是比较重要的。

顾名思义,无损注入就是希望能在不真正影响业务的情况下进行演练,挖掘出应用的监控告警、止血、自愈等应急流程的不足,是一种风险最小化、非常适合在生产环境进行的演练方式。

无损注入的实现方案一般有两种:

  1. 如果某个应用的监控指标是依赖日志内容而来的,那么通过对应用的日志文件注入相应内容,即可无损验证目标应用的相关应急流程的完善与否;
  2. 直接篡改目标监控项的监控数据(比如CPU使用率),验证后续应急流程是否完善。

下面是两个日志注入的演练场景:

(1)Common Error

平时我们会监控日志文件中的"Error"、"Exception"等组合关键词的数量,以此来判断一个应用状态是否有异常,如果发生了突增,大概率说明应用出现了故障。因此,可以使用日志注入(文件追加)的能力模拟这类故障

(2)接口请求耗时

出于对监控采集上报的性能影响考虑,有些应用使用的是异步采集的方案,RPC框架把每个接口的请求耗时、返回码输出到日志中,然后由采集Agent从日志文件中异步采集数据上报。

下面是一个消息推送接口的耗时监控采集样例,从日志文件中收集每次接口的耗时数据上报到监控平台:

在这种情况下也可以使用日志注入(文件追加)的故障能力模拟请求耗时过大的故障场景,而不用真正对应用注入网络故障。

无损注入在一些只需要快速验证大量应用的监控告警、定位、预案等标准化应急能力的场景上非常高效。

▌自动化运行实验

业界的混沌工程原则为:

  1. 建立一个围绕稳定状态行为的假说
  2. 多样化真实世界的事件
  3. 在生产环境中运行实验
  4. 最小化爆炸半径
  5. 持续自动化运行实验

而其中前四条在行业中都总有办法实现,但是最后这个“持续自动化运行实验”却始终没有较好的落地方案。

当然很多出名的混沌工程项目都有尝试解决,大部分都提供了定时调度执行的产品能力,但是这个定时执行能力是否敢在生产环境中真正大规模使用起来是存疑的。

原因一方面是故障注入是个高危动作,没有足够的前置准入等检查操作,就没有足够的安全感去自动触发;另一方面是一次演练并不仅仅只有“故障注入”,我们往往还需要做很多的“人工分析”的其他工作,比如注入故障前检查目标应用状态、当前环境等是否符合预设条件、流量是否满足,注入故障后,发现定位恢复耗时多少、分析应急效率等。

ChaosMeta 将这类“人工分析”的工作拆解成了不同类型的原子执行任务,分为“故障注入”、“度量执行”、“流量注入”、“等待”等多种类型的节点,然后根据灵活的编排能力组合成各种业务语义的自动化演练场景,下面展示几个简单的样例:

服务高可用常态保鲜

我们对线上应用都有服务高可用的要求,比如要求具备多副本+服务自动负载均衡的能力,定时进行常态演练就是高可用能力持续保鲜的一种保障方式

由于是生产环境,那么我们就不能随随便便就直接自动发起,因为你无法保证某个应用是不是时时刻刻都是多副本可用状态,比如在演练前刚好只有一个副本可用,并且有大量用户流量访问的情况下,你配置的演练自动发起了,那么就会酿成不可估量的后果。

那么这个例子中,就有几个操作,可以增加你自动化演练的信心:确认应用多副本、服务用户流量在可接受范围内、演练后应用能回复到多副本状态

而我们这次演练的目的就是要校验服务的高可用性,所以对应的服务可用性度量也是必须的。

那么只要把所有担忧的因素都配置到编排中了,只要运行结果是成功的,这次演练就是一次符合预期的演练。反之执行失败了再通过告警通知相关负责人介入。就能大大解放在演练中的人力投入

红蓝攻防自动化

在进行红蓝攻防演练的时候,蓝军一般负责设计场景进行演练,并且最后对红军的应急效率(人员、平台)做出一个尽量客观的评测,以此来牵引红军的防御能力建设方向。

评判标准常见的一种方式是,判断一场故障中,红军应急的发现、定位、恢复耗时是否分别满足1、5、10分钟内的要求,否则就扣分。既然涉及到“耗时”,那么必然需要一个准确的起始时间点(故障生效)和目标时间点(发现、定位、恢复时刻)。

起始时间点就是达到红军认为形成了故障标准的时刻,而这并不一定是传统意义上故障注入的时刻,比如目标服务承诺保障服务延迟3000ms以下,那么只有网络延时在3000ms以上才会被认为是故障,红军才应该去应急,业务恢复目标同理也是3000ms以下。而如果直接以故障注入操作时刻来算,就会造成很大的误差,甚至这个“故障注入”未必就能真正造成红军认为的故障,所以故障生效度量也是非常必要的一个环节。

蓝军为了对每次故障的红军应急效率进行评价,需要收集各个应急平台(监控平台、定位平台、自愈平台等)的数据,人工收集分析是一项十分繁重的工作。而在传统的混沌工程平台上只有故障模拟能力,同样一个演练场景,这些“人工操作”的工作都要一次次重复的执行。而 ChaosMeta 正是希望能把这些“人工操作”都配置到平台中,提升演练效率。

网络故障攻防演练

这是一个简单的红蓝攻防演练样例,针对应用在网络延迟过大的场景

既然涉及到网络流量类监控,那么服务流量是一个必要条件,没有服务流量,注入了网络延迟,也不会触发服务延迟过高的告警,因此需要配置一个Mock流量的节点;

而准入检测,度量当前流量水位是否满足预期也是需要的,否则接下来的流程都大概率是不被红军认可的;

然后剩下的就是度量故障生效点以及业务恢复时间点的了,用来收集数据以便分析应急效率

未来方向

接下来我们会继续完善各方面的能力

  1. 支持多云、非云管理,即管理跨集群的pod/node以及非k8s机器/裸容器;
  2. 完善度量能力的数据分析能力,当前只能度量出故障生效、定位、恢复等单一时刻,还不具备联合多节点的时刻进行分析(比如:恢复时刻-生效时刻 < 目标耗时);
  3. 支持更多各类节点的原子能力,比如支持mysql、oceanbase、redis等主流开源项目的业务级别故障能力;
  4. 支持一些跟大模型训练稳定性以及推理架构风险相关的故障能力以及度量能力,比如GPU高负载注入。

加入我们

作为一个开放的项目,我们认可开源的研发模式,并致力于将 ChaosMeta 社区打造成一个开放和有创造力的社区。后续,所有的研发、讨论等相关工都会在社区透明运行。

我们欢迎任何形式的参与,包括且不限于提问、代码贡献、技术讨论、需求建议等。期待收到社区想法和反馈,以推动项目往前进一步发展。

如果对我们的项目或者设计理念感兴趣,请 star 我们的项目给予支持。

项目 GitHub 地址:https://github.com/traas-stack/chaosmeta

官方文档:https://chaosmeta.gitbook.io/chaosmeta-cn

微信群:请添加负责人(微信号:KingsonKai)邀请入1群,或者扫码入2群

钉钉群:21765030887

公众号:ChaosMeta混沌工程

自动化混沌工程 ChaosMeta V0.6 版本发布的更多相关文章

  1. COMCMS v0.9 版本发布,带前后端的一个响应式企业站

    前言:踏入十二月,人生也即将进入下一个阶段. 最近忙于其他,代码也是偶尔更新.目前算是0.9的版本,就是基本上可以完成一个简单的企业站/博客的功能. 主要特点:前台完整演示:文章.产品.留言.界面响应 ...

  2. 比Ansible更吊的自动化运维工具,自动化统一安装部署自动化部署udeploy 1.0 版本发布

    新增功能: 逻辑与业务分离,完美实现逻辑与业务分离,业务实现统一shell脚本开发,由框架统一调用. 并发多线程部署,不管多少台服务器,多少个服务,同时发起线程进行更新.部署.启动. 提高list规则 ...

  3. git commit 、CHANGELOG 和版本发布的标准自动化

    一直以来,因为团队项目迭代节奏很快,每次发布的更新日志和版本更新都是通过人肉来完成的.有时候实在忙的团团转,对于手动的写这些更新信息就显得力不从心了.对于团队新来的小伙伴,有时候遇到些紧急情况,就更显 ...

  4. STM32F429的新版用户手册更新记录, 改进、交流(2019-08-18发布V0.9版本)

    2019-06-16 发布首版V0.1 2019-06-23 发布V0.2版本 新增章节: 第3章 STM32F429 整体把控 第4章 STM32F429 工程模板建立(MDK5) 第5章 STM3 ...

  5. Kurator v0.3.0版本发布

    摘要:2023年4月8日,Kurator正式发布v0.3.0版本. 本文分享自华为云社区<华为云 Kurator v0.3.0 版本发布!集群舰队助力分布式云统一管理>,作者:云容器大未来 ...

  6. 支持边云协同终身学习特性,KubeEdge子项目Sedna 0.3.0版本发布!

    摘要:随着边缘设备数量指数级增长以及设备性能的提升,边云协同机器学习应运而生,以期打通机器学习的最后一公里. 本文分享自华为云社区<支持边云协同终身学习特性,KubeEdge子项目Sedna 0 ...

  7. KCL v0.4.5 发布 - 更好的编写便利性改进,稳定性,体验提升与多平台支持

    简介 KCL 团队很高兴地宣布 KCL v0.4.5 版本现在已经可用!本次发布主要为 KCL 语言编写便利性和稳定性提升,错误信息改进以及更多平台包括 windows 版本支持以及更多下载方式支持. ...

  8. 关于ML.NET v0.6的发布说明

    ML.NET 0.6版本提供了几项令人兴奋的新增功能: 用于构建和使用机器学习模型的新API 我们主要关注的是发布用于构建和使用模型的新ML.NET API的第一次迭代.这些新的,更灵活的API支持新 ...

  9. jQuery WeUI V0.4.2 发布

    http://www.oschina.net/news/71590/jquery-weui-v0-4-2 jQuery WeUI V0.4.2 发布了! jQuery WeUI 中使用的是官方WeUI ...

  10. 团队作业——项目Alpha版本发布

    ---恢复内容开始--- https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1   https://edu.cnblogs.com ...

随机推荐

  1. Python数据分析易错知识点归纳(二):Numpy

    二.numpy 不带括号的基本属性 arr.dtype arr.shape # 返回元组 arr.size arr.ndim # 维度 arr.reshape/arr.resize/np.resize ...

  2. 用windows脚本命令netsh快速启用、禁用网络

    用windows脚本命令netsh快速启用.禁用网络 不知道你有没有这种需求:公司单位里的网络是内网,有时需要连接手机热点wifi网络,这时就需要先禁用内网网卡,启用无线网卡.连接内网的时候又需要先禁 ...

  3. Swithch反汇编(四种)

    ------------恢复内容开始------------ Switch语法格式 Switch(表达式) { case 常量表达式1: 语句; break; case 常量表达式2: 语句; bre ...

  4. 使用 vscode 远程登陆自己的电脑/服务器 (不需要内网穿透 😇)

    问题背景 最近有远程调试的需求,从笔记本连入配置比较高的电脑(windows)运行代码,查阅资料后,了解到大致就是两个方法: 共享屏幕远程控制,如 to desk, 向日葵 内网穿透 + ssh 第一 ...

  5. The language server needs at least PHP 7.1 installed. Version found: 7.0.10

    解决方案: 打开VS Code 文件 -> 首选项 -> 设置 -> 在 settings.json 中编辑 在 settings.json 中,加入: "php.exec ...

  6. Flutter系列文章-实战项目

    在本篇文章中,我们将通过一个实际的 Flutter 应用来综合运用最近学到的知识,包括保存到数据库.进行 HTTP 请求等.我们将开发一个简单的天气应用,可以根据用户输入的城市名获取该城市的天气信息, ...

  7. arrch架构部署redis,报错: ignore-warnings ARM64-COW-BUG

    arrch架构服务器redis部署完成后,启动报错.做个记录. arrch架构的redis安装包 下载链接:https://pan.baidu.com/s/1TMXNpMvMDWRFD1f5km7Mw ...

  8. trino on yarn

    一.前言 最近在研究trino on yarn 功能,网上大部分都是关于presto on yarn文章,关于trino on yarn 资料很少,但是本质上差不多,需要修改一些内容比,主要在调试方面 ...

  9. Solution Set -「CF 1514」

    「CF 1514A」Perfectly Imperfect Array Link. 就看序列中是否存在不为平方数的元素即可. #include<bits/stdc++.h> using n ...

  10. Java笔记(细碎小知识点)1

    1.Dos命令:dir:打出当前目录结构:md:创建文件夹:cd+文件夹地址:跳转到当前目录下的对应文件夹:cd..:跳转到上一目录:rd+文件夹:删除文件夹中东西:del+文件(或 "*. ...