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 對localhost: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 用戶問卷調查,掃描下方二維碼即可參與調查,謝謝!
歡迎大家加入 Chaos Mesh 社區,加入 CNCF Slack (slack.cncf.io) 底下的 Chaos Mesh 頻道: project-chaos-mesh,一起參與到項目的討論與開發中來!大家在使用過程發現 Bug 或缺失什麼功能,也可以直接在 GitHub (https://github.com/chaos-mesh) 上提 Issue 或 PR。