爲岡啓¹,ª）植田良—²,¢）松下誠¹,¢）井上克郎¹,d)概要：Webサーバ群に起きうる障害を未然に発見することは，システムの可用性向上の観点などから重要である．これまで，Webシステムから収集したメトリクス群に対して解析技術を用いて処理することによって，管理者の知識や経験に依存せず障害検知を行う手法が提案されている．しかし，そのような手法は多くのパラメータを適切に設定する必要があるため、障害検知を高い精度で行うのは困難であった．本研究では，ベイジアンネットワークとクラスタリングという，機械学習を用いた2つの解析技術を組み合わせて，メトリクス群を効率的に処理することにより，障害検知を行う手法を考案する．その手法を適用し，効率良く障害検知が行えていることを，評価実験によって示す.
1.まえがき
社会基盤としてのWebシステムは，不特定多数のクライアントを抱える重要な役割を果たしており，安定した長期稼働が要求される.しかし，今後システムの複雑化，クライアントの増加によって，システムに障害が起こる可能性は高まっていくことが予想される．たとえば，障害の原因として，Webサーバへの過負荷や，セキュリティの脆弱性を突いた攻撃などが挙げられる[1]. このような障害は時間，場面を問わず起こりうるものであるから，その障害をいかに早く発見し，対処するかということが，Webシステムの長期安定稼働に必要だと考える[2].現状のWebシステムにおいては，システム管理者がサーバマシンのメモリやCPUなど少数の計測メトリクスの推移を確認して，一定時間内にシステムの不具合が発生するかどうかを判断する[3]. システム管理者の扱うデータ量は，システム規模の増大に伴い今後増加の一途を辿ると考えられる．不具合が発生するとき，個々のメトリクスが非常に複雑に連携している．したがって，膨大なデータログを人間が処理し、不具合が起こるかどうかという結論を導き出すことは困難であり，それは人間の処理限界を超えている[4].また，人間が限られた時間内に確認できる一部のデータに基づいた判断は推測の域を出ず，経験者の缶に頼るところが大きい．さらに，手動で行うことは時間と労力を要し，かつ常に可能であるとは限らない[5].近年，収集した大量のデータを，機械学習等の統計処理を施すことで，複雑に絡み合ったメトリクス間の関連をモデル化し，システムの異常判定，ひいては，異常の根本原因究明に活用する手法が提案されている．しかし，そのような手法の多くは，膨大な学習データを必要とするか，多くのパラメータを適切に設定する必要があり，高精度，高効率で障害検知を行うことは困難である.そこで本研究では，ベイジアンネットワークとクラスタリングという，機械学習を用いた2つの解析技術を組み合わせて，膨大なデータ量を削減しつつ，メトリクス群を効率的に処理することにより，障害検知を行う手法を考案した．その手法を適用し，効率良く障害検知が行えていることを示すために検証実験を行った.その結果,より少量の学習データを利用して，全データを学習した場合と同等の効果が得られることを確認した.以降2章では，本研究の背景と，機械学習を用いた既存のデータ解析技術，また，その問題点について説明する．３章では，我々の提案手法について説明する．４章では，我々の提案手法が有効であることを示す検証実験について説明する．５章では，検証実験の結果についての考察を行う．６ 1章では関連研究について述べ，７章ではまとめと今後の課題について述べる.
2.研究の背景
これまでに提案されている，機械学習による障害検知に用いられる技術として，ベイジアンネットワークとクラスタリングという，2つのデータ解析技術を紹介する.
2.1ベイジアンネットワーク
ベイジアンネットワーク(以下BN)は，個々の事象の因果関係を条件付き確率で表すモデルで，観測対象の過去の状態を学習し，観測対象がある状態Sにある時の注目事象E(例：応答時間が3秒以上となる)の発生確率PEを算出する事ができる[6].ただし，学習データに含まれる過去の状態と同じとみなされる既知の状態での注目事象の発生確率は計算できるが，学習データに含まれない未知の状態下での注目事象の発生確率は正しく計算できない．注目事象の発生確率を正しく計算するためには学習データの量を増やすことが効果的である[3][7]. しかし，データ量が増えると学習処理にかかる時間が増大し，実用的な時間で完了しなくなるという課題がある．学習データに含まれる観測項目数を一定にした場合，計測回数に応じて学習時間が長くなる[8].
2.2クラスタリング
クラスタリング(以下CL)は，観測対象の過去の状態をグルーピングし，いくつかのクラスタに分割する方法のひとつである[9]. 教師データが存在しない場合は，個々のクラスタに対する意味付け，例えば正常時のクラスタかどうかという判定は，当該クラスタに含まれる観測値から人間が行う.入力(学習)データとして正常時のデータのみ与え，最近傍クラスタからの距離が閾値を越える観測値を異常と判定する診断方法が知られているが，正常範囲の一部のみが学習データに含まれる場合，正常であるにもかかわらず異常と判定してしまう可能性がある．このため，異常データを含まず，かつ正常範囲内でなるべく広い範囲を含む入力データが必要となる．この要件が十分に満たされないと，検知漏れや誤報を引き起こす可能性が高くなる[10].
2.3 既存手法の問題点
BN，CLを含め，機械学習を活用する方法の多くは，期待する効果を得るために適切に学習データを選定しなければならない，という共通の課題がある．学習データは，効果があり，かつそのデータ量が少なければ少ないほど効率的である．現在は，学習パラメータの調整と合わせて，学習データの選定を人間が試行錯誤で行う事で，この課題に対処している[7][11][12][13][14].
3.提案手法
3.1提案手法の発想
Webシステムの運用中のほとんどの時間は安定した正常状態の範囲内にとどまり，ごく稀にこの正常状態からの逸脱が発生することが知られている．BNを用いた障害検知では，既知の状況下での注目事象の発生確率を計算する.したがって，このとき必要となる学習データとして必要なのは，この逸脱区間のものである．すなわち，Webシステム運用中において，BNが組み入れるべき学習データ部分は殆どない.この事実に着目し，我々は，より少量でありながら，多種の状態を含む学習データを選定する方法を考案する。方法を考案するにあたり，BNの学習データに同じ状態が繰り返し出現する回数を減らしつつ，異なる状態を多数含めることができれば，より少ないデータ量で学習した場合であっても，全データで学習した場合と同等の学習効果を得る事ができると考えた.また，現在の学習データに含まれていない状態を検知するには，BNと同じ学習データをCLに入力データとして与え，現在の計測値と最近傍クラスタとの距離を計算することで実現できると考えた.以上により，BNとCLを効果的に組み合わせることによって，膨大なデータの中から自動的に学習データを選定することができるのではないかと予想した.
3.2 提案手法の手順
提案する手法の手順は以下のとおりである(図1).
手順1
CLに正常時データとして初期データを与えてモデルを生成する.手順2 Webシステムから学習用データを取得する.手順3学習用データをいくつかの区間として分割した上で,全学習データをモデルに入力し，CLの診断結果をもとに，閾値を超える適切な連続区間を選定する.手順4選定した連続区間の学習データを利用してBNモデルを生成し，障害に対してその発生確率を算出する.手順３における選定によって削減されるデータは，正常時の状態であり，正常時には同じ状態が繰り返し出現していると考えられるため，BNモデルに及ぼす影響は少ないと考える．よって，手順４における出力結果は，全学習データを利用した場合との強い相関が見られると考える.
3.3検証方法
我々の提案手法が期待した結果を導けるか確認するために，検証実験を行う．その手順は以下のとおりである(図2).手順1 Webシステムから取得した学習用データを，いくつかの区間に分割する.手順2それらの区間を基にして，連続区間のパターンを作成する．このパターンの中には，我々が提案手法において，CLで選定した学習データも含まれる．例えば，3つの区間に対しては区間1, 2, 3それぞれのみと，区間1-2，区間2-3，区間1-3(全学習データ)の6パターンがある．我々の提案手法において，CLが選定した区間が区間1-2であったとき，それはこの6パターンに含まれる.
手順３
全てのパターンについて，学習データとしてBNモデルを生成し、診断データに対して障害発生確率を算出する.手順4それらの障害発生確率の精度について優劣を決定し,学習データの順位付けを行う．優劣の決定方法については，次節にて説明する．一般的に，学習データの量は多ければ多いほど，注目事象の発生確率は正しく計算されるため，より多くの区間数を学習データとして組み入れたパターンが高順位となるはずである．我々が提案手法を用いて選定した学習データのみを用いて学習した場合の結果が高順位であるならば，より少ないデータ量であっても全データで学習した場合と同等の学習効果を得られる，と考えられる.
3.4 問題の設定
3.4.1  障害の定義大規模システムにおける障害のひとつとして，その性能图2  検証手順劣化が挙げられることが多く，クライアントのリクエストに対するWebサーバの応答時間は，性能劣化と強い因果関係を持つ.ゆえに我々は，BNが出力する障害発生確率の時間変化と，その時間変化する区間における平均応答時間との相関係数を計測することによって，学習データについての優劣の比較を行うこととした. 3.4.2 相関係数平均応答時間と確率の時間変化との相関係数COR(0 ≤ COR ≤ 1)は以下の式で与えられる.
この時，相関係数CORの値が大きければ大きいほど，その学習データは優れていると判断する. 3.4.3  CLモデルの閾値設定予備実験としていくつかの初期データを用い実験を行った結果，CLモデルの算出距離が500を超えるとき，顕著に学習データとの差異を検出している，すなわち，異常を検出していることがわかった．そこで，本研究では，CLモデルの算出距離500を閾値とし、この閾値を超えた区間のみを，BNの学習データとして用いることとする.
4.検証実験
ある一定の区間における，正常，異常を含めたあらゆるパターンの学習データについて，CLを利用して選定した学習データが，他のパターンに対して優れているということを検証する.そのための実験環境，方法について説明する.
4.1実験環境
実装環境は，クライアント，ロードバランサ，Webサーバ，データベースの4つのコンポーネントで構成する. Webサーバは，一般的なWebシステムには複数存在することを鑑み2台，その他のコンポーネントは，それぞれ1台の仮想計算機に対して実装する．以下に各システムの役割について説明する. 4.1.1クライアントWebサーバにリクエストを送信し，その結果を受信する．クライアント用のアプリケーションとして，Apache JMeter[16]を用いる.  Apache JMeterは，クライアント-サーバシステムのパフォーマンス測定および負荷テストを行うJavaアプリケーションである.  Webページを指定して，アクセスクライアント数，間隔，ループ回数等を設定することによって，クライアントからサーバへのアクセスを擬似的につくりだすことができる.
4.1.2   ロードバランサ
クライアントから送られたリクエストをWebサーバへと中継する．複数のWebサーバの状態をモニタリングして，リクエストによる負荷を分散させることができる．ロードバランサの実装ツールとしては，Apacheのmod_proxy_balancer[17]を用いる. mod_proxy_balancerは，Apacheが提供する負荷分散に利用するモジュールであり、クライアントからのアクセスを複数のサーバに分散することができる．本研究では，2台のWebサーバに対して，均等に負荷分散を行っている.
4.1.3 Webサーバ
ロードバランサから受け取ったクライアントからの要求を，データベースを用いて処理し，その結果を返す．サーブレットコンテナとしてはApache Tomcat[18]，サーバアプリケーションとしてはiBatis JPetStore[19]を利用する. Apache Tomcatとは，Java ServletやJavaServer Pagesを実行するためのサープレットコンテナであり，これを利用することによって，サーバ上でHTMLなどのWebページを動的に生成するJavaサープレットを動作させることができる．また，JPetStoreとは，Javaサープレットを利用してサーバ上で動作するアプリケーションである．データベースの情報を基に架空のペットストアをWebページとして表示することができる. 4.1.4データベースWebサーバから受け取った要求を基にデータの検索，抽出を行い，その結果をWebサーバへと返す．データベースシステムとしては，MySQLを利用する．MySQLとは， Oracle[20]が開発するリレーショナルデータベースを管理，運用するためのアプリケーションである．本研究ではJPetStoreのデータを登録し，Webサーバからアクセスすることによって，データベースサーバを実装する.各アプリケーション，ツールをシステムに反映した図3を以下に示す.本実験では4台の仮想計算機を利用した．そのうち3台については，CPU 1コア，メモリ1GB，HDD 20GB， 1Gbpsネットワークとし，Webサーバ，ロードバランサとした．データベースよう計算機については，CPU 2コア，メモリ 4GB，HDD 110GB，1Gbpsネットワークとした. OSは全計算機において，Linux(CentOS 6.4)を採用した.各仮想計算機にはCPU/メモリ/ネットワーク/Diskの利用状況データを10秒間隔で収集するための監視エージェント(collectd[21])が組み込まれており，観測データを取得することができる．クライアントにおいては，あらかじめ与えたシナリオ(例：データベース上の商品を検索→ 1商品をカートに入れる→チェックアウト)と負荷パターンに応じて，ユーザの挙動を模擬するリクエストを発生させる.収集データの一覧を表1に示す．本実験では，ロードバランサで表1における1から3までと5の4項目， 2台のWebサーバそれぞれで1から4までの合計8項目，データベースサーバで1(2コア分)と，2, 3, 4,の合計5項目，計17項目について，システム監視の際よく利用されるメトリクスを収集した.

