ナビゲーションをスキップする

AIOps で進める異常検知 - AiDice のご紹介

2022年10月3日 に投稿済み

Chief Technology Officer and Technical Fellow, Microsoft Azure

このブログ記事は、AIOps プラットフォームおよびエクスペリエンス チームの製品マネージャーである Jeffrey He による共同執筆です。

Microsoft Azure は、障害を可能な限り早く予測して軽減することでサービスの信頼性を確保することに多大な努力を払っています。しかし、大規模なクラウド システムでは、システムの規模が大きいだけに、予期せぬ問題が発生する可能性があります。そのため、AIOps を利用して正常性メトリクスを継続的に監視することは、以前の記事でお伝えしたように、クラウド システムを正しく運用するための基本となります。まず、これについては、「人工知能による Azure サービス品質の向上: AIOps」 で詳しくお伝えしました。また、AIOps を使用して Azure の安全なデプロイを支援する方法の詳細な例を、「AIOps で安全なデプロイを進める」でご紹介しています。本日は、もう 1 つの例として、異常検知の分野で AI がどのように利用されているかをご紹介します。特に、Microsoft Research と Microsoft Azure が共同開発した、大規模かつ多次元の時系列データから異常を特定する新しい異常検出アルゴリズム、AiDice をご紹介します。AiDice によってインシデントが迅速に捕捉されるだけでなく、エンジニアがより効果的に問題を診断できるよう重要なコンテキストが提供されるため、エンド ユーザーに可能な限り最高のエクスペリエンスを提供することができます。

なぜ、異常検知に AIOps が必要なのか?

異常検知に AIOps が必要なのは、AI なしでは分析できないほどデータ量が多いからです。大規模なクラウド環境では、私たちは無数のクラウド コンポーネントを監視し、それぞれのコンポーネントによって無数のデータ行がログに記録されています。さらに、ある特定のクラウド コンポーネントの各データ行には、タイムスタンプ、仮想マシンのハードウェアの種類、世代番号、OS バージョン、仮想マシンをホストするノードが存在するデータセンターや国など、数十の列が含まれていることがあります。このように私たちが持っているデータの構造は、基本的に多次元時系列データであり、さまざまな次元の組み合わせにより指数関数的な数の個別の時系列が含まれています。すべての時系列を繰り返し監視することは現実的ではありません。つまり、AIOps の適用が必要となります。

AiDice 以前は、どのようにアプローチしていたのでしょうか?

AiDice 以前は、大規模かつ高次元の時系列データにおける異常検知を処理していた方法は、最も重要な次元のセットを選択して異常検知を行うというものでした。ある範囲のサブセットに注目することで、その組み合わせにおける異常をすばやく検出することができます。異常が検知されると、エンジニアは問題をさらに深く掘り下げ、ピボット テーブルを使用して、含まれていない他の次元まで掘り下げて、問題をより適切に診断できるようになりました。このアプローチは有効でしたが、Microsoft はこのプロセスを改善する 2 つの重要な機会を見出しました。まず、従来のアプローチでは、エンジニアが異常の正確なピボットを特定するために多くの手作業が必要でした。第 2 に、このアプローチでは異常検知アルゴリズムに限られた数の次元しか入力できないため、直接監視の範囲が制限されることも挙げられます。これらの理由から、Microsoft Research と Azure は共同で AiDice を開発し、これら 2 つの領域を改善しました。

現在、AiDice でどのようにアプローチし、それがどのように機能しているか

AiDice では、何十もの次元を同時に見ていても、時系列データ上のピボットを自動的にローカライズできるようになりました。そのため、ハードウェアの世代やハードウェアのマイクロコード、OS のバージョン、ネットワーク エージェントのバージョンなど、より多くの属性を追加することができます。このため、探索空間は非常に大きくなりますが、AiDice によって問題が組み合わせ最適化問題としてエンコードされるため、従来のアプローチよりも効率的に空間を探索することができます。AiDice の簡単な説明を以下に示しますが、アルゴリズムの詳細な説明は、論文「ESEC/FSE '20: 28th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE 2020)」の発表をご覧ください。

パート 1: AiDice アルゴリズム - 探索問題としての定式化

