# Identifying Bad Software Changes via Multimodal Anomaly Detection for Online Service Systems
## 論文情報
- **著者**: Nengwen Zhao, Junjie Chen, Zhaoyang Yu, Honglin Wang, Jiesong Li, Bin Qiu, Hongyu Xu, Wenchi Zhang, Kaixin Sui, [[Dan Pei]]
- **掲載誌**: ESEC/FSE '21 (29th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering), Athens, Greece, 2021-08-23
- **DOI**: https://doi.org/10.1145/3468264.3468543
- **所属**: [[Tsinghua University]] / BNRist, Tianjin University, [[BizSeer]], [[China Guangfa Bank]]
- **GitHub**: https://github.com/FSEwork/SCWarn
## アブストラクト(日本語訳)
大規模オンラインサービスシステムにおいて、ソフトウェア変更は不可避かつ頻繁に行われる。新たなコードや設定を投入することで変更がインシデントを誘発しユーザ体験を損なう場合がある。そのため、エンジニアが不正変更(bad software changes)を特定してインシデントの影響を抑え、システム信頼性を向上させることが不可欠である。
本論文では、不正変更の理解を深めるべく、大規模商業銀行の実世界データに基づく初の実証研究を実施した。定量分析の結果、インシデントの約 50.4% が変更に起因し、主な原因はコード欠陥・設定エラー・リソース競合・ソフトウェアバージョンであることが判明した。定性分析では、異種多ソースデータを扱う現行の変更検知手法が十分でないことも示された。
これらの知見をもとに、不正変更を正確かつ迅速に特定し解釈可能なアラートを生成する新手法 **SCWarn** を提案する。核心的アイデアは、マルチモーダル学習によって異種多ソースデータから異常を検知することである。2 データセット・10 種の不正変更パターンによる評価で、SCWarn は平均 F1 スコア 0.95 を達成し既存手法をすべて上回り、MTTD を 20.4〜60.7% 削減した。
## 概要
大規模オンラインサービス系(金融機関・EC・検索エンジン等)はソフトウェア変更を日常的に行うが、テスト環境と本番環境の乖離(クラスタ規模・複雑な依存関係・リソース競合・予期しない負荷)から変更が障害を引き起こすケースが後を絶たない。Google SRE の経験では障害の約 70% が変更に関連するとされている。
本研究は変更後のモニタリング(post-change monitoring)に焦点を当て、展開後に不正変更を迅速に特定して先手を打つアプローチを提案する。
## 問題設定
大規模商業銀行(5 サービス・2 年間のインシデント/変更チケット)を対象とした実証研究で 3 つの研究課題を設定した。
- **RQ1: インシデントのうちソフトウェア変更に起因する割合は?**
→ 39〜64%(平均 50.4%)がソフトウェア変更に起因。Pearson 相関係数 0.57(変更数とインシデント数の中程度の正の相関)。
- **RQ2: 不正変更の根本原因と異常挙動の分類は?**
→ 5 種類の根本原因: コード欠陥(38%)・設定エラー(31%)・ソフトウェアバージョン不適合(11%)・リソース競合(12%)・その他(9%)。異常挙動はビジネス KPI・マシン KPI・ログの 3 種類に及ぶ。
- **RQ3: 現行の変更検知手法は十分か?**
→ 3σ ルールをビジネス KPI 単独に適用する現行手法は不十分。他データソースの異常シグナル見落とし・期待変動(予期されたリソース変化)の誤検知・単純統計手法の限界の 3 問題を確認。
## 提案手法
[[SCWarn]] は 4 ステップで構成される。
### ステップ 1: データ準備
3 種類の監視データを統一時系列に変換する。
- ビジネス KPI(レスポンスタイム・成功率など): そのまま時系列として利用
- マシン KPI(CPU 使用率・JVM ヒープ領域など): そのまま時系列として利用
- ログ: Drain アルゴリズムでテンプレート化し、テンプレートごとの出現頻度カウントを時系列化(n + 2 系列: n テンプレート + 全ログ数 + 新規テンプレートログ数)
### ステップ 2: マルチモーダル異常検知
LSTM を各データソースの時系列に適用し、その後中間融合(intermediate fusion)で多ソースの相関を学習する。
アーキテクチャ構成:
- ビジネス KPI/マシン KPI/ログそれぞれに LSTM(シーケンス長 10、隠れ層サイズ 128)と全結合層を適用
- 共有表現層で 3 モダリティの結合表現を学習
- 2 つの全結合層で最終予測値を出力
- 損失関数は各モダリティの MSE の合計
教師なし学習: 変更前 2 週間の正常データで学習し、学習データの異常スコア分布に基づく閾値(k-σ 則)を設定する。
### ステップ 3: アラート生成と分析レポート
- **閾値選択**: 連続 α ポイント(α=3)が閾値を超えた場合にアラートを生成(一過性ノイズを除外)
- **解釈可能なレポート**: 変更チケット情報・リアルタイムのヘルススコア・異常上位 k データソースのランキングをウェブ画面で提供
### ステップ 4: アクション決定
ナレッジベース(期待変動と対応するデータ挙動のペア)を照合し、正常変更に伴う「異常だが想定内」の挙動(リソース拡張後の CPU 低下など)を除外する。未知シナリオは人間が確認して知識ベースを更新。ロールバック等の保護アクションを実施。
## 新規性
- **大規模実証研究**: 商業銀行 5 サービス 2 年間のインシデント/変更チケットに基づく不正変更の初の大規模実証研究
- **マルチモーダル融合**: ビジネス KPI・マシン KPI・ログの 3 種類のデータを中間融合で統合し、異種多ソースデータの相関を教師なしで学習
- **シナリオ特化設計**: 変更後の「非一過性異常」の特性に合わせた連続アラーティング戦略と、「異常だが想定内」の変動を除外するナレッジベース機構
## 実験設定
- **ベンチマークシステム**: Train-Ticket(30 超マイクロサービスの鉄道予約システム)および E-commerce(alibaba/eCommerceSearchBench)
- **データセット**: Dataset A(121 件不正変更 + 96 件正常変更)、Dataset B(125 件不正変更 + 98 件正常変更)
- **障害種別**: 10 種類を注入(F1〜F4: コード欠陥、F5〜F8: 設定エラー、F9: バージョン不適合、F10: CPU リソース競合)
- **収集ツール**: KPI を Prometheus + InfluxDB、ログを Logstash + Elasticsearch で収集
- **比較手法**: Gandalf・Funnel・Lumos(ベースライン 3 種)、各種単一ソース/マルチソース異常検知アルゴリズム
- **評価指標**: Precision/Recall/F1-score と MTTD(平均検知時間, 分単位)
## 実験結果
**RQ4: SCWarn の変更識別性能**
| 手法 | Dataset A F1 | Dataset A MTTD | Dataset B F1 | Dataset B MTTD |
|---|---|---|---|---|
| SCWarn | 0.93 | 5.1 分 | 0.97 | 2.3 分 |
| Gandalf | 0.79 | 6.2 分 | 0.87 | 3.1 分 |
| Funnel | 0.73 | 14.0 分 | 0.81 | 6.4 分 |
| Lumos | 0.78 | 10.0 分 | 0.82 | 10.0 分 |
平均 F1 = 0.95、MTTD 平均 3.7 分(Funnel 比 63.7% 短縮、Lumos 比 63.7% 短縮)。
**RQ5: マルチモーダル LSTM の有効性**
各単一ソース手法(Donut/B-LSTM/LSTM-NDT/OmniAnomaly/DeepLog)や multimodal AE/M-LSTM と比較。マルチモーダル LSTM が最高性能(平均 F1 0.95)。Wilcoxon signed-rank test で M-LSTM との有意差確認(p=0.0416、効果量 0.6860)、multimodal AE との有意差も確認(p=0.0019、効果量 0.8388)。
**RQ6: 時間効率**
訓練時間は数分(Donut/OmniAnomaly/DeepLog より大幅に短い)、オンライン検知時間は 1 秒未満でリアルタイム性を確保。
**RQ7: パラメータ感度**
k(閾値係数)は 1 が最適。α(連続ポイント数)は 3 が精度・MTTD のバランスが良い。
## 考察
### 成功事例(ユーザスタディ)
12 名のエンジニアによる非公式評価で 4 ケースが紹介された。
- **Case I**: データベーステーブルにインデックスなしの全表スキャンを SCWarn が 23 分前に検知(Gandalf より 12 分早い)。データベースメトリクス(ロック待ち・CPU 使用率)とミドルウェアメトリクス(JDBC コネクションプール)から発見。
- **Case II**: コード欠陥による頻繁な fullGC を SCWarn が 5.6 時間前に検知。GC ログと JVM メトリクス(ヒープ・GC カウント)が手掛かり。レポートがエンジニアの 5 分以内の根本原因特定を可能に。
- **Case III**: サービス A・B が同一サーバを共有する効率ボトルネックを 57 分前に発見。
- **Case IV**: 遅い SQL 文が引き起こすデータベース異常を 6 分前に検知。
エンジニアが評価した点: (1) 精度・速度の向上、(2) マルチソースによる包括的な情報、(3) 解釈可能なレポートによる診断効率化(Grafana/Kibana の手動確認を 5〜20 分省略)。
### 教訓
- **汎用性**: ほぼ全システムが KPI とログを保有するため、銀行外の環境にも適用可能
- **人間関与の不可避性**: エンジニアのドメイン知識(期待変動の判断・緊急アクションの決定)は完全自動化では代替困難
- **マルチソース融合の横断応用**: インシデント診断・インシデント予測・トレース異常検知など他タスクへの展開可能性
## 強み・弱点・課題
### 強み
- 実際の商業銀行データに基づいた初の大規模実証研究
- マルチモーダル LSTM が単一ソース/等価融合手法を一貫して上回る
- 解釈可能なレポートと期待変動フィルタによる実用性の高さ
- Train-Ticket・E-commerce の 2 ベンチマークで検証されたコードが公開済み
### 弱点・限界
- 「サイレントインシデント」(モニタリングデータに異常が現れない障害)は検知不可
- 大規模本番展開は 1 サービスに留まり、フルスケール検証は将来課題
- 実験の障害注入は合成的でシンプル(現実の複雑な障害とのギャップ)
- 変更ごとに 2 週間の正常データが必要(新システムへの適用困難)
### 課題
- Open-set の障害種別への対応
- コールドスタート時の適用方法の検討
- 変更規模・頻度が異なる他業種・他規模システムへの汎用化検証
## 関連
- 概念: [[ソフトウェア変更管理]] / [[マルチモーダル障害診断]] / [[異常検知]] / [[インシデント管理]] / [[AIOps]] / [[根本原因分析]] / [[ログパース]]
- エンティティ: [[SCWarn]] / [[Dan Pei]] / [[Nengwen Zhao]] / [[BizSeer]] / [[China Guangfa Bank]] / [[Train-Ticket]] / [[Tsinghua University]]
- 関連 MOC: [[LLM4SRE - MOC]]