静的閾値の限界
従来の監視は「CPU使用率が80%を超えたらアラート」「レスポンスタイムが500msを超えたらアラート」という静的閾値ベースだ。しかしこの方法には本質的な限界がある。正常な範囲は時間帯、曜日、季節によって変動する。金曜日の夜にトラフィックが減るのは異常ではないが、月曜日の朝に同じ数値なら障害の兆候かもしれない。
KGAのクライアント(EC運営、月間PV 500万)で運用していた静的閾値監視では、月間約400件のアラートが発生し、そのうち85%が誤検知(false positive)だった。アラート疲れで本当の障害を見逃すリスクが高まっていた。
異常検知モデルの選択
KGAが検証した異常検知アプローチは4つ。Statistical(ARIMA、Holt-Winters): 時系列の季節性パターンを学習し、予測区間外の値を異常と判定。実装が簡単でCPU使用率やリクエスト数には有効だが、複雑なパターンには対応しにくい。
Isolation Forest: ランダムに分割していくことで、通常データから「孤立しやすい」データポイントを異常と判定。多次元メトリクスの異常検知に有効。KGAではCPU、メモリ、ディスクI/O、ネットワークの4次元で適用。
LSTM Autoencoder: 時系列データをエンコード-デコードし、再構成誤差が大きいデータポイントを異常と判定。複雑な時系列パターンの検出精度が高いが、学習コストが大きい。
Prophet(Meta製): 季節性、トレンド、祝日効果を分解するモデル。ビジネスメトリクス(売上、PV等)の異常検知に特に有効。
KGAの結論として、インフラメトリクスにはIsolation Forest、ビジネスメトリクスにはProphetを使い分けるのが最もコスパが良い。LSTMは精度は高いが、運用コスト(学習、再学習、GPU)が見合わないケースが多い。
ログの自動分析: LLMの活用
ここが最も効果を発揮した領域だ。障害発生時のログ分析をLLMで自動化した。具体的には、アラート発生時に関連するログ(前後5分、関連サービス)を自動収集し、LLM(Claude 3.5 Sonnet)に以下を分析させる。
- エラーログのパターン分類(既知/未知)。2. 根本原因の推定(スタックトレース、エラーメッセージの解析)。3. 影響範囲の推定(影響を受けるサービス、ユーザー数の概算)。4. 過去の類似インシデントとの照合(ベクトル検索)。5. 推奨される対応アクション。
この分析結果をSlackのインシデントチャネルに自動投稿する。人間のオンコールエンジニアは、ゼロからログを読む代わりに、LLMの分析結果をレビューするところから始められる。
KGAの実測では、MTTR(Mean Time To Resolution)が平均4.2時間から1.5時間に短縮された。特に効果が大きかったのは、初動(アラート受信から原因特定まで)の時間で、45分から8分に改善された。
アラート集約と優先度付け
大規模障害時には数十〜数百のアラートが同時に発生する。これを人間が個別に処理するのは不可能だ。KGAのAIOpsシステムでは、アラートの集約と優先度付けを自動化している。
時間的相関: 5分以内に発生したアラートをグループ化。因果的相関: サービス依存関係グラフ(手動定義 + 自動推定)に基づき、根本原因のアラートと派生アラートを識別。優先度スコア: 影響ユーザー数 × サービスの重要度 × 異常の程度でスコアリング。
この集約により、ある大規模障害では同時発生した87件のアラートが3つのインシデントグループに集約され、根本原因のDBレプリケーション障害が最優先で提示された。
自動修復(Auto-Remediation)
KGAでは限定的だが自動修復も導入している。ただしこの領域は慎重なアプローチが必要で、自動修復の対象は「実行しても悪影響がない」アクションに限定する。
安全な自動修復の例: Podのリスタート(CrashLoopBackOff状態)。一時的なスケールアウト(CPU/メモリ逼迫時)。キャッシュのフラッシュ(キャッシュ破損検知時)。CDN設定のフォールバック。
危険で自動化しない例: データベースのフェイルオーバー。設定ファイルの変更。ネットワーク設定の変更。データの修正・削除。
自動修復の実行は必ずログに記録し、Slackに通知する。また、同一アクションの実行頻度を制限し(1時間に3回まで等)、自動修復のループを防止する。
正直な評価: AIOpsの限界
AIOpsは万能ではない。異常検知のfalse positive率は静的閾値の85%から15%に低下したが、ゼロにはできない。特に、初めて遭遇するパターン(新機能のデプロイ後のトラフィック変化等)では誤検知が増える。
LLMによるログ分析も、100%正確ではない。KGAの評価では、根本原因の推定精度は約72%。誤った推定を信じて対応すると逆効果になるリスクがある。あくまで「参考情報」であり、最終判断は人間が行うことが大前提だ。
コストも無視できない。異常検知モデルの学習・推論基盤、LLM API費用、ベクトルDB、アラート集約エンジンの運用で、月額$2,500-$4,000のコストが発生する。中小規模のシステムでは費用対効果が見合わない可能性がある。KGAの推奨は、月間アラート数が200件を超え、かつオンコール体制に負荷がかかっているチームでの導入だ。