## Memo - 2022年に "IEEE Transactions on Dependable and Secure Computing" へジャーナル化された。 - [[Loghub]]を使っている。 - 以下は、ジャーナル版。 ## Abstract 最近の分散システムは、並列に動作させるとインターリーブされたログが生成されます。ログ中の実行中のインスタンスや実体を追跡するために、常に識別子(ID)が付加されています。そのため、ログメッセージを同じIDでグループ化することで、[[異常検知]]や特定に役立てることができます。これを実現するための既存のアプローチは、以下のような課題を満たすにはまだ不十分です。1) ログの依存関係をマイニングすることなく、単一のコンポーネントでログを処理する。2) 最新のソフトウェアシステムでは、ログの形式が絶えず変化している。3) 簡単な監視ツールでは、潜在的な性能問題を非侵入で検出することは困難である。上記の欠点を改善するために、我々はインターリーブされた非構造化ログのための堅牢な異常検出・特定ツールであるSwissLogを提案します。SwissLogはログのシーケンシャルな異常に着目し、考えられるパフォーマンス上の問題を掘り起こそうとするものです。SwissLogは、分散したコンポーネント間のID関係グラフを構築し、IDによってログメッセージをグループ化する。さらに、パラメータチューニングを必要としないオンラインデータドリブンログパーサを提案します。グループ化されたログメッセージは、新しいログパーサーによって解析され、意味的および時間的な埋め込みによって変換されます。最後に、SwissLogは注意に基づく[[Bi-LSTM]]モデルとヒューリスティック探索アルゴリズムを用いて、それぞれインスタンス-粒度の異常を検出し、局在化する。実世界と合成データセットでの実験により、SwissLogの有効性、効率性、頑健性が確認された。 ## まとめ ## 背景 - DeepLogやLogAnomalyなど深層学習を用いたログの異常検知手法は数多く存在する. - 既存のアプローチでは,以下の2点の課題がある. 1. 開発・保守中のソフトウェアでは,ログのフォーマットが常に変化している → BERTを採用してログテンプレートのエンコーディングを行うことで解決 2. システムのパフォーマンスの問題は潜在的な原因であり,監視ツールでは発見できない可能性がある.また,部分的な障害で異常として現れないケースも多い. → ログの時間間隔の変化を捉えることで解決 ## 提案 - 本論文では,多様な障害を検出するためのロバストな深層学習に基づく異常検出モデルであるSwissLogを提案する. - SwissLogは,セマンティック情報(ログテンプレート)のエンコードを行うため,最新の自然言語処理のモデルであるBERTを採用する.これにより,ログの形式の変化にも対応できる. - セマンティック情報と時間情報のアプローチを組み合わせて,統一的な注目度に基づいたAttention-based Bi-LSTMモデルを学習し,異常を検出する. - SwissLogの全体像 ![[SwissLog Robust and Unified Deep Learning Based Lo/Untitled.png]] - 検出できる異常パターンは, - ログのシーケンス順序の変化 - ログの時間間隔の変化 → パフォーマンス異常に対するアプローチ - SwissLogは,文の意味を失うことなく,辞書に有効な単語をマッピングしてログデータを抽出する新しいログパーサーを提案している - 提案手法は,パラメータのチューニング処理を必要としない. - 著者の知る限りでは,辞書に基づいたログ解析手法を提案したのは初めてである. ## 評価に用いたデータセット - 実環境のデータ - HDFS - Blue Gene /L - Android by Loghub - シミュレーションデータ - HDFS [logpai/loghub](https://github.com/logpai/loghub) に公開されているデータセットが利用される。 ## Introduction 大規模なソフトウェアシステム、特にクラウドサーバ上に展開されるシステムにおいては、信頼性と可用性が非常に重要である。外的障害(例:リソースの占有、ノードの切断)と内的バグ(例:無限ループ、不正な設定)は、分散システムの高い可用性と信頼性を破壊する主な原因である。十分なリソースのもとで期待される動作に従って動作するシステムを正常とし、正常な動作からの逸脱を異常と考える。上記の障害は、システムメトリクス(CPU使用率の急上昇など)、ビジネスKPI(リクエストエラーの増加など)、ログ(例外メッセージなど)により異常として顕在化する。さらに悪いことに、これらは下流のサービスの障害、顧客の流出、さらには莫大な収益の損失につながる可能性があります。クラウドサーバーにおける異常を例にとって考えてみよう。アップグレードの際、エラーコードの断片が原因で、多くの実行中のインスタンスでI/Oハングが発生しました。この異常により、何百万ものサービス、特にクラウドサーバー上に構築されたeコマースサービスや金融サービスが、莫大な収益損失を被ったのです[2]。そのため、異常の影響を軽減するために、異常の検出と特定を即座に行うことが求められています。 ログデータは、あらゆる種類のソフトウェアシステムで広く利用されているデータ資源です。ログデータは、システムの状態や重要なイベントを実行時に記録するため、開発者は一般的にログデータを利用してシステムの状態を取得し、異常を分析します。現代のコンピューターシステムの規模と複雑さが増すにつれて、非同期処理や並列実行タスクの処理時に、システムがインターリーブログを生成するようになりました。この膨大な量のログ(例えば、1時間あたり50GB以上のログが生成される[3])と分散コンポーネント内の複雑な依存関係を手動で処理することは、非常に困難です。そのため、効果的かつ効率的なデータ駆動型ログ解析ツールが急務となっています。 近年,データドリブンなログベースの異常検知・特定が広く研究されている[4]-[12].しかし、既存のアプローチは強い仮定に基づいて構築されており、実際の実運用環境では容易に満たされるものではありません。上記の手法を実運用環境に適用する場合、以下のような3つの主要な課題がある。 (i) ログの依存性 IDは、実行中のスタンスやエンティティに付けられ、その状態や重要なイベントを追跡する。同じIDでログを関連付けることは、インターリーブされたログを分離するための典型的なアプローチである。既存のアプローチでは、1つのコンポーネントに対してのみ相関をとるため、分散システムでは十分ではありません。ID間の依存関係を明らかにし、分散したコンポーネント間で同じIDのログメッセージを相関させることは、開発者が異常事態を特定するのに大きく役立ちます。 (ii) ログの変化 ログフォーマットは、開発・保守が活発なソフトウェアシステムでは、実際には常に変化している。Kabinnaら[13]とZhangら[10]は、彼らの先行研究の中でログの不安定性を議論しています。実証研究によると、ソフトウェアシステムのライフタイムを通じて変更されるログは20~45%程度であることが分かっています。 (iii) 潜在的な性能問題。性能問題は部分的な故障の一般的な現れであり [14]、これは部分的な機能が壊れているが、そのすべてではないことを意味する。実際、部分故障は多くの実世界の停電の背後にあり [2]、[15]〜[18]、したがって、開発者が無視できる潜在的な問題ではありません。実際には、性能の問題かどうかを区別するためには、システム観測の多くの側面が必要です。ログデータからすべての潜在的な性能問題を検出できるわけではありませんが、潜在的な問題を可能な限り掘り起こすことは、システムの信頼性を高めることにも繋がります。 上記の課題を克服するために、本研究では、非構造化インターリーブログ、特に「IP:1.1.1.1からブロックblk123を受信」のようなIDや自然言語からなるログメッセージに対して堅牢かつ統一的な深層学習ベースのログ異常検出・局所化ツール「SwissLog」を提案します。SwissLogは、スイスアーミーナイフのように堅牢で多機能です。実世界のログデータから、ログの順序の変更と異常発生時のログの時間間隔の変更という2つの一般的なログ変更を発見しました。この2つのタイプを考慮し、私たちはログデータに現れる異常のうち、ログの順序の異常と性能問題の一部を含むものを対象としています(以下、潜在的性能問題と呼びます)。 SwissLogはオフラインフェーズとオンラインフェーズの2つのフェーズを含み、関係構築、ログ解析、異常検出、異常局在化の4つのステージから構成される。オフラインフェーズでは、SwissLogはコンポーネント間のログからIDの関係グラフを構築し、同じIDを持つインターリーブログを相関させる。ログの正確な解析を支援するために、パラメータチューニングを行わない新規で堅牢な辞書ベースのログパーサを導入し、文の意味的な意味を失うことなくログのテンプレートを抽出することができます。本論文では、パラメータチューニングを行わないオンラインデータドリブン型ログ解析器を初めて提案する。SwissLogは、ログテンプレートにインデックスを付与する代わりに、双方向エンコーダ表現(BERT) [19]によってテンプレート中の意味情報をエンコードし、新しく入力されるテンプレートに対して頑健にするとともに、高次元の埋め込みに投影して時間情報を追加的に考慮します。次に、SwissLogはログデータの固定パターンを学習するために、注意型双方向長期短期記憶(Attn-based Bi-LSTM) を採用し、[[Attention機構]]はわずかな乱れにも頑健である。オンラインでは、SwissLogは受信したログからID間の関係をインスタンス化し、ストリーミングでログを解析する。セマンティック情報と時間情報は連結され、異常検知モデルに供給される。異常が検出されると、SwissLogはアラームを発生させ、異常の特定プロセスを開始します。最後に、SwissLogはヒューリスティックアルゴリズムを利用して異常を特定し、異常のあるインスタンスやエンティティを細かい粒度でリポートします。 本論文の主な貢献は以下の4点です。 - 本稿では,オンライン辞書を用いた新しいログ解析手法を提案する.従来の手法と比較して、パラメータチューニングが不要であり、有効性、頑健性、汎用性に優れている。 - 本手法では、ログの意味的情報と時間的情報の両方を導入し、ログの逐次的な異常や潜在的な性能問題を含む様々な種類の異常の検出を行う。潜在的な性能問題については、これまでログ解析でほとんど研究されていない。 - 我々は、インスタンスレベルで異常を局所化するヒューリスティックアルゴリズムを設計する。 - Hadoopの実データを収集し、SwissLogを適用して異常の検出と特定を行う。さらに、実データと合成データでSwissLogを評価する。その結果、SwissLogの有効性と頑健性が証明された。SwissLog 1のソースコードも公開し、再現可能な研究を行っています。