目錄
- 一、什么是混沌測驗
- 二、環境搭建
- 三、測驗指導檔案
- 四、常用命令介紹
- 五、注意事項
一、什么是混沌測驗
類似于“故障演練”,通過構造各類例外,驗證系統在碰到這些例外時是否有做好對應的監控告警、預案處理,針對性地進行加固,防范,從而避免故障發生時所帶來的嚴重后果,通過對各類例外提前做好監控告警和預案處理,增強系統的健壯性,增強分布式系統的信心,
ChaosBlade 是阿里巴巴開源的一款遵循混沌工程原理和混沌實驗模型的實驗注入工具,幫助企業提升分布式系統的容錯能力,
代碼git地址:https://github.com/chaosblade-io/chaosblade
二、環境搭建
- 登錄容器或linux服務器終端,下載chaosblade安裝包,
命令:wget https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/0.6.0/chaosblade-0.6.0-linux-amd64.tar.gz

- 解壓安裝包,輸入命令: tar zxvf chaosblade-0.6.0-linux-amd64.tar.gz

進入解壓后的檔案夾,即可直接使用工具:

三、測驗指導檔案
官方檔案介紹:https://chaosblade-io.gitbook.io/chaosblade-help-zh-cn/
官方說明和示例壓縮包,有需要可以下載使用:chaosblade-help-doc-master.zip
四、常用命令介紹
-
掛載 java agent,執行 java 實驗場景必要步驟
ps -ef | grep java(或者你應用的名稱) 查找到需要測驗的應用的pid:

./blade prepare jvm --pid 1
使用上面命令掛載agent,掛載成功會回傳200,此時最好記錄下result內的UID,取消掛載時會用到這個UID:

取消掛載使用revoke,使用掛載時回傳的UID:
./blade revoke 41814dc1ee3df6a1

-
構造各類常用例外命令
代碼中找到需要進行的方法,假設為:com.xxxx.xxxx.web.xxxxController#method1,則下面命令中classname $1的值:com.xxxx.xxxx.web.xxxxController,methodname $2值:method1
| 操作項 | 命令內容 |
|---|---|
| JVM超時(controller層http方法超時) | ./blade create jvm delay --time 2000 --classname=$1 --methodname=$2 --pid 1 |
| JVM例外(controller層http方法例外) | ./blade create jvm throwCustomException --classname=$1–methodname=$2 --exception java.lang.Exception --pid 1 |
| dubbo類超時 | ./blade create dubbo delay --time $1 --service $2 --methodname $3 --consumer --pid 1 |
| dubbo類例外 | ./blade create dubbo throwCustomException --exception java.lang.Exception --service $1 --methodname $2 --consumer --pid 1 |
| redis超時 | ./blade c jedis delay --time $1 |
| redis例外 | ./blade c jedis throwCustomException --exception java.lang.Exception --exception-message “chaosblade mock Error” |
| redis執行緒池打滿 | ./blade c jvm throwCustomException --exception java.lang.Exception --classname org.apache.commons.pool2.impl.GenericObjectPool --methodname borrowObject --pid 1 |
| Mybatis超時 | ./blade c jvm delay --time $1 --classname org.apache.ibatis.binding.MapperMethod --methodname execute --pid 1 |
| Mybatis例外 | ./blade c jvm throwCustomException --exception java.lang.Exception --classname org.apache.ibatis.binding.MapperMethod --methodname execute --pid 1 |
| CPU打滿 | ./blade create cpu load |
| 記憶體打滿 | ./blade c mem load --mode ram --mem-percent 100 |
| 磁盤空間打滿 | ./blade c disk fill --percent 100 |
| 磁盤讀寫IO打滿 | ./blade create disk burn --read --write |
| JVM堆記憶體OOM | ./blade c jvm oom --area HEAP |
- 銷毀例外
例外構造成功會回傳200,同時會有UID,取消例外時會使用到這個UID:

銷毀例外使用destory,使用創建例外時回傳的UID:
./blade destroy 959d6b44f346f61c

- 查詢例外狀態
查詢還未取消掛載的UID ./blade status --type prepare
查詢還未銷毀的UID ./blade status --type create
running狀態的即為還未取消或銷毀的UID

五、注意事項
- 創建例外后,可以通過業務現象、日志等方式去驗證例外發生后,系統的表現是否符合預期,系統是否有正常觸發告警,是否有針對該介面例外做好預案,預案是否生效等,測驗完成后,記得銷毀例外,避免影響正常業務測驗,
- 舉例:假設A系統會調B系統dubbo介面,為了驗證當B系統dubbo介面超時或掛掉時,A系統是否有正常觸發告警,是否有預案處理,則需要在A系統應用容器中,分別構造B系統dubbo介面方法的介面超時、介面例外兩類例外,然后做驗證,并且此時只是構造的只是呼叫方:A調B介面的例外,被呼叫方:B介面本身并不會例外,所以即使其他系統也有呼叫B的這個dubbo介面,其他系統業務不會因為A系統在做例外測驗而受到影響,依然正常作業,
- 各類硬體例外測驗,目的在于測驗各種硬體例外情況下,驗證服務穩定性、監控告警、流量調度、彈性伸縮等能力,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/356789.html
標籤:其他
