Introduction: なぜ「閾値監視」だけでは限界なのか
「CPU使用率が80%を超えました」。
この通知で夜中の3時に叩き起こされた経験は、インフラエンジニアにとって珍しいものではありません。確認してみれば、単なるバッチ処理の一時的なスパイクで、サービスへの影響は皆無。そのまま布団に戻る時の徒労感は、生産ラインのチョコ停(一時停止)に対応する現場担当者の疲労と重なります。
製造業の現場でも、これと全く同じ現象が起きています。古い生産ラインでは、センサーが少しでも規定値を超えると警報が鳴り響き、担当者が駆けつける。しかし、その多くは「異常」ではなく「ノイズ」です。結果、現場は警報に麻痺し、本当に重要な「異音」や「振動」の前兆を見逃して重大な故障を引き起こすことがあります。ITインフラの運用においても、この「ノイズとの戦い」は共通の課題です。
マルチクラウド化で指数関数的に増える「ノイズ」
AWS、Google Cloud、Azureを併用するマルチクラウド環境が当たり前になり、Kubernetesのようなコンテナオーケストレーションが普及した今、監視対象(メトリクス)の数は爆発的に増加しました。
特にクラウドサービスの進化は止まることを知りません。公式サイトによると、2026年初頭の時点でもAWS ConfigはSageMakerやS3 Tablesを含む多数の新しいリソースタイプのサポートを追加しており、IoT Coreではログレベルの細分化が進むなど、可観測性(Observability)の対象領域は拡大の一途をたどっています。また、Kubernetes環境においても、推奨される最新バージョンへの継続的なアップグレードや、それに伴うAPIの変更への追従が必要です。
サーバーレスアーキテクチャやマイクロサービス化が進めば、監視ポイントは数千、数万に及びます。これら全てに対して、人間が手動で「静的な閾値」を設定し続けることは、もはや不可能です。「CPU 80%」が異常な時もあれば、オートスケーリング中なら正常な時もある。コンテキスト(文脈)を無視した閾値監視は、大量の偽陽性(False Positive)を生み出し、運用チームを疲弊させるだけです。
AIOpsが解決する3つの運用課題
AIOps(Artificial Intelligence for IT Operations)は、決して魔法の杖ではありません。製造現場で熟練工が「音」や「振動」の違和感から故障を予知するように、AIに大量の運用データを学習させ、パターンの変化を検知させる「高度なカイゼン活動」です。適切に導入することで、運用工数の大幅な削減といった定量的な効果が期待できます。
- ノイズの削減: 動的なベースライン(普段の状態)を学習し、そこからの逸脱のみを通知することで、不要なアラートを劇的に減らします。
- 予兆の検知: 閾値には達していないが、明らかに普段と異なる傾向(スローダウンの前兆など)を早期に発見します。
- 対応の自動化: 検知した異常に対して、既定のスクリプトを実行し、人手を介さずに復旧(Self-Healing)させます。
この学習パスのゴール:自律型運用のプロトタイプ作成
本記事では、高額な商用AIOpsツール(DatadogやDynatrace、New Relicなど)を導入するのではなく、まずはエンジニア自身がその仕組みを理解し、DIYでプロトタイプを構築するプロセスを解説します。
ブラックボックスになりがちなAIの中身を分解し、「データ収集」「分析」「アクション」のパイプラインを自らの手で組んでみる。小さく始めて成果を可視化することで、ツール選定の「目利き」力が養われ、自社に最適な運用自動化の形が見えてくるはずです。
Phase 1: 「観測可能」な基盤を作る(Observabilityの整備)
AIや機械学習モデルは、入力されるデータの質がすべてです。「Garbage In, Garbage Out(ゴミを入れたらゴミが出る)」の原則は、製造業の品質管理でもIT運用でも変わりません。まずは、マルチクラウド環境に散らばるデータを、AIが解釈可能な状態で一元化することから始めます。
サイロ化したログとメトリクスの一元化
AWSにはCloudWatch、GCPにはCloud Monitoring、AzureにはAzure Monitorがあります。これらは各プラットフォームに最適化された優れたツールですが、それぞれの管理画面を見ているうちは、システム全体の相関関係は見えてきません。「AWSのRDS負荷が高い時、GCP上のアプリのレイテンシが上がっている」といった因果関係を掴むには、データを一箇所に集める必要があります。
また、クラウドサービスは常に進化しています。例えばGCPのGKE(Google Kubernetes Engine)では、定期的に古いバージョンが廃止され、新しいバージョンへのアップグレードが必須となります。こうしたインフラ側の頻繁な変更や仕様更新に、監視基盤そのものが振り回されてはいけません。
ここでデファクトスタンダードとして推奨されるのが Prometheus と Grafana の組み合わせ、そしてデータ収集層としての OpenTelemetry の導入です。
特にOpenTelemetryは、ベンダーニュートラルな仕様であり、トレース、メトリクス、ログを統一的なフォーマットで収集できます。特定のクラウドベンダーの独自エージェントに依存しすぎると、将来的な移行やマルチクラウド対応で足枷になりかねません。まずは各環境からデータを単一のデータストア(PrometheusやVictoriaMetrics、あるいはマネージドな時系列DB)に集約するパイプラインを構築します。
時系列データ収集のベストプラクティス
AIに学習させるためのデータには、「文脈」が必要です。単なる数値の羅列では不十分です。
- 一貫したラベリング:
env=production,region=ap-northeast-1,service=payment-apiのように、全クラウド共通のタグ付けルールを徹底します。これが後の特徴量エンジニアリングで効いてきます。 - 適切な粒度: 5分に1回のデータでは、突発的なスパイクを見逃します。学習用データとしては、少なくとも1分間隔、理想的には10秒〜30秒間隔の解像度が望ましいです。
- カーディナリティの管理: ラベルの値が無限に増えると(例:ユーザーIDをラベルにするなど)、データベースがパンクします。AI分析に必要な次元に絞りましょう。
【ハンズオン】Prometheus/Grafanaでのデータ統合実験
まずは手元の環境や検証用のクラウドインスタンスで、以下の構成を試してみてください。
- Exporterの導入: AWS EC2インスタンス等に
node_exporterを入れ、メトリクスを吐き出させる。 - Prometheus設定:
prometheus.ymlにターゲットを記述し、スクレイピングを開始。 - 可視化: GrafanaでデータソースとしてPrometheusを追加し、CPU使用率やメモリ推移をグラフ化する。
ここまでは一般的な監視構築ですが、次のフェーズでこのデータをPython等の分析基盤に渡すためのAPI(Prometheus HTTP API)が使えるようになっていることが重要です。
Phase 2: 「平常」を知り「異常」を見抜く(機械学習による検知)
データが集まったら、いよいよAI(機械学習)の出番です。ここでは「閾値(Threshold)」ではなく、「外れ値(Outlier)」を見つけるアプローチをとります。
動的閾値(Dynamic Threshold)のメカニズム
静的閾値が「80%を超えたらNG」という固定ルールなのに対し、動的閾値は「過去のトレンドから見て、今の値はあり得ない」という判断をします。
例えば、ECサイトのトラフィックは昼間に増え、夜間に減ります。夜中のトラフィック激減は「正常」ですが、昼間の激減は「障害」です。逆に、夜中に突然昼間並みのアクセスがあれば、それは「DDoS攻撃」かもしれません。このように、時刻や曜日(季節性)を考慮した「予測ライン」を引き、そこから大きく外れたものを検知するのが動的閾値です。
教師なし学習による外れ値検知の基本ロジック
異常検知には、正解ラベル(これは異常、これは正常)を必要としない「教師なし学習」が有効です。異常データは圧倒的に少なく、事前に学習させることが難しいためです。
代表的なアルゴリズムを2つ紹介します。
Isolation Forest (隔離の森):
データポイントをランダムに分割していき、「孤立しやすい(少ない分割回数で孤立する)データ」を異常とみなす手法です。多次元データに強く、計算も高速です。Scikit-learnライブラリで簡単に実装できます。Prophet (Facebook製):
時系列データの予測に特化したライブラリです。トレンド、週次・年次の季節性、休日の影響などを分解してモデル化できます。「本来あるべき数値」を予測し、実測値がその信頼区間(Confidence Interval)を外れたらアラートを出す、という使い方が一般的です。
【ハンズオン】Pythonライブラリを用いた異常検知モデル作成
コードで理解することで、ブラックボックス化を防ぐことができます。PythonとScikit-learnを使った簡易的な異常検知のコードイメージを見てみましょう。
import pandas as pd
from sklearn.ensemble import IsolationForest
import matplotlib.pyplot as plt
# 1. データの準備(Prometheusから取得したCSVなどを想定)
# data = pd.read_csv('server_metrics.csv')
# X = data[['cpu_usage', 'memory_usage']].values
# 2. モデルの定義と学習(汚染率 contamination は異常が含まれる割合の想定)
clf = IsolationForest(contamination=0.05, random_state=42)
clf.fit(X)
# 3. 予測(1は正常、-1は異常)
pred = clf.predict(X)
data['anomaly'] = pred
# 4. 異常値の確認
anomalies = data[data['anomaly'] == -1]
print(f"検知された異常点: {len(anomalies)}件")
このように、数十行のコードで「異常らしきもの」を抽出できます。これをバッチ処理で定期的に回し、結果をSlackに通知すれば、簡易的なAIOpsの完成です。
Phase 3: 「自動」で治す仕組みを作る(自己修復の実装)
異常を検知しただけでは、まだ半分です。オペレーターが深夜に叩き起こされて対応するのではなく、システムが自律的に復旧する「自己修復(Self-Healing)」の実装こそがAIOpsの真骨頂と言えます。
検知からアクションへのパイプライン設計(Event-Driven)
検知システムが異常を見つけたら、それを「イベント」として発行し、アクションを実行する基盤へ通知します。ここでもAWS LambdaやGoogle Cloud FunctionsなどのFaaS(Function as a Service)が、イベント駆動アーキテクチャの中核として機能します。
特にAWS環境では、AWS Configがサポートするリソースタイプが大幅に拡充されており(2026年1月時点でEC2サブネットやSageMakerなど多数追加)、修復アクションを実行する前に「現在の構成がコンプライアンス違反をしていないか」「意図しない構成変更(ドリフト)がないか」をプログラムで厳密にチェックすることが容易になっています。
処理フローの例:
- 検知: Pythonスクリプトや監視ツールが異常を検知(例:Webサーバーの応答遅延、IoTデバイスのデータ途絶)。
- 発火: Webhook経由でAWS LambdaなどのFaaSをキック。
- 診断: Lambdaが対象リソースの状態を確認。AWS Configのルールを参照し、構成変更による障害かどうかを判定。
- 処置:
- サーバーの場合: AWS Systems Manager (SSM) 経由でプロセス再起動、またはAuto Scaling Groupの設定変更。
- コンテナの場合: Kubernetes(最新バージョンではAPIの安定性が向上)のAPIを叩き、特定のPodを再起動。
- 報告: 対応結果をSlack/Teamsに通知。
自動修復のリスク管理と安全装置(Circuit Breaker)
「自動修復」は諸刃の剣です。誤検知によって、正常なサーバーを次々と再起動してしまえば、自ら大規模障害(DoS攻撃に近い状態)を作り出すことになります。
製造ラインに「非常停止ボタン」や「インターロック」があるように、自動修復にも必ず「Circuit Breaker(ブレーカー)」を実装することが、実務の現場において最も強調されるポイントです。
- 回数制限(Rate Limiting): 「1時間に3回までしか再起動しない」といったリミットを設けます。
- 影響範囲の限定: 同時に再起動するのは全台数の10%までとする、あるいはCanaryリリースのように一部から適用します。
- Human in the Loop: データベースのフェイルオーバーなど重大な操作は、チャットツールに「実行しますか? [Yes]/[No]」というボタンを表示し、人間の承認を必須とします。Amazon Connectの最新フローモジュールを活用すれば、担当者への架電と承認プロセスを柔軟に自動化することも可能です。
【ハンズオン】オートスケーリングと再起動の自動化シナリオ
まずは安全なシナリオからスモールスタートすることをお勧めします。「一時ファイルが溜まってディスクがいっぱいになりそうな時、不要ファイルを削除する」というスクリプトを自動実行する仕組みなら、サービス停止のリスクは極めて低いです。
Kubernetes環境(GKEなど)を利用している場合、最新のバージョン(2026年時点では1.35相当)ではプラットフォーム自体の自己修復機能が強力ですが、アプリケーション固有のゾンビプロセスなどは検知しきれないことがあります。こうしたケースこそ、AIOpsによる外部からの介入が有効です。
Terraformなどでインフラをコード化(IaC)していれば、異常検知時にリソース定義を修正して terraform apply を実行するパイプラインを組むことで、インフラ構成レベルでの復旧も視野に入ります。
Phase 4: 運用を進化させ続ける(フィードバックループ)
AIモデルは作って終わりではありません。むしろ、運用を始めてからが重要です。初期のモデルは誤検知(False Positive)や検知漏れ(False Negative)を起こす可能性があります。継続的な改善(カイゼン)の精神でモデルを育成していく必要があります。
人間によるフィードバックとモデルの再学習
現場のエンジニアからのフィードバックループを設計に組み込みましょう。
- AIが「異常」と判定したアラートに対し、Slack上でエンジニアが「👍(正解)」「👎(誤検知)」のリアクションをする。
- このリアクションログを収集し、次回の学習データに反映させる。
このプロセスを繰り返すことで、AIは組織固有の暗黙知を学習していくと考えられます。これを MLOps(Machine Learning Operations)の一環として捉え、モデル更新のパイプラインを確立することが重要です。
組織への展開とROIの証明
技術的に可能でも、組織に定着しなければ意味がありません。まずは「深夜のアラート対応が月10回から2回に減った」「障害の平均復旧時間(MTTR)が30分から5分に短縮された」といった定量的な成果を小さく積み上げてください。
まずは特定のプロダクト、特定のチームで小さく成功事例を作り、それを横展開していくアプローチが確実だと考えられます。
Conclusion & Resources: 次のステップへ
ここまで、AIOpsの概念を分解し、DIYで実装するためのステップを整理しました。
- Observability: データを一元化し、可視化する。
- Machine Learning: 動的な閾値で異常を検知する。
- Automation: FaaS等で自己修復アクションを実行する。
- Feedback: 運用しながらモデルを賢くする。
これらを自前で実装してみることで、AIOpsの本質的な難しさと可能性を感じることができるはずです。その上で、運用規模が大きくなり自作スクリプトの保守が大変になった段階で、Datadog WatchdogやDynatrace Davisといった商用AIエンジンの導入を検討すればよいのです。その時、ツールの機能を鵜呑みにせず、自社の課題にフィットするかどうかを的確に判断できるでしょう。
学習リソースと推奨書籍
- O'Reilly "SRE サイトリライアビリティエンジニアリング": 自動化とトイル削減のバイブル。
- Coursera "Machine Learning for Engineering": エンジニア向けのML実践講座。
- Prometheus / Grafana 公式ドキュメント: Observabilityの基礎を固めるために。
アラートに追われる受動的な運用から、システムが自律的に問題を解決する能動的な運用へ。まずは手元の小さなスクリプトから、データドリブンな改善の最初の一歩を踏み出してみてください。
コメント