カオスエンジニアリングとは?障害実験の範囲と停止条件

カオスエンジニアリングは、システムに制御された障害などを与え、想定したサービスの振る舞いが維持されるかを実験で確かめる取り組みです。「一部が故障しても処理を続けられる」という設計上の仮説を、観測できる結果に照らして検証します。

企業が初めて取り組む際は、対象を限定した検証環境で、仮説・影響範囲・停止条件・復旧方法を先に決めるところから始めましょう。本記事では、実施責任者と検証担当者が合意する項目を整理します。

カオスエンジニアリングで確かめること

基本となるのは、正常時の状態を測定可能な指標で定義し、障害を与えてもその状態が維持されるかを確かめる流れです。Principles of Chaos Engineeringでは、定常状態の定義、仮説の設定、現実の事象の導入、仮説の反証という手順を示しています。指標には、処理量・エラー率・応答時間などを使います。出典:Principles of Chaos Engineering

例えば「アプリケーションの一部が停止しても、利用者のリクエストは別の処理先へ渡る」という仮説なら、サーバーが停止した事実だけでは判断できません。リクエストの成功率や応答時間を、障害の前後で比較する必要があります。

負荷試験・復元テストとの使い分け

計画を立てる際は、次のように「今回答えたい問い」で整理すると、成果物を決めやすくなります。この分類は本記事での実務上の整理であり、試験同士の範囲は重なります。

試験の観点 今回答えたい問いの例 残す結果の例
負荷試験 リクエストが増えたとき、どこまで処理できるか 負荷量と応答時間・エラー率の関係
復元テスト バックアップから必要なデータを戻せるか 復元後の整合性、所要時間
カオスエンジニアリング 一部が故障しても、想定したサービス状態を保てるか 仮説、与えた障害、利用者側の指標、復旧結果

最初の実験では、検証したい仮説を一つに絞りましょう。負荷量と障害の種類を同時に変えるより、条件を固定して一つずつ確かめる計画から始めます。

最初の実験は検証環境で範囲を区切る

Google Cloudは、小さく非本番環境で始め、学習・調整しながら本番へ範囲を広げる進め方を示しています。出典:Google Cloud

着手前には、対象のリソース名だけでなく、接続先も確認してください。検証環境という名前であっても、外部APIや共有データベースが実業務につながっていないかを点検します。

  • 対象:環境、サービス、リソースID、台数を明記する。
  • 除外:本番、共有基盤、外部サービスなど、影響を与えない対象を列挙する。
  • データ:検証用データを使い、実際の注文・通知・課金が発生する経路を外す。
  • 時間:開始時刻、障害を与える上限時間、復旧確認の終了予定を分ける。
  • 権限:対象への操作権限と、実験を停止する権限を確認する。

環境やトラフィックの違いでシステムの挙動は変わります。検証環境での結果をそのまま本番全体の保証とせず、構成・データ量・依存先などの差分を結果に添えてください。出典:実験環境に関する原則

仮説は「障害・期待する状態・観測方法」で書く

以下は計画を具体化するための記入例です。数値は実測値や推奨基準ではありません。自社の平常値と許容範囲に置き換えてください。後続の確認表と担当分担も、本記事の編集上の提案です。

検証環境のアプリケーション2台のうち1台を最大60秒停止しても、固定した検証リクエストに対する成功率が99%以上、応答時間の95パーセンタイルが1秒以下に収まる。

ここでは、対象API、リクエスト数、成功の定義、計測間隔も併記します。実験前の通常運転で条件を満たすことを確認し、実験中と復旧後にも同じ方法で測ります。

仮説を満たさないときは、時刻をそろえた記録から、切り替えの遅れ、処理の失敗、依存先の応答などを調べます。障害を与えられたことと、仮説を検証できたことを分けて記録するのが要点です。

停止条件と復旧完了の条件は別に決める

実験を止める操作と、サービスを元の状態に戻す作業を同一視しないことが重要です。

AWS Fault Injection Service(AWS FIS)では、CloudWatchアラームを停止条件として設定し、その条件が発火すると実験を停止します。停止した実験は再開できません。出典:AWS FISの停止条件

ただし、すべての障害操作が取り消せるわけではありません。AWSの資料では、操作後に状態を戻すpost actionに対応しない操作もあり、terminateしたEC2インスタンス自体は回復できないと説明しています。また、停止操作時に未完了のpost actionがある場合は、その完了後に実験が停止します。出典:AWS FISのアクション、実験の停止

実施計画には、少なくとも次の三つを別欄で残しましょう。

判断 記入する内容
自動停止 監視指標、閾値、評価期間、欠測時の扱い、停止対象
手動停止 想定外の対象への影響、監視不能、担当者との連絡断などの条件と停止担当者
復旧完了 障害設定の解除、必要な再起動・再作成、利用者側の指標とデータ整合性の確認

仮説が成立したかを判定する基準と、影響を制限する停止基準も区別します。両者を同じ値にする場合でも、監視の評価期間を含めて記載してください。監視間隔や停止処理の所要時間を踏まえ、許容できる影響範囲に収まる設計かを事前に確認します。

通知先と初動の整理には、監視アラートの設計も参照できます。

実施前に埋める障害実験の計画表

次の表を、実施責任者・操作担当・監視担当で確認します。停止操作や復旧方法に未確認の欄が残る場合は、実験開始を見送り、その確認を先に行う運用にしましょう。

項目 記入欄
業務上の問い 継続させたい利用者の操作:__
仮説 __が故障しても、__を維持する
正常時の状態 指標・平常値・測定条件:__
対象と除外 環境・リソースID・最大台数・除外対象:__
与える障害 操作・強度・上限時間・解除方法:__
成立の判定 指標・閾値・評価期間:__
自動停止 アラーム・動作確認結果:__
手動停止 条件・操作方法・担当者・代行者:__
復旧 戻す手順・必要権限・完了条件:__
記録 開始/停止時刻・対象・ログ・指標の保存先:__
実施判断 責任者・実施時間帯・中止時の連絡先:__

ツールの選定は、この表を埋めてから進められます。対象の障害を再現できるかに加え、対象の絞り込み、停止条件、操作履歴、復旧方法を確認してください。

結果は改善と再検証につなげる

実験後は「今回の条件で仮説が成立した」「成立しなかった」「観測不足で判定できなかった」を分けます。指標を取得できなかった場合に、問題が見えなかったことを成功扱いしないようにします。

想定外の挙動があれば、観測した事実と原因の仮説を分け、改善担当者と再検証条件を記録しましょう。整理の手順は、障害の振り返り方も参考になります。

検証を外部へ委託する場合、自社は業務上の許容範囲と実施判断を持ち、委託先とは実験設計・操作・監視・復旧の担当を合意します。成果物には、実験計画だけでなく、対象と実施時刻、観測結果、復旧確認、未検証の条件を含めてください。

最初に決めるべきことは、「何を壊すか」だけではありません。何を維持したいのか、どこで止めるのか、どう戻ったと判断するのかまで決まれば、障害耐性を確かめる実験として実施可否を判断できます。

記事一覧へ戻る

ITの困りごとを、
まずはご相談ください。

何から手をつけるか決まっていない段階でも構いません。ご相談内容に応じて、担当者からご連絡します。

まずは相談する

採用へのご応募は採用エントリーからお願いします。