カオスモンキーの紹介

1.はじめに

このチュートリアルでは、Spring Bootのhttps://codecentric.github.io/chaos-monkey-spring-boot/[Chaos Monkey]について説明します。

このツールは、https://principlesofchaos.org/[chaos engineering]の原則のいくつかをSpring Boot Webアプリケーションに導入するのに役立ちます。** RESTエンドポイントに待ち時間を追加したり、エラーをスローしたり、さらにはアプリケーションを強制終了したりします。

2.セットアップ

Chaos Monkeyを私たちのアプリケーションに追加するには、単一のhttps://search.maven.org/classic/#search%7Cgav%7C1%7Ca%3A%22chaos-monkey-spring-boot%22[Maven dependency]が必要です。プロジェクト:

<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の使用 __property

chaos-monkey spring profileでアプリケーションを起動することで、アプリケーションの実行中に有効または無効にしたい場合は、アプリケーションを停止して起動する必要はありません。

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

別の便利なプロパティは____management.endpoint.chaosmonkey.enabledです。このプロパティをtrueに設定すると、Chaos Monkeyの管理エンドポイントが有効になります。

http://localhost:8080/chaosmonkey

このエンドポイントから、私たちは私たちの図書館の地位を見ることができます。これは完全なhttps://codecentric.github.io/chaos-monkey-spring-boot/2.​​0.0/# http endpoint[エンドポイントのリスト]と、設定の変更、Chaos Monkeyの有効化または無効化などに役立つ説明ですきめ細かいコントロール。

利用可能なすべてのhttps://codecentric.github.io/chaos-monkey-spring-boot/2.​​0.0/#__properties[properties]を使用して、生成されたカオスで起こることをよりきめ細かく制御できます。

4.どうやって動くの?

Chaos MonkeyはWatcherとAssaultsで構成されています。ウォッチャーはSpring Bootのコンポーネントです。 Spring AOP を使用して、パブリックメソッドがいつ注釈付きクラスで実行されるかを確認します。以下のSpringアノテーション:

  • コンポーネント

  • コントローラー

  • RestController

  • サービス

  • リポジトリ

アプリのプロパティファイルの設定に基づいて、次のいずれかの方法で、パブリックメソッドが攻撃されるかどうかが判断されます。

  • Latency Assault - リクエストにランダムな待ち時間を追加します。

  • 例外アサルト - ランダムなランタイム例外をスローします

  • AppKiller Assault - えーと、アプリは死ぬ

ウォッチャーとアサルトをより制御されたアサルトに設定する方法を見てみましょう。

5.ウォッチャー

デフォルトでは、Watcherは サービス に対してのみ有効になっています。これは、私たちの攻撃は @Service. のアノテーションが付けられた私たちのクラスのpublicメソッドに対してのみ実行されることを意味します

しかし、プロパティを設定することで簡単に変更できます。

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 for Spring Boot管理ポートを使用してウォッチャーを動的に変更することはできません。

6.攻撃

攻撃は基本的にはアプリケーションでテストしたいシナリオです。それぞれの種類の攻撃を取り、それが何をするのか、そしてどのように設定できるのかを見てみましょう。

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

この種の攻撃は私達の呼び出しに待ち時間を追加します。これにより、アプリケーションの応答が遅くなり、データベースの応答が遅い場合などにアプリケーションの動作を監視できます。

アプリのプロパティファイルを使用して、この種の攻撃を設定したり有効にしたりできます。

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

この種の攻撃を設定してオンオフするもう1つの方法は、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. 例外アサルト

これは私たちのアプリケーションが例外をどの程度うまく処理できるかをテストします。 ** 設定に基づいて、有効にするとランダムなRuntime Exceptionが発生します。

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

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

6.3. AppKiller Assault

これは、まあ、私たちのアプリはいくつかのランダムな時点で死ぬでしょう。前の2つのタイプの攻撃のような単純なカール呼び出しでそれを有効または無効にすることができます。

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

7.まとめ

この記事では、Chaos Monkey for Spring Bootについて話しました。私たちはこれがhttps://principlesofchaos.org/[chaos engineering]の原則のいくつかを取り、https://spring.io/projects/spring-boot[Spring Boot]アプリケーションにそれらを適用することを可能にすることを見ました。 。

いつものように、例の完全なコードはhttps://github.com/eugenp/tutorials/tree/master/spring-boot[over on Github]にあります。