知識庫 / Spring / Spring Boot RSS 訂閱

混沌猴介紹

DevOps,Spring Boot
HongKong
5
01:42 PM · Dec 06 ,2025

1. 引言

在本教程中,我們將討論用於 Spring Boot 的 混沌猴

該工具通過向我們的 REST 端點添加延遲、拋出錯誤或甚至終止應用程序,幫助我們將 混沌工程 的一些原則引入 Spring Boot 應用程序。

2. 安裝準備

為了將 Chaos Monkey 添加到我們的應用程序中,我們需要在項目中添加一個 Maven 依賴項

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>chaos-monkey-spring-boot</artifactId>
    <version>2.0.0</version>
</dependency>

3. 配置

一旦我們在項目中完成了依賴項設置,我們就需要配置並啓動混沌實驗。

我們可以通過以下幾種方式進行操作:

  • 在應用程序啓動時,使用 chaos-monkey Spring 配置文件(推薦)
  • 使用 chaos.monkey.enabled=true 屬性

通過使用 chaos-monkey Spring 配置文件,我們無需在應用程序運行時停止和啓動它,即可啓用或禁用它

java -jar your-app.jar --spring.profiles.active=chaos-monkey

另一個有用的屬性是 management.endpoint.chaosmonkey.enabled。 將此屬性設置為 true 將啓用管理端點,用於我們的 Chaos Monkey:

http://localhost:8080/chaosmonkey

通過此端點,我們可以查看我們的庫的狀態。以下是完整的 端點列表及其描述,這將幫助您修改配置、啓用或禁用 Chaos Monkey 以及其他更精細的控制。

利用所有可用的 屬性,我們可以對生成的混沌事件進行更精細的控制。

4. 工作原理

Chaos Monkey 由 Watcher 和 Assaults 組成。Watcher 是一個 Spring Boot 組件。它利用 Spring AOP,以監視在帶有以下 Spring 註解標記的類中執行的公共方法:

  1. Component
  2. Controller
  3. RestController
  4. Service
  5. Repository

根據我們的應用程序屬性文件中進行配置,我們的公共方法將由以下方法之一進行攻擊或不進行攻擊:

  1. 延遲攻擊 – 為請求添加隨機延遲
  2. 異常攻擊 – 拋出隨機 Runtime 異常
  3. AppKiller 攻擊 – 簡單來説,應用程序會崩潰

讓我們看看如何配置我們的 Watcher 和 Assaults 以實現更受控的攻擊。

5. 觀察者 (Watcher)

默認情況下,觀察者僅啓用於我們的 服務。這意味着我們的攻擊只會被執行到標記為 @Service 的類中的公共方法。

但是,我們可以通過配置屬性輕鬆更改它:

chaos.monkey.watcher.controller=false
chaos.monkey.watcher.restController=false
chaos.monkey.watcher.service=true
chaos.monkey.watcher.repository=false
chaos.monkey.watcher.component=false

請注意,一旦應用程序啓動後,就無法使用 Chaos Monkey 動態更改 Spring Boot 管理端口,正如我們之前討論的。

6. 攻擊

攻擊是指我們希望在應用程序中測試的場景。讓我們逐一分析每種攻擊類型,瞭解其作用以及如何配置它。

6.1. 延遲攻擊

這種攻擊方式會向我們的通話添加延遲。 通過這種方式,我們的應用程序響應速度變慢,並且我們可以監控它在例如數據庫響應變慢時表現的情況。

我們可以使用應用程序的屬性文件配置和啓用或禁用這種攻擊類型。

chaos.monkey.assaults.latencyActive=true
chaos.monkey.assaults.latencyRangeStart=3000
chaos.monkey.assaults.latencyRangeEnd=15000

通過混沌猴的管理端點,還可以配置和啓用/禁用這種類型的攻擊。

讓我們啓用延遲攻擊,並設置兩個到五個秒之間的延遲範圍:

curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
	"latencyRangeStart": 2000,
	"latencyRangeEnd": 5000,
	"latencyActive": true,
	"exceptionsActive": false,
	"killApplicationActive": false
}'

6.2. 異常攻擊 (Exception Assault)

本測試旨在評估我們的應用程序處理異常的能力。 根據配置,啓用後將隨機拋出一個 Runtime 異常。

我們可以使用類似於我們延遲攻擊的 curl 調用來啓用它:

curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
	"latencyActive": false,
	"exceptionsActive": true,
	"killApplicationActive": false
}'

6.3. 應用終止攻擊 (AppKiller Assault)

這個功能,我們的應用程序會在隨機時刻終止。我們可以通過簡單的 curl 調用,如同前兩種攻擊類型一樣,啓用或禁用它:

curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
	"latencyActive": false,
	"exceptionsActive": false,
	"killApplicationActive": true
}'

7. 結論

在本文中,我們討論了 Chaos Monkey 在 Spring Boot 中的應用。我們瞭解到它借鑑了 混沌工程 的一些原則,並使我們能夠將其應用於 Spring Boot 應用程序。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.