AIOpsと異常検知
固定閾値のアラート疲れから解放。季節性を学習するML異常検知と自動根本原因分析の仕組み、静的しきい値との違いと限界を原理から解説。
- 1.静的閾値は日次・週次の季節性を知らないため、繁忙期は見逃し閑散期は誤報する。ML手法は周期成分とトレンドを分解し、残差に対して動的な閾値を立てる。
- 2.教師なし手法(STL分解+残差の統計、Isolation Forest、再構成誤差ベースのオートエンコーダ)はラベルなしで正常パターンを学習し、逸脱をスコア化する。
- 3.根本原因分析はメトリクス間の相関やサービス依存グラフの伝播順序から異常の発生源を絞り込むが、相関は因果を保証せず最終判断は人間に残る。
静的閾値の構造的な限界
「CPU使用率が80%を超えたら鳴らす」という静的閾値は「正常範囲は時間によらず一定」を前提としますが、実際のメトリクスは季節性(daily/weeklyの周期)とトレンドを持ち、この前提はすぐ崩れます。平日昼を基準に閾値を固定すると、深夜・週末は正常でも下回り続け、繁忙期は正常な増加でも超過し続けます。閾値を緩めれば繁忙期の誤報は減る一方、閑散期の見逃しが増える再現率の低下と表裏一体です。
これは/devops/alerting-theory/の適合率・再現率のトレードオフそのものですが、AIOpsが狙うのはそのトレードオフ曲線自体を動かすことです。「今この時刻・曜日において何が正常か」を学習し、そこからの逸脱を測ることで、同じ再現率でも適合率を底上げできます。
AIOps(AI for IT Operations)は監視・アラート・根本原因分析・自動修復をMLで支援する運用手法の総称です。本稿は異常検知と根本原因分析の内部アルゴリズムに絞ります。パーセンタイル統計の罠は/devops/percentile-latency-statistics/、SLOバーンレートは/devops/alerting-theory/を参照してください。
季節性とトレンドの分解: STL分解
時系列は単純化すると次の3成分の和としてモデル化できます。
観測値(t) = トレンド(t) + 季節性(t) + 残差(t)
STL分解(Seasonal-Trend decomposition using Loess)は局所回帰を反復適用し、トレンド推定→季節成分の抽出→再度トレンド推定、を収束するまで繰り返して3成分を分離します。異常検知は生の値ではなく、この残差 = 観測値 − トレンド − 季節性に対して行うのが要点です。残差は季節性もトレンドも除去された定常過程に近づくため、過去N日の残差分布から平均 ± 3σのような動的閾値を立てられ、繁忙期の高いベースラインも季節成分として吸収済みなので検知精度が落ちません。
| 観点 | 静的閾値 | 季節性考慮(STL+残差) |
|---|---|---|
| 正常範囲の基準 | 時刻によらず固定 | 曜日・時間帯ごとに動的 |
| 繁忙期の挙動 | 誤報しやすい | 季節成分として吸収 |
| 閑散期の挙動 | 見逃しやすい | 低ベースラインでも検知 |
| トレンド変化への追従 | 手動再設定まで放置 | 自動追従 |
STLは季節変動の振幅が一定な加法的構造を前提にしやすく、振幅がトレンドに比例して拡大する場合は対数変換で加法に直してから適用します。これを怠るとトレンドが大きい局面で残差の分散が肥大し、閾値が緩んで異常を見逃します。
教師なし異常検知: Isolation Forestとオートエンコーダ
STL+残差は単変量の手法ですが、実運用では数百〜数千のメトリクスを横断的に見たい上、ラベル付きの異常データもほぼ存在しません。そこで教師なし学習が中心になります。
Isolation Forestは、異常点ほど「少ない分割回数で孤立させやすい」性質を利用します。特徴量と分割値をランダムに選んで二分木を作ることを繰り返すと、密集した正常領域の点は深く分割しないと孤立しませんが、疎な領域の異常点は浅い分割回数で孤立します。多数の木を作り、平均パス長が短い点ほど異常スコアが高いとみなす手法で、距離やクラスタの前提を置かないため高次元でもスケールしやすく軽量です。
オートエンコーダは入力を低次元の潜在表現に圧縮し、そこから元の次元に復元するニューラルネットワークです。正常なパターンだけで学習させると、異常な入力に対しては学習していない構造のため復元誤差が大きくなり、この誤差を異常スコアとして使います。CPU・レイテンシ・エラー率が普段どう連動するかという多変量の相関構造まで学習できる点がIsolation Forestとの違いです。
| 観点 | Isolation Forest | オートエンコーダ |
|---|---|---|
| 異常の定義 | 孤立しやすさ | 復元誤差の大きさ |
| 得意な入力 | 高次元の表形式特徴量 | メトリクス間の相関構造 |
| 学習コスト | 低い(木構造の構築のみ) | 高い(勾配降下が必要) |
教師なし異常検知は「学習データの分布=正常」に依存します。障害を含む期間を学習データに混ぜると、その障害パターンごと「正常」として学習してしまい、次回同じ障害を検知できません。学習ウィンドウから既知のインシデント期間を除外する、あるいは中央値・MADなど外れ値に頑健な統計量で正規化する前処理が欠かせません。
アラート疲れの軽減: スコアの平滑化と多変量の合議
ML異常検知でもスコアをそのまま閾値判定に使うと、単発のノイズに反応してアラートが増えます。感度を上げるほど再現率と引き換えに適合率が落ちる、静的閾値と同じ構造の問題です。軽減策は主に2つです。
第一に時間方向の平滑化です。単発の超過ではなく直近の複数ウィンドウで継続的にスコアが高いことを要求すると、瞬間的なノイズを抑えられます。これは/devops/alerting-theory/の多窓バーンレート判定と同型の発想です。第二に多変量の合議です。エラー率・レイテンシ・スループットなど関連する複数メトリクスが同時に異常を示したときだけ発報を強め、単一メトリクスの一時的なブレは無視します。
根本原因分析の自動化とその限界
異常検知後の課題は原因の特定です。自動化されたRCA(Root Cause Analysis)は主に2つのアプローチを組み合わせます。相関ベースは異常検知時刻の前後で他の全メトリクスとの相関・変化点の一致度をスコア化し、最も連動したメトリクスを候補として提示します。依存グラフベースは/devops/distributed-tracing/のトレースから構築したサービス依存関係を使い、異常の伝播順序を手がかりにします。下流より先に異常化した上流サービスほど根本原因である可能性が高いという考え方です。
自動RCAが提示するのは相関の強さと時間的な先行関係であり、因果関係の証明ではありません。共通の外部要因が複数メトリクスを同時に悪化させた場合、たまたま先に異常化した側が誤って「原因」と提示されることがあります。自動RCAの出力は候補の優先順位付けとして使い、最終的な原因確定は人間の検証を経るべきです。
RCAの精度は依存グラフの正確さに強く依存します。動的なサービスメッシュのトポロジーや非同期メッセージング経由の依存が可視化されていなければ、伝播順序の推定自体が誤ります。
静的手法との違いと運用上の限界
ML駆動の異常検知は万能ではありません。季節性を捉えるには最低でも数週間分の履歴が必要で、新規サービスやトラフィック急変直後は精度が落ちます。また性能の緩慢な低下がトレンド成分に取り込まれ、真に対処すべき劣化を検知できなくなるコンセプトドリフトの問題もあります。定期的な再学習と、/devops/error-budget-math/のバーンレートのような外部の絶対基準を併用し、相対的な異常検知だけに頼らない設計が実務的には重要です。
まとめ
- 静的閾値は季節性・トレンドを考慮できず、繁忙期の誤報と閑散期の見逃しを同時に抱える。
- STL分解はトレンド・季節性・残差に分離し、残差に対して動的閾値を立てることで正常範囲を時刻ごとに適応させる。
- Isolation Forestは孤立のしやすさ、オートエンコーダは復元誤差を異常スコアとする教師なし手法で、ラベルなしのメトリクスに適用できる。
- アラート疲れの軽減にはスコアの時間平滑化と多変量の合議が有効で、静的閾値と同じ適合率・再現率のトレードオフ構造を持つ。
- 自動根本原因分析は相関と依存グラフの伝播順序で候補を絞り込むが、相関は因果を保証しないため最終判断は人間に残すべきである。
DevOps/インフラ Article
AIOpsと異常検知を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
AIOps
比較で見る軸
難易度: advanced / カテゴリ: DevOps/インフラ / タグ数: 6
導入後に効く点
教師なし手法(STL分解+残差の統計、Isolation Forest、再構成誤差ベースのオートエンコーダ)はラベルなしで正常パターンを学習し、逸脱をスコア化する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- DevOps/インフラ
- タグ数
- 6
判断チェックリスト
- 自社の用途が「AIOps / 異常検知」に近いか確認する。
- 強みである「静的閾値は日次・週次の季節性を知らないため、繁忙期は見逃し閑散期は誤報する。ML手法は周期成分とトレンドを分解し、残差に対して動的な閾値を立てる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。