1. 序章

このチュートリアルでは、Spring Bootの ChaosMonkeyについて説明します。

このツールは、RESTエンドポイントにレイテンシーを追加したり、エラーをスローしたり、アプリを強制終了したりすることで、カオスエンジニアリングの原則の一部をSpringBootWebアプリケーションに導入するのに役立ちます。

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 profile でアプリケーションを起動することにより、アプリの実行中にアプリケーションを有効または無効にする場合、アプリケーションを停止して起動する必要はありません。

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

もう1つの便利なプロパティは management.endpoint.chaosmonkey.enabled。 このプロパティをtrueに設定すると、ChaosMonkeyの管理エンドポイントが有効になります。

http://localhost:8080/chaosmonkey

このエンドポイントから、ライブラリのステータスを確認できます。 これは、エンドポイントの完全なリストと、構成の変更、Chaos Monkey、およびその他のより詳細なコントロールの有効化または無効化に役立つ説明です。

利用可能なすべてのプロパティを使用すると、生成されたカオスで何が発生するかをよりきめ細かく制御できます。

4. それはどのように機能しますか

カオスモンキーはウォッチャーとアサルトで構成されています。 ウォッチャーはSpringBootコンポーネントです。 Spring AOP を利用して、次のSpringアノテーションが付けられたクラスでパブリックメソッドが実行されるタイミングを確認します。

  • 成分
  • コントローラ
  • RestController
  • サービス
  • リポジトリ

アプリのプロパティファイルの構成に基づいて、パブリックメソッドは、次のいずれかによって攻撃されるかどうかになります。

  • レイテンシーアサルト–リクエストにランダムなレイテンシーを追加します
  • 例外アサルト–ランダムなランタイム例外をスローします
  • AppKiller Assault –ええと、アプリは死にます

より制御された攻撃のためにウォッチャーと攻撃を構成する方法を見てみましょう。

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 forSpringBoot管理ポートを使用してウォッチャーを動的に変更できないことに注意してください。

6. 暴行

アサルトは基本的に、アプリケーションでテストしたいシナリオです。 それぞれのタイプの攻撃を取り上げて、それが何をするのか、そしてどのように構成できるのかを見てみましょう。

6.1. レイテンシーアサルト

このタイプの攻撃は、呼び出しに遅延を追加します。 このようにすると、アプリケーションの応答が遅くなり、たとえばデータベースの応答が遅くなった場合の動作を監視できます。

アプリのプロパティファイルを使用して、このタイプの攻撃を構成してオンにすることができます。

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

このタイプの攻撃を構成してオンとオフを切り替える別の方法は、ChaosMonkeyの管理エンドポイントを使用することです。

レイテンシー攻撃をオンにして、2〜5秒のレイテンシーの範囲を追加しましょう。

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. 例外暴行

これは、アプリケーションが例外をどれだけうまく処理できるかをテストします。 構成に基づいて、有効になるとランダムなランタイム例外がスローされます。

レイテンシーアサルトと同様のcurl呼び出しを使用して有効にできます。

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

6.3. AppKillerアサルト

これは、まあ、私たちのアプリはランダムな時点で死ぬでしょう。 前の2種類の攻撃のように、単純なcurl呼び出しで有効または無効にできます。

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

7. 結論

この記事では、スプリングブーツ用カオスモンキーについて説明しました。 カオスエンジニアリングの原理のいくつかを採用し、それらをSpring Bootアプリケーションに適用できることを確認しました。

いつものように、例の完全なコードはGithubにあります。