title: Chaos Mesh X SkyWalking: 可觀測的混沌工程
author:王寧暄
date: 2021-11-29
summary: 本篇文章將分享如何通過將 SkyWalking 和 Chaos Mesh 結合,運用 Event 資訊監控,實時瞭解混沌實驗對應用服務效能造成的影響。
tags: ['Chaos Mesh']
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 這個倉庫進行配置
Step 1 - 訪問 SkyWalking 叢集
安裝 SkyWalking 後,就可以訪問它的 UI 了,但因為還沒有服務進行監控,這裡還需要新增服務並進行 Agent 埋點設定。本文選用輕量級微服務框架 Spring Boot 作為埋點物件搭建一個簡易 Demo 環境。
可以參考 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 。
混沌實驗開始和結束的時間點標記可以通過右側開關顯示在在圖表中,將滑鼠移至短線處可以看到是實驗的 Applied 或 Recovered。可以看到兩個綠色短線之間的時間段裡,服務處理呼叫的的效能降低,為 4929 CPM,在實驗結束後,效能恢復正常。
- 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。