カオスモンキー入門
1. 前書き
このチュートリアルでは、Spring BootのChaos Monkeyについて説明します。
このツールは、RESTエンドポイントにレイテンシーを追加したり、エラーをスローしたり、アプリを強制終了したりすることで、introduce some of the principles of chaos engineering into our Spring Boot web applicationsを支援します。
2. セットアップ
Chaos Monkeyをアプリケーションに追加するには、プロジェクトに1つのMaven dependencyが必要です。
de.codecentric
chaos-monkey-spring-boot
2.0.0
3. 設定
プロジェクトで依存関係をセットアップしたら、カオスを構成して開始する必要があります。
これにはいくつかの方法があります。
-
アプリケーションの起動時に、chaos-monkey springプロファイルを使用する(推奨)
-
chaos.monkey.enabled=true propertyの使用
アプリの実行中にchaos-monkeyスプリングプロファイルwe don’t have to stop and start the application if we want to enable or disable itでアプリケーションを起動するには、次のようにします。
java -jar your-app.jar --spring.profiles.active=chaos-monkey
もう1つの便利なプロパティはmanagement.endpoint.chaosmonkey.enabled. です。このプロパティをtrueに設定すると、ChaosMonkeyの管理エンドポイントが有効になります。
http://localhost:8080/chaosmonkey
このエンドポイントから、ライブラリのステータスを確認できます。 構成の変更、Chaos Monkeyの有効化または無効化、その他のより詳細なコントロールに役立つ完全なlist of endpointsとその説明を次に示します。
利用可能なすべてのpropertiesを使用すると、生成されたカオスで何が発生するかをよりきめ細かく制御できます。
4. 仕組み
カオスモンキーはウォッチャーとアサルトで構成されています。 ウォッチャーは、Spring Bootコンポーネントです。 Spring AOPを使用して、次のSpringアノテーションが付けられたクラスでパブリックメソッドが実行されるタイミングを確認します。
-
成分
-
コントローラ
-
RestController
-
サービス
-
リポジトリ
アプリのプロパティファイルour public methods will be either assaulted or notの構成に基づいて、次のいずれかを実行します。
-
レイテンシアサルト-リクエストにランダムレイテンシを追加します
-
例外アサルト-ランダムなランタイム例外をスローします
-
AppKiller Assault –ええと、アプリは死にます
より制御された攻撃のためにウォッチャーと攻撃を構成する方法を見てみましょう。
5. ウォッチャー
デフォルトでは、Watcherはservicesに対してのみ有効になっています。 これは、@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
アプリケーションが起動したら、前に説明したwe cannot dynamically change the watcher using the Chaos Monkey for Spring Boot management portであることに注意してください。
6. 暴行
アサルトは基本的に、アプリケーションでテストするシナリオです。 それぞれのタイプの攻撃を取り上げて、それが何をするのか、そしてどのように構成できるのかを見てみましょう。
6.1. レイテンシアサルト
このタイプの攻撃は、呼び出しに遅延を追加します。 This way our application responds slower and we can monitor how it behaves when for example the database responds slower.
アプリのプロパティファイルを使用して、このタイプの攻撃を設定およびオンにできます。
chaos.monkey.assaults.latencyActive=true
chaos.monkey.assaults.latencyRangeStart=3000
chaos.monkey.assaults.latencyRangeEnd=15000
このタイプの攻撃を設定およびオン/オフする別の方法は、Chaos Monkeyの管理エンドポイントを使用することです。
レイテンシー攻撃をオンにして、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. 例外アサルト
これは、アプリケーションが例外をどの程度処理できるかをテストします。 Based on configuration it will throw a random Runtime Exceptionが有効になると。
レイテンシーアサルトと同様の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. 結論
この記事では、we talked about Chaos Monkey for Spring Boot。 chaos engineeringの原則のいくつかが必要であり、それらをSpring Bootアプリケーションに適用できることを確認しました。
いつものように、例の完全なコードはover on Githubにあります。