4.2実験方法
Webサーバ上で稼働するJPetStoreへ，クライアントからの擬似的なバックグラウンドトラフィックを与えながら，システムの異常状態を模擬する負荷を，Webサーバに与える.  Apache JMeterを用いて，クライアントからサーバへ継続的にリクエストを発生させた状態で，システムの異常状態を模擬するためにstressコマンド[22]にて負荷を与える.学習データ,診断データいずれも,以下の図４,表２のようなパターンの負荷を与えたものを収集する．また，学習区間1-7を，5分毎の区切りとして，図4のように定める． 1回の実験は，35分単位で行う．図4のような負荷に対して収集した学習用，診断用のデータに対して，実験用に作成したツールを適用する．学習データを入力すると，BN，CLそれぞれのモデルを生成し，そのモデルに診断用データを入力することによって，
隣者の発生する確率や，最近傍クラスタからの距離を算出することができる．ツールによるモデル生成プロセスを図5に示す.モデル生成プロセス(図5)について説明する．監査対象システムに対して，クライアントからのバックグラウンドトラフィックを継続した状態で，stressによる負荷を与える．それによって収集した学習用メトリクスを基に，BN, CLのモデルを生成する．生成したCLモデルに学習用データを入力することによって，データの選定を行うことができる.また，学習データを基に生成したBN，CLモデルに，診断用メトリクスを入力することによって，診断区間における異常発生確率，距離を算出することが出来る.ツールの実装に際して, BN用の統計解析環境R用ライプラリbnlearn[8]，CL用のR標準ライブラリのk-means[23]を用いた. BNについては，予備実験の結果，最大応答時間が3秒を超えた場合に，システムに障害が起こっていると判断することとした．従って，観測データに対し，最大応答時間が3秒を超える確率を逐次診断し出力する.また、学習用データには７つの区間があるため、それらの連続区間のパターン総数は28である．これら全てのパターンに対してBNでの障害発生確率を算出し，平均応答時間との相関係数を取る. CLについては，初期データとして，クライアントからのリクエストのみがトラフィックとして存在する区間１だけを学習区間として組み入れることで，正常時と異常時との最近傍クラスタとの距離の差を顕著にする.
4.3実験結果
まず，図4のように負荷をかけた時の，診断用データにおけるリクエスト数，平均，最大応答時間の時間変化を図6に示す.グラフの○点が10秒間のリクエストの最大応答時間(左軸：sec)，△点が同10秒間の平均応答時間(左軸：sec)，＋点が同10秒間の処理リクエスト数(右軸： request/sec)，横軸は経過時間(秒)を表す．グラフタイトルのMA=5はグラフ上の点が隣接5データの移動平均値である事を表す. システム全体に最大負荷のかかる区間4を中心として，区間2-6に最大応答時間の大きな増加が見られる.以下，提案手法について，手順に沿って実験結果の例を示す.提案手法における手順1-3について，学習区間を区間1のみとした時のBN，CLにおける学習データの診断結果を図7に示す. グラフの○点がBNによる最大応答時間が3秒を超える確率P(左軸)，△点がCLによる最近傍クラスタからの距離D(右軸)，横軸は経過時間(sec)を表す。正常時のみを学習データとして組み入れているため，BNモデルは確率として0を継続出力している．図7において，区間3-6はCLモデルの閾値500を超えているため，この区間をCLが選定した区間とする.次に，提案手法における手順４について，区間３-６を学習データとして利用してBNモデルを生成し，診断データを入力した結果を図8に示す．各軸，値の見方については図７と同様である.異常時を学習データとして組み入れたため，BNモデルの出力確率は図6における応答時間の変化に対応して変化している．BNモデルの出力確率と平均応答時間との相関係数を計測したところ，COR=0.88となった．
5.考察
5.1 相関係数に基づく優劣付け
前節の手順と同じく，連続区間の28パターン全てに対してそれぞれの学習モデルに基づいて，BNの算出確率と平均応答時間との相関係数を計測した．それらを値の高い順に並べた表３を示す.一般的には，学習データの量は多ければ多いほど，注目事象の発生確率は正しく計算されるため，区間数４の学習データの順位は，より区間数の多い学習データの数が6つ
であることから，7位以下となるはずである．しかし，提案手法を用いた学習データは6位となったため，少ないデータ量で，学習データとしてより高い効果を発揮すると言える.
5.2全学習データとの診断比較
区間3-6を用いた時のBNの出力確率と，区間1-7全てを学習データとした時のBNの出力確率の相関係数を取り，同等の効果をあげているかを検証する.区間1-7全てを学習データとした，BN，CLの診断結果を図9に示す。各軸，値の見方については図7，図8と同様である. BNによるそれぞれの算出確率の時間変化について，相関係数を算出したところ，COR=0.993と，高い相関値を見せた．区間数が減っても同等の結果が得られたということで，提案手法に対して検証することができた.
関連研究
6.
Edward Stehleらは[11]にてConvex-hull(凸包[24])を活用したソフトウェア障害診断，原因推定技術を提案した.この方法では，事前に単独で発生する障害時のデータを学習させる必要があるため、未知の障害への対応は困難であると考えられる．また，同氏らは[12]にて，Convex-hullを活用したソフトウェア障害検知技術を発表した．学部のWebサイトへの9週間分のアクセスログから3週間分をランダム抽出し、1週間分を学習用に，別の1週間分をモデル精度の確認用に，残りの1週間分をバックグラウンド負荷生成用に活用，あらかじめ障害を埋め込んだhttpサーバに対して，リクエストを送信する実験で他のエンクロージャ形成法(Chi-Square/Mahalanobis/ Hyper-rectangle)と比較し、誤検知率が高いものの，提案手法が唯一全8種の障苦を検知できる事を確認した．埋め込んだ障害はバグコード(無限ループ，無限再綿，メモリリーク)，大量ログ出力によるDisk資源枯渇，脆弱性への攻撃(Spambotであるトロイの木馬，DoS攻撃)である．この方法は学習データの削減，選定を行っていない. Ira Cohenらは[13]にて，我々の提案手法と同類のTree- Augmented Bayesian Network[32]を活用して，様々なメトリクス観測結果とシステムの状態を関連付ける技術を発表した．Java PetStoreに人工的なパターン(正弦波形)のバックグラウンド負荷(1000req/min)を与えつつ，ユーザの挙動を模擬するリクエストを処理させる実験にて評価を行った結果，注目する事象に関係の深いメトリクスを選択できること，管理者の経験に依らず，各メトリクスの適切な閾値を算出できること，注目事象の発生を予測できること，等を確認した．この方法では学習データの削減，選定は行っていない. Steve Zhangらは[29]にて，[13]の手法を拡張して，直近の区画の観測データから生成した新モデルが，当該区画の診断において，現行モデル集合内のどのモデルよりも良い診断結果を出した場合，この新モデルをモデル集合に追加する診断方法を提案した．この手法では複数のモデルの集合を管理するが，我々の手法では学習データの集合を管理する点で異なっている. Satoshi Iwataらは[25]にて，性能劣化の根本原因を推定する方法を発表した．処理時間でクラスタリングを行い，原因の判明している既知のインシデントと同じクラスタに属する新規インシデントは同じ原因で発生していると推定する。ネットオークションアプリケーションRUBiSと，Webページ間遷移を状態遷移確率表で指定してユーザの挙動を模擬するRUBiS client emulatorを活用して人工的なパターンでリクエストを生成して実験を行った．27種のリクエストに対する，各サーバでの処理時間の平均，中央，最大，最小をメトリクスとして活用して評価を行った. Thanh H. D. Nguyenらは[14]にて，システムの性能劣化原因の自動特定技術を発表した.この技術はまず，事前の性能テストで性能計測データと性能劣化原因のペアを複数収集し，これを教師データとする．次に，発生中の事象が教師データのどれと類似しているかを機械学習アルゴリズムにて同定することで事象の原因を推定する。学習データ量削減のためにControl Chartsを利用する.  Wekaで利用可能な17種の機械学習アルゴリズムにて，それぞれの６種の性能劣化原因の究明率を比較した結果，1原因あたり4つの学習データを準備することで，74-80%という高い精度で原因が究明できる事を確認した．これらの研究は，原因究明を目的としている点で我々と異なる.
7.まとめと今後の課題
計算機システムのCPU，メモリ，Disk，ネットワーク等の利用状況の観測値を基に，機械学習を活用してシステムの状態，特に性能異常の検知に寄与する，学習データの選定手法を考案し，検証実験によってその有効性を示した．オンライン販売システムを使い，提案手法で選定した学習データによる診断結果と，全データによる診断結果との相関を計測した結果，より少量のデータで全データ学習と同等の学習効果が得られることを確認した.今後の課題として，まず，実験パターンを増やすことが挙げられる．本実験では学習用データ，診断用データいずれも，システムに対して意図的にトラフィックを発生させ,負荷を与えることによって異常をつくりだしたが，実際の障害に対して，我々の提案手法が適用できるかどうか，検証する必要があると考える.また，CLでの正常，異常を判定する際の閾値の決定方法を考えること，また，時間変化に対する自動化手法が必要である．現状として，CLの閾値の決定や選定後のモデル生成，診断は人間が行なっているため，それらを状況や時間変化に対応して自動設定，自動診断が行えるような手法が必要である.謝辞 図1,図2中で利用した画像の一部は, Vector Freshを著作者とする図[26]を元に著者が修正を加えたものである。本研究は，日本学術振興会科研費基盤研究(S)(課題番号25220003)の助成を受けたものである.