
01
简介
ChaosMeta 是一款面向自动化演练而设计的云原生混沌工程平台。提供了可视化编排调度、数据隔离、多云管理等平台功能,以及丰富的故障注入能力,覆盖演练全生命周期。凝聚了蚂蚁集团在公司级大规模红蓝攻防演练实践中多年积累的方法论、技术能力以及产品能力。
02
新版本特性
▌无损注入
日志注入是一个简单的故障能力,本质上就是对文件追加文本内容。但是由此延伸的无损注入思想是比较重要的。
顾名思义,无损注入就是希望能在不真正影响业务的情况下进行演练,挖掘出应用的监控告警、止血、自愈等应急流程的不足,是一种风险最小化、非常适合在生产环境进行的演练方式。
无损注入的实现方案一般有两种:
如果某个应用的监控指标是依赖日志内容而来的,那么通过对应用的日志文件注入相应内容,即可无损验证目标应用的相关应急流程的完善与否;
直接篡改目标监控项的监控数据(比如CPU使用率),验证后续应急流程是否完善。
(1)Common Error
平时我们会监控日志文件中的"Error"、"Exception"等组合关键词的数量,以此来判断一个应用状态是否有异常,如果发生了突增,大概率说明应用出现了故障。因此,可以使用日志注入(文件追加)的能力模拟这类故障
(2)接口请求耗
出于对监控采集上报的性能影响考虑,有些应用使用的是异步采集的方案,RPC框架把每个接口的请求耗时、返回码输出到日志中,然后由采集 Agent 从日志文件中异步采集数据上报。
下面是一个消息推送接口的耗时监控采集样例,从日志文件中收集每次接口的耗时数据上报到监控平台:

▌自动化运行实验
业界的混沌工程原则为:
1. 建立一个围绕稳定状态行为的假说
2. 多样化真实世界的事件
3. 在生产环境中运行实验
4. 最小化爆炸半径
5. 持续自动化运行实验
服务高可用常态保鲜
我们对线上应用都有服务高可用的要求,比如要求具备多副本+服务自动负载均衡的能力,定时进行常态演练就是高可用能力持续保鲜的一种保障方式。
由于是生产环境,那么我们就不能随随便便就直接自动发起,因为你无法保证某个应用是不是时时刻刻都是多副本可用状态,比如在演练前刚好只有一个副本可用,并且有大量用户流量访问的情况下,你配置的演练自动发起了,那么就会酿成不可估量的后果。
那么这个例子中,就有几个操作,可以增加你自动化演练的信心:确认应用多副本、服务用户流量在可接受范围内、演练后应用能回复到多副本状态。
而我们这次演练的目的就是要校验服务的高可用性,所以对应的服务可用性度量也是必须的。
那么只要把所有担忧的因素都配置到编排中了,只要运行结果是成功的,这次演练就是一次符合预期的演练,反之执行失败了再通过告警通知相关负责人介入,就能大大解放在演练中的人力投入。
红蓝攻防演练
在进行红蓝攻防演练的时候,蓝军一般负责设计场景进行演练,并且最后对红军的应急效率(人员、平台)做出一个尽量客观的评测,以此来牵引红军的防御能力建设方向。
这是一个简单的红蓝攻防演练样例,针对应用在网络延迟过大的场景。
既然涉及到网络流量类监控,那么服务流量是一个必要条件,没有服务流量,注入了网络延迟,也不会触发服务延迟过高的告警,因此需要配置一个 Mock 流量的节点;
而准入检测,度量当前流量水位是否满足预期也是需要的,否则接下来的流程都大概率是不被红军认可的;

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



