#作者:西门吹雪
西门吹雪,为你细细道来
解锁混沌工程: 用指标监控实现系统自愈与智能告警
在2014年,Netflix创建了一种新的角色,叫作混沌工程师(Chaos Enigneer),并开始向工程社区推广,任何一个系统在上线之前,都不能说,或者不能保住百分百的稳定性和健壮性,那么如何保证一个系统的稳定性和健壮性,这就是需要开发工程师去考虑的问题。随之产生了混沌工程。
随着混沌工程的应运而生,混沌工程开始出现通过应用一些经验探索的原则,来学习观察系统是如何反应的。这就跟科学家做实验去学习物理定律一样,混沌工程师通过做实验去了解系统。在系统中应用混沌工程能提升整个系统的弹性。通过设计并且进行混沌实验,我们可以了解到系统脆弱的一面,在还没出现对用户造成伤害之前,我们就能主动发现这些问题。
混沌工程与传统测试的区别
混沌工程可能给人的第一个感觉就是测试,但是它们是有区别的。虽然混沌工程跟传统测试通常都会共用很多测试工具的,例如都是使用错误注入工具,但混沌工程是通过实践对系统有更新的认知,而传统测试则是使用特定方式对某一块进行特定测试。
譬如在传统测试里面,我们可以写一个测试案例,我们给定特定的条件,产生一个特定的输出,如果不满足断言条件,测试就出错了,这个其实是具有很明确的特性。
但混沌工程是试验,而试验会有怎样的新信息生成,我们是不确定的。譬如我们可以进行下面的这些试验:
- 模拟整个IDC(Internet Data Center)即互联网数据中心的断开
- 选择一些网络连接的特定时间延迟或者卡顿
- 随机生成IO的错误
- 让服务器Cpu耗尽
- 模拟内存使用压力过大
- 网络中突然的数据丢包
以上这些原因,最后会有什么样的结果,有些是我们可以预料,但有些可能我们就不会预先知道,只有服务最后出问题了,或者影响了线上业务,我们复盘的过程中才会恍然大明白,原来如此啊。
在现代技术中,所有的最不可预测的,可能就是网络了,因为这里面包含很多原因,可能和网络运营商有关系,也可能和当地网络线路,或者说与路由器原因,也可能是调制解调器,也可能是网卡性能等等原因,这些原因叠加在一起就是组合成了网络不稳定的原因,但是在这种复杂的条件下,我们系统就是需要混沌工程来消除未知的因素带来对线上部署服务的影响。
任何的混沌平台,都是一种在故障发生之前发现故障的技术。
目前的阿里开源混沌工程工具 ChaosBlade应该是一个简单易用,而且功能强大的混沌实验实施工具了。
ChaosBlade 是阿里巴巴开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,帮助企业提升分布式系统的容错能力,并且在企业上云或往云原生系统迁移过程中业务连续性保障。
chaosblade 目前可以针对基础资源,docker容器,云原生平台等进行实验演练,这是目前大家所知道的优点和特性。但是我们如何通过混沌平台演练实施场景,去观察到对应的容器执行的cpu或者内存等指标,实现对应的告警通知呢,这是我们需要思考的问题,也是我们需要去解决的问题。
因为在混沌工程中,我们不仅需要知道能制造什么样的故障,而且还需要知道故障是在什么时候恢复的,通过对故障的执行过程的指标观察,然后通知负责人,进行快速响应和恢复,这应该是SRE最关心的问题。总结来说就是知道什么故障,哪里故障,什么时候恢复故障了。
混沌实验可观测示例
这里我们需要一个可观测性指标的平台,目前通用的大家可能是使用各类时序库,比如 Prometheus、VictoriaMetrics、Thanos,直接作为数据源对接进来即可。
这里我们使用了夜莺系统,这套系统的图表结合配置告警。
目前系统支持的告警比较全面,包括钉钉,企业微信,飞书,mm,telegram,email,电话等等。
混沌工程与可观测性平台
当我们进行混沌平台演练cpu服务的时候如:
这样我们就可以通过观察服务器演练的实际情况:
告警与恢复机制
我们可以清晰看到在这个演练实验情况下服务器内的cpu,以及其他的系统指标,通过不同的系统指标我们可以设置不同的阈值告警。
这里我们可以采集设置cpu的阈值超过60%时候我们可以实现告警通知服务器目前cpu使用率过高,来实现钉钉告警。
这里我们通过查看钉钉告警可以查看到我们的服务器出现了cpu告警:
当服务器性能恢复的时候我们又可以看到整个服务出现了恢复:
通过我们在服务上演练实验对象,采集实验数据,显示在实验dashboard,达到告警阈值,实现告警,小于告警阈值,服务恢复稳定。
混沌工程的未来发展
目前混沌工程和可观测性是两个在构建稳定且高效系统时密切相关的概念。它们可以相互支持,以提高系统的可靠性和性能,这样就可以把混沌和可观测性结合在一起:
-
实时监控与度量: 可观测性旨在实时监控系统的各个方面,例如性能、资源利用率、错误率等。混沌工程可以在运行时引入故障并监视系统的反应。将混沌实验的结果与实时监控数据结合,可以更好地了解系统在面对异常情况时的行为。
-
告警和警报: 可观测性解决方案常常涉及告警和警报,以便在系统出现异常时及时采取措施。通过在混沌实验中引入故障并监测系统的警报响应,团队可以评估警报系统的有效性,并确保在系统受到冲击时能够迅速做出反应。
-
追踪与日志:在混沌工程实验中,通过追踪定位和日志记录可以帮助分析故障的影响范围和传播路径。
-
异常检测与分析: 可观测性技术可以帮助识别系统中的异常行为和性能问题。将混沌实验引入到系统中,可以模拟各种异常情况,从而加速异常检测和分析过程,帮助团队更好地理解系统的行为。
-
自动化响应: 结合可观测性和混沌工程,团队可以实现自动化响应机制。基于实时监控数据和混沌实验结果,系统可以自动触发响应操作,以最小化故障对系统的影响。
通过将混沌工程和可观测性相结合,团队可以更好地了解系统在不同情况下的行为,提高对系统健康状况的洞察力,并采取相应的措施来确保系统的可用性和稳定性。这种综合方法有助于在不断变化的环境中构建出弹性和可靠的系统。
随着混沌工程应用和场景演练的覆盖范围更广,模拟场景实施更多,混沌工程和可观测性技术还将持续地发展与演进。
标签:工程,解锁,混沌,系统,故障,自愈,实验,告警 From: https://blog.csdn.net/qq_40477248/article/details/143357517