> [!abstract] 概要(abstract 日本語訳) > 多くのクラウドアプリケーションは、多数の小さなサブコンポーネント(マイクロサービスと呼ばれる)を用い、これらが複雑なグラフ状に相互作用することで全体的な機能をユーザーに提供している。マイクロサービスアーキテクチャのモジュール性は迅速なソフトウェア開発に有益だが、障害発生時にそのようなシステムを迅速に保守・デバッグすることは困難である。我々は、複雑なマイクロサービスアーキテクチャにおける障害の根本原因を迅速に検出するためのスケーラブルなアルゴリズムを提案する。我々の新しい階層的かつ局所的な学習アプローチの核心にある考え方は: (1) 障害を根本原因への介入として扱い迅速に検出すること、(2) 根本原因に関連する因果グラフの部分のみを学習し、多くの高コストな条件付き独立性検定を回避すること、(3) グラフを階層的に探索すること、の三点である。提案手法は高いスケーラビリティを持ち根本原因に関する有用な洞察を与えるが、従来手法は高い計算時間のために実用不可となる。本解は特定のアプリケーションに依存せず、診断のために収集されたデータのみに依拠する。評価では、PC アルゴリズムの改変版および根本原因分析の最先端手法と比較する。結果として、実行時間を大幅に削減しながら top-k 再現率で著しい改善を示す。 ## 論文情報 - **タイトル**: Root Cause Analysis of Failures in Microservices through Causal Discovery - **著者**: Azam Ikram・Saurabh Bagchi・Murat Kocaoglu([[Purdue University]]); Sarthak Chakraborty・Subrata Mitra・Shiv Kumar Saini([[Adobe Research]]) - **媒体**: NeurIPS 2022 (Advances in Neural Information Processing Systems 35)、Main Conference Track - **発表日**: 2022-12-06、pp. 31158–31170 - **PDF**: `.raw/papers/c9fcd02e6445c7dfbad6986abee53d0d-Paper-Conference.pdf` - **公式 URL**: https://proceedings.neurips.cc/paper_files/paper/2022/hash/c9fcd02e6445c7dfbad6986abee53d0d-Abstract-Conference.html - **コード**: https://github.com/azamikram/rcd ## 概要 マイクロサービスシステムの根本原因分析(RCA)に対し、障害を根本原因ノードへの **soft intervention** としてモデル化する視点に立ち、階層分割統治と因果グラフの局所学習を組み合わせた **RCD(Root Cause Discovery)** アルゴリズムを提案する。完全因果グラフを構築する必要がなく、500ノードのスケールでも22秒以内で動作する。合成データおよび[[Sock Shop]]テストベッド、AWS 本番クラウドの3障害ケースで検証した。 ## 問題設定 - **入力**: 正常時メトリクス時系列 $D = \{M(1,1), \ldots, M(n, t-1)\}$ と障害時メトリクス時系列 $D^* = \{M(1,t), \ldots, M(n,T)\}$。$n$ サービス、各サービス $m$ 以上のメトリクス。 - **出力**: 上位 $k$ 件の根本原因メトリクス(サービス)のリスト。 - **前提**: 変数は離散値(連続値は離散化可能)。交絡変数(latent confounder)は存在しない仮定。 - **課題**: 大規模システム(数百〜数千ノード)では PC アルゴリズムをはじめとする従来手法が計算時間の爆発により実用不可。また、多くの手法が観測データのみを使用し、介入データが持つ情報を活用していない。さらに特定の線形性・正規性等のパラメトリック仮定や、呼び出しグラフ等のドメイン知識を要求する手法は現実適用に制約がある。 ## 提案手法 ### 核心アイデア: 障害を介入としてモデル化 障害が発生した時刻 $t$ において、障害サービス $X$ の生成メカニズムが変化する現象を **soft intervention** として定式化する。これにより正常時データを観測データセット、障害時データを介入データセットとして捉え、因果発見の文献で発展した「介入ターゲット同定」問題に帰着できる。 **F-NODE** と呼ぶ二値変数ノード($F=0$: 正常、$F=1$: 障害)を追加導入し、$X \perp\!\!\!\perp F | Pa_X$ の条件付き独立性検定で分布不変性を確認する。このアプローチにより根本原因でないノードを除外し、F-NODE の近傍ノードが根本原因候補となる。 ### Ψ-PC [[Ψ-FCI]](Jaber et al., NeurIPS 2020) の latent confounder なし版として設計した **Ψ-PC** を構成要素として利用する。PC アルゴリズムの各ステップで F-NODE を含む条件付き独立性検定のみを実行し、グラフ全体の骨格推定を省略する。 ### RCD: 階層的・局所的学習 Algorithm 1 に示す**分割統治型の階層的アルゴリズム**: 1. 全変数をサイズ $\gamma$ のランダムサブセットに分割(デフォルト $\gamma=5$)。 2. 各サブセット上で Ψ-PC を実行し、F-NODE の近傍 = 根本原因候補を抽出。 3. 全サブセットの根本原因候補の和集合を新たな変数セットとして次ステップに進む。 4. 候補セットのサイズが $k$ 以下になるまで繰り返す。 **局所学習の最適化**: Ψ-PC の実行においてグラフの残余部分を完全グラフのまま残し、F-NODE が一方に含まれる条件付き独立性検定のみを実行することで、条件付き独立性検定の回数を大幅に削減する。 **定理 1**: 完全な条件付き独立性オラクル・因果充足性(causal sufficiency)・拡張 faithfulness 仮定のもとで、RCD は真の根本原因変数を返す(健全性)。 ## 新規性 | 課題(既存手法) | 本手法の解決 | |---|---| | PC・Ψ-PC は 100 ノード超で実行不可 | 階層分割統治でノード数に対して準線形の計算量 | | ε-Diagnosis(COV)は条件付け不足による偽陽性が多い | F-NODE を使った条件付き独立性検定で変数間の条件付け | | CIRCA はドメイン知識(コールグラフ)・パラメトリック仮定が必要 | 呼び出しグラフ不要、パラメトリック仮定なし、観測/介入データを統合 | | AutoMAP はパスト障害履歴に依存し初期精度が低い | 履歴不要、各障害発生時のデータのみで動作 | | 従来手法は観測データのみ使用 | 正常/障害の 2 データセットにまたがる分布不変性(distributional invariance)を活用 | ## 実験設定 - **実装**: Python(causal-learn パッケージ、pyAgrum); χ二乗検定で独立性検定; $\gamma=5$; 100 回試行の平均。 - **合成データ**: pyAgrum でランダム DAG を生成; 各ノード最大入次数 3; 状態数 6; 正常・障害各 10K サンプル; ノード数を 10〜2,500 で変化。 - **Sock Shop テストベッド**: 13 マイクロサービスを個別 VM/コンテナにデプロイ; Locust で正弦分布ユーザー数負荷; stress-ng を Docker イメージに組み込み CPU hog・メモリリーク注入; carts/catalogue/orders/payment/user の 5 サービスを対象; 各失敗タイプで 5 回繰り返し = 50 データセット; アルゴリズムは各データセットで 100 回実行。 - **AWS 本番データ**: 25 マイクロサービス; Grafana 収集 150 メトリクス(スループット・メモリ・レイテンシ・I/O・システム負荷 = ゴールデンシグナル網羅); 過去 6 か月中の 3 障害ケース(Outage A/B/C); 正常データは障害前 2 日間、異常データは障害継続期間。 - **ベースライン**: ε-Diagnosis、AutoMAP、CIRCA、Ψ-PC。 - **評価指標**: top-k 再現率(k=1/3/5)、実行時間(秒)。 ## 実験結果 ### 合成データ(Figure 2) - **top-1 再現率**: RCD は 98% を達成、全ノード数で高水準を維持(Figure 2a)。ε-Diagnosis はノード数増加で急落; AutoMAP は 10 ノードでも top-5 が 50% 程度; CIRCA はパラメトリック仮定が満たされないため不振。 - **実行時間**: 500 ノードで RCD は 22 秒以内(Figure 2b); Ψ-PC は 500 ノードで 150 分超(実用不可、100 ノードで打ち切り); AutoMAP は PC を内部使用のため大幅遅延; ε-Diagnosis は COV で処理が $O(n^2)$ のため最速だが精度が低い。 ### Sock Shop テストベッド(Table 1) - RCD は全般的にベースラインを上回る。代表例: CPU hog での Carts top-3 再現率: Ψ-PC=0.6、AMAP=0.23、ε-Diag.=0.4、**RCD=0.86**; User top-3: Ψ-PC=0.0、AMAP=0.53、ε-Diag.=0.2、**RCD=0.66**。 - Ψ-PC は正常時サンプル数が少ない(5 分間のみ)ため大半のサービスで低精度。ε-Diagnosis はノード数が少ない Sock Shop では RCD に肉薄するケースもある(Payment: ε-Diag.=0.8 > RCD=0.40 at top-3)。 ### AWS 本番障害(Table 2) - Ψ-PC は 1 時間以内に完了せず除外; AutoMAP はメトリクスセット非統一で除外; CIRCA はコールグラフとメトリクス分類が未提供のため除外。 - **Outage A**(計画メンテ中のオートスケーリング失敗): RCD はデータベース各層のメモリフットプリントを上位 2 位の根本原因として同定、関連メトリクスを top-7 内に捕捉。 - **Outage B**(特定リージョンのイベントキューの詰まり): RCD はイベントキューのヒープサイズとシステム負荷を上位 3 位内に検出。ただし top-1(Memcached の hit ratio)は検出できず — 潜在変数(latent variable)の存在を示唆。 - **Outage C**(外部 AWS コンポーネントの障害): 計測対象外のコンポーネントが真の根本原因だが、RCD は直接影響を受けたサービス M のディスク容量・エラー率・ヒープサイズを根本原因として同定。SRE が問題を絞り込む上で有用な情報を提供。 ## 考察 - **階層+局所化の相乗効果**: RCD が Ψ-PC と同等の再現率を保ちつつ実行時間を劇的に削減できるのは、(1) 分割統治によるサブセット小規模化と (2) F-NODE 近傍のみの局所学習の組み合わせによる。完全因果グラフ不要という設計は本番環境における実用性の鍵。 - **潜在変数の限界**: Outage B では Memcached と障害サービスを結ぶ観測不可能な潜在変数の存在で top-1 が外れた。現在の Ψ-PC(交絡なし仮定)ではこれを扱えず、Ψ-FCI への拡張が将来課題。 - **計測境界外の障害(Outage C)**: 計測スコープ外の根本原因に対しては「最近傍の影響ノード」を返す。SRE 業務での絞り込みには依然有用だが、根本原因の完全な同定ではない。 - **比較評価の限界**: 本番データで比較できたのは ε-Diagnosis のみ(ドメイン知識・同一メトリクスセット・コールグラフ不要の条件を満たすのが RCD と ε-Diagnosis だけ)。公平な比較のため CIRCA のコールグラフ構築時間を除外している。 ## 強み - ドメイン知識(コールグラフ)・パラメトリック仮定・過去障害履歴が不要で汎用性が高い。 - 介入データ(障害時データ)を活用した分布不変性の利用は既存手法にない新機軸。 - 500 ノードで 22 秒という実行時間は本番システムの迅速な根本原因特定に実用的。 - 健全性(Theorem 1)が理論的に保証されている。 ## 弱点・課題 - 交絡変数(latent confounder)が存在すると Ψ-PC の仮定が崩れ性能が低下する(Outage B での失敗例)。Ψ-FCI への拡張は未実装。 - ε-Diagnosis がサービス数の少ない環境(Sock Shop 一部)では互角以上になるケースがある。スモールスケール環境での優位性は限定的。 - 本番評価(AWS 実データ)はケース数が 3 件のみで、統計的有意性に限界がある。 - 完全因果グラフを学習しないため「なぜその根本原因か」のパス説明(explainability)が薄い。下流タスクで因果構造全体が必要な場合は Ψ-PC が依然必要。 - $\gamma$ のチューニングが実験では 5 に固定されており、最適値の体系的探索は付録のみで簡単に扱われている。