# Anomaly Detection on Golden Signals [[Yu Chen (Baidu)]](IOP@[[Baidu]])による SREcon19 Asia/Pacific 発表。ゴールデンシグナル 4 種(レイテンシ・トラフィック・エラー率・サチュレーション)のそれぞれに最適な統計モデルを割り当て、教師なし学習で本番稼働の異常検知を実現する手法を体系的に整理する。本番 6 シナリオで適合率 92.3〜100%、再現率 95〜100% を達成。 公式ページ: <https://www.usenix.org/conference/srecon19asia/presentation/chen-yu> ## 概要 サービスの健全性監視におけるゴールデンシグナルはレイテンシ・トラフィック・エラー率・サチュレーションの 4 種。共通課題は「異常データが全体の 1% 未満で希少」かつ「ラベル付けが困難」な点で、手法の核心は**統計的解析+教師なし学習**にある。ガウス分布の仮定が実データで成立しないことから出発し、シグナルの種類ごとに異なる分布モデルを適用することで、確率閾値に基づく一貫したアラート設計を実現する。 ## 主要メッセージ 1. **確率閾値の優位性**: シグナル閾値 $t$ を「$P\{x > t\} = p$ となる値」として定義することで、エンジニアの感覚に近い「1 日に 1 件の偽アラームを許容($p \approx 0.0007$)」という形で閾値を設定できる。分布モデルを定期的に再構築することで閾値の自動調整も実現する。 2. **レイテンシ検知**: ガウス分布の仮定が実際のレイテンシ分布(右裾の重い歪み分布)に当てはまらないため、**KDE(カーネル密度推定)**を採用。ガウスカーネル $K(x; x_i) = \mathcal{N}(\mu=x_i, \sigma^2)$、$\sigma \approx 1.06sn^{-1/5}$。過去の異常値が閾値を押し上げる問題には**LDA ベースの異常値除去**を適用:全データをソートして総散布度の降下点(スパイク)を探し、右側の異常値を除去してから KDE を再推定する。 3. **サチュレーション検知**: CPU/メモリ/ディスク/ネットワーク利用率は $[0, 1]$ 区間のためガウスカーネルが境界で確率を漏らす。**ベータ分布**をカーネルとして用いる($c \in [100, 200]$ の経験値でスケール調整)。 4. **エラー率検知**: リクエスト数 $x$ に対しエラー数 $y$ の比率 $r = y/x$ のばらつきは、$x$ が小さいときに大きくなるため、比率への単純な閾値設定が機能しない。解決として $y$ が**二項分布**に従うとモデル化し、過去データで $p_0$ を推定し**比率 z 検定**(proportion z-test): $z = \frac{y/x - p_0}{\sqrt{p_0(1-p_0)/x}}$ で判定。リクエスト数に無関係な一貫した統計的基準を実現する。 5. **トラフィック検知(最も複雑)**: 日次変動パターンを持ち、上昇より下降の方が深刻。**予測ベース**で検知する: - **ロバスト線形回帰**: 短セグメントに線形仮定 $\hat{y}_t = kt + b$。$L_1$ ノルム最小化で外れ値に耐性を持たせるが、急激な変化への追従が遅くなる「スローキャッチアップ効果」がある。 - **VAE(変分オートエンコーダ)**: 2000 点の信号セグメントを入力層、1000 次元の隠れ層(特徴)、出力層(平均と分散)の構成。隠れ層幅が大きいほど急峻な変化をエンコード、小さいほど滑らかな出力。「Donut」論文(Xu et al. WWW 2018)を参照。 - **周期パターンマイニング**: 平日・週末・祝日などの複数パターンと段差ドリフトに対応。1440 ビン(1 分粒度)の累積和を正規化して CDF を生成し、コルモゴロフ=スミルノフ検定で日間類似度を測定、DBSCAN でクラスタリング。そのクラスタのシェープ平均と観測プレフィクスから総量 $N$ を最尤推定する(独立二項分布への近似で計算)。 - **ポアソン分布検知**: 予測値 $\hat{y}_t$ をパラメータ $\lambda$ としてポアソン分布でモデル化し、ガウス近似:$z = (y_t - \hat{y}_t)/\sqrt{\hat{y}_t}$ で判定。 - **リクエスト独立性補正**: 実際には 1 クリックが JavaScript で複数リクエストを生成するため独立でない。観測トラフィック $y_t = c \times x_t$ と仮定し、MAD で $c$ をロバストに推定して $z_t^y \sim \mathcal{N}(0, c)$ に変換する。 ## 視覚的に重要な図表 ### KDE による分布推定(ページ 8) ![[wiki/sources/_attachments/sre19apac_slides_chen_golden_signals/page-008.png]] 左: 実際のレイテンシ時系列(ガウス分布仮定では扱えない尖ったピーク)。右: 頻度ヒストグラム・ガウスフィット・KDE フィットの比較。KDE が実分布に忠実に追従しているのに対し、ガウスフィットは裾に大きなずれを示す。 ### LDA による異常値除去と閾値改善(ページ 11) ![[wiki/sources/_attachments/sre19apac_slides_chen_golden_signals/page-011.png]] 左: 位置-散布度プロットのスパイク(異常値除去の分割点を探す)。右: 異常値除去前後の閾値比較——閾値が大幅に下がりアラート感度が向上することを視覚的に確認。 ### 周期パターンマイニングとシェープ抽出(ページ 24) ![[wiki/sources/_attachments/sre19apac_slides_chen_golden_signals/page-024.png]] 曜日別の複数の日次パターン(平日・週末パターンが明確に分離)を DBSCAN でクラスタリング。 ### 本番評価(ページ 32) ![[wiki/sources/_attachments/sre19apac_slides_chen_golden_signals/page-032.png]] | シナリオ | 適合率 | 再現率 | シグナル種別 | |---|---|---|---| | 検索エンジントラフィック | 100% | 100% | トラフィック | | フィードトラフィック | 100% | 100% | トラフィック | | フィードクリック率 | 100% | 100% | エラー率 | | 広告収入 | 95% | 95% | トラフィック | | 外部ネットワーク接続監視 | 94% | 96.3% | エラー率+トラフィック | | データセンターネットワーク接続監視 | 92.3% | 99.2% | エラー率 | ## 概念・実体への接続 - **概念**: [[異常検知]] / [[ゴールデンシグナル]] / [[アラート管理]] - **実体**: [[Yu Chen (Baidu)]] / [[Baidu]] - **関連 source**: [[@2018__SREcon18 Americas__Automatic Metric Screening for Service Diagnosis]](同著者の前年 SREcon 発表)/ [[@2017__SREcon17 Asia__Draining the Flood - A Combat against Alert Fatigue]](Baidu のアラート疲労対策) - **引用論文**: Donut(Xu et al. WWW 2018)— 変分オートエンコーダによるトラフィック異常検知 ## 限界・不確実点 - 発表年(2019 年)は公式ページに記載されているが、正確な日付(月日)はスライド内に記載なし。公式ページより 2019 年 5 月頃(SREcon19 Asia/Pacific)と推定。 - 本番評価は 6 シナリオのみで、シナリオ選択の網羅性・評価期間・異常の定義(グランドトゥルースの構築方法)が不明。 - VAE(Donut)の訓練データ量・訓練時間・再訓練頻度は未開示。 - ロバスト線形回帰の「スローキャッチアップ効果」がどの程度の遅延を生むか定量データなし。 - リクエストの非独立性補正係数 $c$ は MAD で推定するが、$c$ 自体が時間変動する場合の扱いは未言及。 - IOP group(Intelligence Operation Platform)の詳細なシステム規模は開示なし。 ## 出典 - スライド PDF: `.raw/slides/sre19apac_slides_chen_golden_signals/sre19apac_slides_chen_golden_signals.pdf`(34 ページ、全ページ画像確認済み) - 公式ページ: <https://www.usenix.org/conference/srecon19asia/presentation/chen-yu>