AiDice アルゴリズムは、まずデータを探索問題に変換することで動作します。探索ノードは、与えられたピボットから始まり、近隣のリレーションシップを構築していくことで形成されます。たとえば、"Country=USA, Datacenter=DC1, DiskType=SSD" というノードがあるとすると、下図のように次元/値のペアを交換、追加、削除して、隣接するノードを形成することができます。

この画像は、探索空間がどのように形成されるかを示しています。左側はノード グラフで、右側は特定のノード集合にズームインしたもので、ノード間の関係を示す矢印が表示されています。

パート 2: AiDice アルゴリズム - 目的関数

次に、AiDice アルゴリズムでは、2 つの重要なコンポーネントを重視した目的関数を最大化することで、探索空間がスマートに探索されます。第 1 に、エラーの急激なバーストや変化が大きいほど、AiDice の目的関数のスコアは高くなります。第 2 に、エラーの総数に対して、このピボットで発生するエラーの割合が高いほど、AiDice の目的関数のスコアは高くなります。たとえば、発生したエラーの総数が 5,000 件であれば、10 件から 20 件になったピボットよりも、3,000 件から 4,000 件になったピボットについてユーザーに警告することの方が重要です。

パート 3: アラートのカスタマイズによるノイズの低減

次に、AiDice によって生成されるアラートは、ノイズを減らし、より実用的になるようにフィルタリングとカスタマイズが必要です。なぜなら、これまでの結果は数学的観点から最適化されていますが、入力データの意味に関する分野専門知識はまだ組み込まれていないからです。このステップは、入力データの性質によって大きく異なりますが、たとえば、同じエラー コードを共有する連続したアラートをグループ化することで、アラートの総数を減らせる可能性があります。

AiDice の実際の例

以下は、AiDice が実際の問題の早期発見に貢献した実例です。機密保持のため、詳細は改変しています。

  • 私たちは AiDice を適用し、ある種の仮想マシンのメモリ低下エラー イベントを監視しました。このとき、障害の数に加え、リージョン、データセンターの場所、クラスター、ビルド、RAM、イベントの種類などの十数個の属性情報の次元がありました。
  • AiDice によって、特定のピボットのノードでメモリ不足のイベントが増加していることが特定され、これはメモリ リークを示唆していました。
    • Build=11.11111, Ram=00.0, ProviderName=Xxxxx-x-Xxxxxx, EventType=8888 (プライバシー保護のため、詳細は変更されています)。
  • 集計の傾向を見ると、この問題は非表示のものであり、AiDice なしでは問題の正確な場所を検出するのに手作業が必要でした (以下のグラフをご覧ください。プライバシー保護のため、データは正規化されています)。
  • このチケットを担当したエンジニアは、アラートとアラートに表示されたいくつかの事例を見て、何が起こっているのかをすぐに把握することができました。

この画像は、ある種の VM 17 個のタイムスタンプについて、メモリ不足イベントの集計傾向を折れ線グラフで表したものです。全体として、この傾向は時間の経過とともに比較的安定しています。

この画像は、AiDice が特定のピボットで特定した異常を 17 のタイムスタンプで表した折れ線グラフです。全体として、傾向は明らかに異常値を示しており、低い位置から始まり、常に上昇しています。

この実際の例では、AiDice によって、特定のエラー タイプを引き起こしていた次元の組み合わせの問題を、自動的かつ迅速かつ効率的に検出することができました。その後すぐにメモリ リークが発見され、Azure のエンジニアはその問題を軽減することができました。

今後の展望

今後 Microsoft は、AiDice を改良し、Azure の回復性と信頼性をさらに向上させたいと考えています。具体的な内容は以下のとおりです。

  • Azure での追加のシナリオのサポート: AiDice は既に Azure の多くのシナリオに適用されていますが、そのアルゴリズムは、それが動作することができるメトリックの種類に関して改善の余地があります。Microsoft Azure と Microsoft Research チームは、より多くのメトリック シナリオをサポートできるよう連携しています。
  • Azure における AiDice 用の追加データ フィードの準備: AiDice アルゴリズム自体をアップグレードしてより多くのシナリオをサポートすることに加えて、AiDice の力を十分に活用できるよう、特定のデータ ソースにサポート属性を追加する作業も行っています。

さらに学ぶ