Chaos Mesh + SkyWalking,打造可观测的混沌工程
title: Chaos Mesh X SkyWalking: 可观测的混沌工程
author:王宁暄
date: 2021-11-29
summary: 本篇文章将分享如何通过将 SkyWalking 和 Chaos Mesh 结合,运用 Event 信息监控,实时了解混沌实验对应用服务性能造成的影响。
tags: ['Chaos Mesh']
【Chaos Mesh + SkyWalking,打造可观测的混沌工程】Chaos Mesh 是一个开源的云原生混沌工程平台,借助 Chaos Mesh,用户可以很方便地对服务注入异常故障,并配合 Chaos Dashboard 实现对整个混沌实验运行状况的监测 。然而,对混沌实验运行情况的监控并不能告诉我们应用服务性能的变化。从系统可观测性的角度来说,我们可能无法单纯通过混沌实验的动态了解故障的全貌,这也阻碍了我们对系统和故障的进一步了解,调试。
Apache SkyWalking 是一个开源的 APM (Application Performance Monitor) 系统,可以对云原生服务提供监控、跟踪、诊断等功能。SkyWalking 支持收集 Event(事件),可在 Dashboard 中查看分布式系统中发生了哪些事件,并可以直观地观测到不同 Event 对服务性能造成的影响,和 Chaos Mesh 结合使用,便可为混沌实验造成的服务影响提供监控。
本教程将分享如何通过将 SkyWalking 和 Chaos Mesh 结合,运用 Event 信息监控,实时了解混沌实验对应用服务性能造成的影响。
准备工作
- 创建 Skywalking 集群,具体可以参考 SkyWalking Readme。
- 部署 Chaos Mesh,推荐使用 helm 安装。
- 安装 Java 测试工具 JMeter (其他工具亦可,仅用于增加服务负载)
- 如果仅作为 Demo 使用,可以参考 chaos-mesh-on-skywalking 这个仓库进行配置
可以参考 chaos-mesh-on-skywalking 仓库中的 demo-deployment.yaml 文件创建。之后使用
kubectl apply -f demo-deployment.yaml -n skywalking
进行部署。部署成功后即可在 SkyWalking-UI 中看到实时监控的服务信息。注意:因为 Spring Boot 的端口也是 8080,在端口转发时要避免和 SkyWalking 的端口冲突,比如使用
kubectl port-forward svc/spring-boot-skywalking-demo 8079:8080 -n skywalking
。Step 2 - 部署 SkyWalking Kubernetes Event Exporter SkyWalking Kubernetes Event Exporter 可以用来监控和过滤 Kubernetes 集群中的 Event ,通过设置过滤条件筛选出需要的 Event,并将这些 Event 发送到 SkyWalking 后台, 这样就可以通过 SkyWalking 观察到你的 Kubernetes 集群中的 Event 何时影响到服务的各项指标了。如果想要一条命令部署,可以参考此配置创建 yaml 文件 ,设置 filters 和 exporters 的参数后,使用
kubectl apply
进行部署。Step 3 - 使用 JMeter 对服务加压 为了达到更好的观察效果,需要先对 Spring Boot 增加服务负载,本文选择使用 JMeter 这一使用广泛的 Java 压力测试工具来对服务加压。
通过 JMeter 对
host:8079
进行压测,添加 5 个线程持续进行加压。文章图片
文章图片
通过 SkyWalking Dashboard 可以看到,目前访问成功率为 100%,服务负载大约在 5300 CPM (Calls Per Minute)。
文章图片
Step 4 - Chaos Mesh 注入故障,观察效果 做好了这些准备工便可以使用 Chaos Dashboard 进行压力场景模拟,并在实验进程中观察服务性能的变化。
文章图片
以下使用不同 Stress Chaos 配置,观测对应服务性能变化:
- CPU 负载 10%,内存负载 128 MB 。
文章图片
- CPU load 增加到 50%,发现服务负载进一步降低至 4307 CPM。
文章图片
- 极端情况下 CPU 负载达到 100%,服务负载降至无混沌实验时的 40% 。
文章图片
因为 Linux 系统下的进程调度并不会让某个进程一直占据 CPU,所以即使是在 CPU 满载的极端情况下,该部署的 Spring Boot Demo 仍可以处理 40% 的访问请求。
小结 通过 SkyWalking 与 Chaos Mesh 的结合,我们可以清晰的观察到服务在何时受到混沌实验的影响,在注入混沌后服务的表现性能又将如何。SkyWalking 与 Chaos Mesh 的结合使得我们轻松地观察到了服务在各种极端情况下的表现,增强了我们对服务的信心。
Chaos Mesh 在 2021 年成长了许多。为了更多地了解用户在实践混沌工程方面的经验,以便持续完善和提升对用户的支持,社区发起了 Chaos Mesh 用户问卷调查,点击链接即可参与调查,谢谢!
https://www.surveymonkey.com/r/X78WQPC
欢迎大家加入 Chaos Mesh 社区,加入 CNCF Slack (slack.cncf.io) 底下的 Chaos Mesh 频道: project-chaos-mesh,一起参与到项目的讨论与开发中来!大家在使用过程发现 Bug 或缺失什么功能,也可以直接在 GitHub (https://github.com/chaos-mesh) 上提 Issue 或 PR。
推荐阅读
- ChaosCraft(和女朋友一起来 Hackathon 表演绝活丨滑滑蛋团队访谈)
- 新功能详解+试用征集(Pulsar|新功能详解+试用征集:Pulsar Function Mesh)
- Java|sitemesh&freemarker
- ble mesh-Proxy protocol详解(2)
- 技术分享 | 在GreatDB分布式部署模式中使用Chaos Mesh做混沌测试
- 智能钻完井|ANSYS MESHING网格种类及区别
- week14——实验(模拟题|week14——实验(模拟题 CHAOS LV15)
- Nginx|Nginx 代理gRPC—为 Skywalking 提供负载均衡
- 倍受关注的|倍受关注的 Cilium Service Mesh 到底怎么玩( - 上手实践)
- Service Mesh 在中国工商银行的探索与实践