以下に、本発明にかかる異常検知方法、異常検知プログラムおよび異常検知装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
[システム構成]
最初に、実施例1に係る異常検知装置を用いて異常の検知を行うシステムの一例を説明する。図1は、異常の検知を行うシステム構成の一例を説明する図である。図1に示すように、システム10は、サーバ装置11と、異常検知装置12と有する。サーバ装置11と異常検知装置12は、ネットワーク13を介して通信可能に接続され、各種の情報を交換することが可能とされている。かかるネットワーク13の一態様としては、有線または無線を問わず、携帯電話などの移動体通信、インターネット(Internet)、LAN(Local Area Network)やVPN(Virtual Private Network)などの任意の種類の通信網を採用できる。
サーバ装置11は、所定のシステムが動作する装置である。例えば、サーバ装置11は、企業やデータセンタに配置され、基幹システムの提供や所定のサービスを提供するサーバコンピュータである。図1の例では、サーバ装置11を1つとした場合を例示したが、これに限定されず、サーバ装置11は任意の数とすることができる。例えば、システム10は、複数のサーバ装置11によりクラウドサービスを提供するクラウドシステムであってもよい。
異常検知装置12は、サーバ装置11の異常の発生を検知する装置である。異常検知装置12は、例えば、パーソナルコンピュータやサーバコンピュータなどのコンピュータなどである。異常検知装置12は、1台のコンピュータとして実装してもよく、また、複数台のコンピュータによる実装してもよい。また、異常検知装置12は、システム10を管理する管理端末やサーバ装置11が兼ねてもよい。なお、本実施例では、異常検知装置12を1台のコンピュータとして設けた場合を例として説明する。
[異常検知装置の構成]
次に、実施例1に係る異常検知装置12の構成について説明する。図2は、異常検知装置の機能的な構成の一例を示す図である。図2に示すように、異常検知装置12は、通信I/F(インタフェース)部20と、記憶部21と、制御部22とを有する。
通信I/F部20は、他の装置との間で通信制御を行うインタフェースである。通信I/F部20としては、LANカードなどのネットワークインタフェースカードを採用できる。
通信I/F部20は、ネットワーク13を介して他の装置と各種情報を送受信する。例えば、通信I/F部20は、サーバ装置11と各種情報を送受信が可能とされており、サーバ装置11からサーバ装置11の状態を示す各種情報を受信する。
記憶部21は、各種のデータを記憶する記憶デバイスである。例えば、記憶部21は、ハードディスク、SSD(Solid State Drive)、光ディスクなどの記憶装置である。なお、記憶部21は、RAM(Random Access Memory)、フラッシュメモリ、NVSRAM(Non Volatile Static Random Access Memory)などのデータを書き換え可能な半導体メモリであってもよい。
記憶部21は、制御部22で実行されるOS(Operating System)や各種プログラムを記憶する。例えば、記憶部21は、後述する異常検知処理を実行するプログラムを含む各種のプログラムを記憶する。さらに、記憶部21は、制御部22で実行されるプログラムで用いられる各種データを記憶する。例えば、記憶部21は、第1待機セット30と、第1アクティブセット31と、第2待機セット32と、第2アクティブセット33とを記憶する。
第1アクティブセット31および第2アクティブセット33は、異常の検知の対象となる期間のデータを保持するためのデータ領域である。例えば、本実施例では、後述する所定の第1期間での検出値の最小値を求める。また、本実施例では、第1期間の最小値よりも大きいとの判定結果が所定の第2期間の間連続して得られたかを判定する。この第1期間は、検出値の取得時から所定時間間隔をあけており、例えば、5分〜30分の期間とする。この第1期間は、検出値の取得時を含む期間であってもよい。また、第2期間は、検出値の取得時を含む期間としており、例えば、0分〜30分の期間とする。第1アクティブセット31には、第1期間の検出値などのデータを記憶させる。また、第2アクティブセット33には、第1期間の最小値よりも大きいとの判定結果が第2期間の間連続したかを判定するためのデータを記憶させる。
第1待機セット30および第2待機セット32は、異常の検知の対象となる期間の前のデータを保持するためのデータ領域である。
図3は、第1待機セットのデータ構成の一例を示す図である。図3に示すように、第1待機セット30は、「時刻」、「検出値」の各項目を有する。時刻の項目は、検出値が取得された時刻情報を記憶する領域である。検出値の項目は、取得された検出値を記憶する領域である。第1待機セット30には、検出値が取得される毎に、取得された検出値が時刻情報と共に格納される。
図4は、第1アクティブセットのデータ構成の一例を示す図である。図4に示すように、第1アクティブセット31は、上述の第1待機セット30と同様の構成とされており、「時刻」、「検出値」の各項目を有する。第1アクティブセット31には、第1待機セット30に格納された検出値のうち、時刻が第1期間内となった検出値が時刻情報と共に格納される。
図5は、第2待機セットのデータ構成の一例を示す図である。図5に示すように、第2待機セット32は、「時刻」、「検出値」、「フラグ」の各項目を有する。時刻の項目は、検出値が取得された時刻情報を記憶する領域である。検出値の項目は、取得された検出値を記憶する領域である。フラグの項目は、第1期間のデータの状態を判定した結果を示したフラグを記憶する領域である。第2待機セット32には、検出値が取得される毎に、取得された検出値が時刻情報、フラグと共に格納される。
図6は、第2アクティブセットのデータ構成の一例を示す図である。図6に示すように、第2アクティブセット33は、上述の第2待機セット32と同様の構成とされており、「時刻」、「検出値」、「フラグ」の各項目を有する。第2アクティブセット33には、第2待機セット32に格納された検出値のうち、時刻が第2期間内となった検出値が時刻情報、フラグと共に格納される。
第1待機セット30、第1アクティブセット31、第2待機セット32および第2アクティブセット33のデータの具体例については、後述する。
図2に戻り、制御部22は、異常検知装置12を制御するデバイスである。制御部22としては、CPU、MPU(Micro Processing Unit)等の電子回路や、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)等の集積回路を採用できる。制御部22は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部22は、各種のプログラムが動作することにより各種の処理部として機能する。例えば、制御部22は、取得部40と、判定部41と、出力部42とを有する。
取得部40は、各種の取得を行う。例えば、取得部40は、監視対象の状態を示す検出値を取得する。この検出値は、サーバ装置11が周期的に検出を行って異常検知装置12へ送信してもよい。また、検出値は、取得部40が周期的にサーバ装置11に対して送信を要求し、サーバ装置11が要求に応じて検出を行って異常検知装置12へ送信してもよい。本実施例では、監視対象をサーバ装置11とし、監視対象の状態を示す検出値として、サーバ装置11のメモリの使用率を取得する。
取得部40は、取得された検出値を時刻情報と共に第1待機セット30に格納する。また、取得部40は、第1待機セット30に格納された検出値のうち、第1期間内となった検出値を第1アクティブセット31に移動させる。また、判定部41は、第1アクティブセット31に格納された検出値のうち、第1期間外となった検出値を第1アクティブセット31から削除する。
判定部41は、各種の判定を行う。例えば、判定部41は、取得部40により取得した検出値ごとに、当該検出値が、取得時よりも前である第1期間での検出値の最小値よりも大きいかを判定する。例えば、判定部41は、取得部40により検出値が取得される毎に、第1アクティブセット31に記憶された検出値内での検出値の最小値を特定する。この第1アクティブセット31に記憶された検出値の最小値は、第1期間での検出値の最小値である。判定部41は、検出値が取得される毎に、取得された検出値を、第1期間の検出値の最小値と比較して、取得された検出値が第1期間の検出値の最小値よりも大きいかを判定する。この判定は、検出値が第1期間の検出値の最小値よりも、しきい値以上大きいかを判定するようにしてもよい。本実施例では、判定部41は、検出値が、第1期間での検出値の最小値と、所定のしきい値を加算した値よりも大きいかを判定する。しきい値は、検出値に大局的に異常な上昇傾向があるかを判定する値であり、ゼロ以上の値に設定する。
判定部41は、取得された検出値を、判定結果および時刻情報と共に第2待機セット32に格納する。また、判定部41は、判定結果として、最新の検出値が第1期間での検出値の最小値よりも大きいか否かを示すフラグを第2待機セット32に格納する。
出力部42は、各種の出力を行う。例えば、出力部42は、第2期間における判定の結果に基づいて、異常が発生したか否かの検知を行う。そして、出力部42は、異常が発生したことが検知された場合、アラートを出力する。例えば、出力部42は、検出値が第1期間での検出値の最小値よりも大きいとの判定の結果が第2期間の間連続して得られた場合、異常が発生しているものとして、アラートを出力する。例えば、出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。また、出力部42は、第2アクティブセット33に格納された検出値のうち、第2期間外となった検出値を第2アクティブセット33から削除する。そして、出力部42は、第2アクティブセット33に記憶された検出値が全て直近の第1期間の最小値よりも大きいと判定されたものである場合、アラートを出力する。
ここで、具体例を用いて説明する。本実施例では、監視対象をサーバ装置11とし、検出値としてサーバ装置11のメモリの使用率を取得し、異常として、サーバ装置11のメモリリークの発生を検知する場合を例に説明する。また、本実施例では、第1期間を2分〜4分前の期間とし、第2期間を0分〜6分前の期間とする。また、本実施例では、検出値が第1期間の最小値よりしきい値「5」以上大きい状態が第2期間連続した場合にメモリリークが発生したと検知する場合を例に説明する。図7A〜図7Lは、メモリリークの発生を検知する際の流れの一例を示す図である。図7A〜図7Lには、サーバ装置11で1分毎に検出されるメモリの使用率と、第1待機セット30、第1アクティブセット31、第2待機セット32および第2アクティブセット33に格納されるデータの変化の一例が示されている。なお、図7A〜図7Lの例では、時刻の経過を把握しやくするため、時刻を図7Aの時点を基準(00:00)として示している。また、図7A〜図7Lの例では、入力として、各時刻で取得されるメモリ使用率が示されている。
図7Aに示すように、取得部40は、時刻「00:00」にサーバ装置11のメモリ使用率「11」が取得されると、時刻「00:00」およびメモリ使用率「11」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、第1アクティブセット31にはデータの格納は行わない。第1アクティブセット31にデータが格納されていないため、第1アクティブセット31に格納されたメモリ使用率の最小値は、未定である。取得されたメモリ使用率「11」は、第1アクティブセット31に格納されたメモリ使用率の最小値と、しきい値「5」とを加算した値より大きくはない。このため、判定部41は、フラグ「0」として、時刻「00:00」、メモリ使用率「11」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Aの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:00」、メモリ使用率「11」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Bに示すように、取得部40は、時刻「00:01」にサーバ装置11のメモリ使用率「83」が取得されると、時刻「00:01」およびメモリ使用率「83」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、第1アクティブセット31にはデータの格納は行わない。第1アクティブセット31にデータが格納されていないため、第1アクティブセット31に格納されたメモリ使用率の最小値は、未定である。取得されたメモリ使用率「83」は、第1アクティブセット31に格納されたメモリ使用率の最小値と、しきい値「5」とを加算した値より大きくはない。このため、判定部41は、フラグ「0」として、時刻「00:01」、メモリ使用率「83」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Bの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:01」、メモリ使用率「83」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Cに示すように、取得部40は、時刻「00:02」にサーバ装置11のメモリ使用率「14」が取得されると、時刻「00:02」およびメモリ使用率「14」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:00」、検出値「11」を第1アクティブセット31に格納する。取得されたメモリ使用率「14」は、第1アクティブセット31に格納されたメモリ使用率の最小値「11」と、しきい値「5」とを加算した値より大きくはない。このため、判定部41は、フラグ「0」として、時刻「00:02」、メモリ使用率「14」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Cの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:02」、メモリ使用率「14」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Dに示すように、取得部40は、時刻「00:03」にサーバ装置11のメモリ使用率「77」が取得されると、時刻「00:03」およびメモリ使用率「77」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:01」、検出値「83」を第1アクティブセット31に格納する。取得されたメモリ使用率「77」は、第1アクティブセット31に格納されたメモリ使用率の最小値「11」と、しきい値「5」とを加算した値より大きい。このため、判定部41は、フラグ「1」として、時刻「00:03」、メモリ使用率「77」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Dの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:03」、メモリ使用率「77」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Eに示すように、取得部40は、時刻「00:04」にサーバ装置11のメモリ使用率「15」が取得されると、時刻「00:04」およびメモリ使用率「15」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:02」、検出値「14」を第1アクティブセット31に格納する。取得されたメモリ使用率「15」は、第1アクティブセット31に格納されたメモリ使用率の最小値「11」と、しきい値「5」とを加算した値より大きくはない。このため、判定部41は、フラグ「0」として、時刻「00:04」、メモリ使用率「15」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Eの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:04」、メモリ使用率「15」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Fに示すように、取得部40は、時刻「00:05」にサーバ装置11のメモリ使用率「53」が取得されると、時刻「00:05」およびメモリ使用率「53」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:03」、検出値「77」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:00」のデータが第1期間外となったため、第1アクティブセット31から削除する。取得されたメモリ使用率「53」は、第1アクティブセット31に格納されたメモリ使用率の最小値「14」と、しきい値「5」とを加算した値より大きい。このため、判定部41は、フラグ「1」として、時刻「00:05」、メモリ使用率「53」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Fの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:05」、メモリ使用率「53」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Gに示すように、取得部40は、時刻「00:06」にサーバ装置11のメモリ使用率「42」が取得されると、時刻「00:06」およびメモリ使用率「42」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:04」、検出値「15」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:01」のデータが第1期間外となったため、第1アクティブセット31から削除する。取得されたメモリ使用率「42」は、第1アクティブセット31に格納されたメモリ使用率の最小値「14」と、しきい値「5」とを加算した値より大きい。このため、判定部41は、フラグ「1」として、時刻「00:06」、メモリ使用率「42」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Gの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:06」、メモリ使用率「42」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Hに示すように、取得部40は、時刻「00:07」にサーバ装置11のメモリ使用率「70」が取得されると、時刻「00:07」およびメモリ使用率「70」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:05」、検出値「53」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:02」のデータが第1期間外となったため、第1アクティブセット31から削除する。取得されたメモリ使用率「70」は、第1アクティブセット31に格納されたメモリ使用率の最小値「15」と、しきい値「5」とを加算した値より大きい。このため、判定部41は、フラグ「1」として、時刻「00:07」、メモリ使用率「70」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Hの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:07」、メモリ使用率「70」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Iに示すように、取得部40は、時刻「00:08」にサーバ装置11のメモリ使用率「21」が取得されると、時刻「00:08」およびメモリ使用率「21」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:06」、検出値「42」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:03」のデータが第1期間外となったため、第1アクティブセット31から削除する。取得されたメモリ使用率「21」は、第1アクティブセット31に格納されたメモリ使用率の最小値「15」と、しきい値「5」とを加算した値より大きい。このため、判定部41は、フラグ「1」として、時刻「00:08」、メモリ使用率「21」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Iの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:08」、メモリ使用率「21」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Jに示すように、取得部40は、時刻「00:09」にサーバ装置11のメモリ使用率「83」が取得されると、時刻「00:09」およびメモリ使用率「83」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:07」、検出値「70」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:04」のデータが第1期間外となったため、第1アクティブセット31から削除する。取得されたメモリ使用率「83」は、第1アクティブセット31に格納されたメモリ使用率の最小値「42」と、しきい値「5」とを加算した値より大きい。このため、判定部41は、フラグ「1」として、時刻「00:09」、メモリ使用率「83」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Jの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:09」、メモリ使用率「83」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Kに示すように、取得部40は、時刻「00:10」にサーバ装置11のメモリ使用率「47」が取得されると、時刻「00:10」およびメモリ使用率「47」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:08」、検出値「21」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:05」のデータが第1期間外となったため、第1アクティブセット31から削除する。取得されたメモリ使用率「47」は、第1アクティブセット31に格納されたメモリ使用率の最小値「21」と、しきい値「5」とを加算した値より大きい。このため、判定部41は、フラグ「1」として、時刻「00:10」、メモリ使用率「47」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Kの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:10」、メモリ使用率「47」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
次に、図7Lに示すように、取得部40は、時刻「00:11」にサーバ装置11のメモリ使用率「93」が取得されると、時刻「00:11」およびメモリ使用率「93」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:09」、検出値「83」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:06」のデータが第1期間外となったため、第1アクティブセット31から削除する。取得されたメモリ使用率「93」は、第1アクティブセット31に格納されたメモリ使用率の最小値「21」と、しきい値「5」とを加算した値より大きい。このため、判定部41は、フラグ「1」として、時刻「00:11」、メモリ使用率「93」を第2待機セット32に格納する。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図7Lの例では、第2期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:11」、メモリ使用率「93」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
ここで、図7Lに示す第2アクティブセット33に格納された第2の期間の各データは、全てフラグが1となっている。この図7Lに示す状態は、取得された検出値が第1期間での検出値の最小値よりも大きいとの判定の結果が第2期間の間連続して得られた状態である。出力部42は、第2アクティブセット33に記憶された各データのフラグが全て「1」である場合、アラートを出力する。
例えば、サーバ装置11では、メモリリークが発生している場合、処理に応じてメモリ使用率が変化するが、メモリの記憶領域を全て解放できないため、メモリ使用率の最小値が徐々に増加する。
図8は、メモリリークが発生している場合のメモリ使用率の変化の一例を示す図である。図8に示すように、メモリ使用率は、増加と減少を繰り返すが大局的には増加する。このような場合、例えば、メモリ使用率が一定のしきい値以上をとなった場合に異常が発生したと検知すると、異常の発生の検知が遅くなる場合がある。
一方、メモリリークが発生している場合、メモリの記憶領域を全て解放できないため、メモリ使用率は、増加と減少を繰り返すものの、大局的には増加する。そこで、異常検知装置12は、周期的にサーバ装置11のメモリ使用率を取得する。そして、異常検知装置12は、取得された検出値が、取得時よりも前の第1期間での検出値の最小値よりも大きいとの判定の結果が第2期間の間連続して得られた場合、メモリリークが発生していると検知して、アラートを出力する。図9は、メモリリークが発生している場合のメモリ使用率の変化の他の一例を示す図である。図9の例では、取得されたメモリ使用率が、当該メモリ使用率の取得時よりも前の第1期間の最小値より増加している部分にフラグ「1」を表示させている。このように、フラグ「1」の期間が第2期間連続した場合、アラートを出力することにより、異常の発生を早期に検知できる。
[処理の流れ]
本実施例に係る異常検知装置12が異常を検知する異常検知処理の流れについて説明する。図10は、異常検知処理の手順の一例を示すフローチャートである。この異常検知処理は、所定のタイミング、例えば、サーバ装置11から検出値を取得したタイミングで実行される。
図10に示すように、取得部40は、サーバ装置11から検出値を取得すると、取得された検出値を時刻情報と共に第1待機セット30に格納する(S10)。取得部40は、第1待機セット30に格納された検出値のうち、第1期間内となった検出値を第1アクティブセット31に追加する(S11)。取得部40は、第1待機セット30に格納された検出値のうち、第1期間内となったデータを第1待機セット30から削除する(S12)。
判定部41は、第1アクティブセット31に記憶された検出値内での検出値の最小値を特定する(S13)。判定部41は、取得された検出値が、最小値としきい値を加算した値もより大きいかを判定する(S14)。検出値が加算した値よりも大きい場合(S14肯定)、フラグに「1(ON)」をセットする(S15)。一方、検出値が加算した値もより大きくはない場合(S14否定)、フラグに「0(OFF)」をセットする(S16)。
判定部41は、取得された検出値、時刻情報、フラグを第2待機セット32に格納する(S17)。出力部42は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる(S18)。また、出力部42は、第2アクティブセット33に格納された検出値のうち、第2期間外となった検出値を第2アクティブセット33から削除する(S19)。そして、出力部42は、第2アクティブセット33に記憶された検出値のフラグが全て「1」となっているか判定する(S20)。フラグが全て「1」となっている場合(S20肯定)、出力部42は、アラートを出力し(S21)、処理を終了する。一方、フラグが全て「1」となっていない場合(S20否定)、処理を終了する。
[効果]
上述してきたように、本実施例に係る異常検知装置12は、監視対象の状態を示す検出値を取得する。異常検知装置12は、取得した検出値ごとに、当該検出値が、取得時よりも前である特定期間(第1期間)での検出値の最小値よりも大きいかを判定する。異常検知装置12は、検出値が特定期間での検出値の最小値よりも大きいとの判定結果が所定時間(第2期間)以上にわたり連続して得られた場合、アラートを出力する。これにより、異常検知装置12は、異常の発生を早期に検出できる。
また、本実施例に係る異常検知装置12は、検出値をメモリの使用率とする。これにより、異常検知装置12は、メモリリークの発生を早期に検出できる。
ここで、実施例1に係る異常検知装置12は、検出値が、取得時よりも前である特定期間での検出値の最小値よりも大きいかを判定する場合について説明したが、これに限定されない。例えば、実施例1に係る異常検知装置12は、取得した検出値ごとに、当該検出値が、取得時よりも前である特定期間での検出値の最大値よりも小さいかを判定する。そして、実施例1に係る異常検知装置12は、検出値が特定期間での検出値の最大値よりも小さいとの判定結果が所定時間以上にわたり連続して得られた場合、アラートを出力してもよい。この場合、本実施例に係る異常検知装置12は、検出値の最大値が減少する傾向がある異常を早期に検出できる。このように、第1期間での検出値の最大値の変化から異常を検知可能な検出値としては、例えば、メモリの空き率などが挙げられる。例えば、メモリリークが発生するとメモリの空き率が減少する傾向がある。このため、メモリの空き率が減少する傾向を検出することにより、メモリリークの発生を検知できる。
次に、実施例2について説明する。実施例2にかかるシステム10の構成は、図1に示した実施例1の構成と同様であるため、説明を省略する。
[異常検知装置の構成]
実施例2に係る異常検知装置の機能的な構成を説明する。図11は、異常検知装置の機能的な構成の一例を示す図である。なお、図2に示した実施例1に係る異常検知装置12と同一部分については同一の符号を付し、主に異なる部分について説明する。図11に示すように、異常検知装置12の記憶部23は、第3待機セット34と、第3アクティブセット35とをさらに記憶する。
第3アクティブセット35は、異常の検知の対象となる期間のデータを保持するためのデータ領域である。例えば、本実施例では、第2期間において、取得された検出値が第1期間での最大値よりも大きいとの判定の結果が少なくとも1回得られるかを判定する。そして、本実施例では、第2期間において、取得された検出値が第1期間での最大値よりも大きいとの判定の結果が少なくとも1回得られる期間が所定の第3期間連続して得られた場合、アラートを出力する。この第1期間は、検出値の取得時から所定時間間隔をあけており、例えば、5分〜30分の期間とする。また、第2期間は、検出値の取得時を含む期間としており、例えば、0分〜30分の期間とする。また、第3期間は、検出値の取得時を含む期間としており、例えば、0分〜30分の期間とする。第3アクティブセット35には、第2期間において、取得された検出値が第1期間での最大値よりも大きいとの判定の結果が少なくとも1回得られる期間が第3期間連続したかを判定するためのデータを記憶させる。
第3待機セット34は、異常の検知の対象となる期間の前のデータを保持するためのデータ領域である。
図12は、第3待機セットのデータ構成の一例を示す図である。図12に示すように、第3待機セット34は、「時刻」、「検出値」、「フラグ」、「連続フラグ」の各項目を有する。時刻の項目は、検出値が取得された時刻情報を記憶する領域である。検出値の項目は、取得された検出値を記憶する領域である。フラグの項目は、第1期間のデータの状態を判定した結果を示したフラグを記憶する領域である。連続フラグの項目は、第2期間のデータの状態を判定した結果を示したフラグを記憶する領域である。第3待機セット34には、検出値が取得される毎に、取得された検出値が時刻情報、フラグ、連続フラグと共に格納される。
図13は、第3アクティブセットのデータ構成の一例を示す図である。図13に示すように、第3アクティブセット35は、上述の第3待機セット34と同様の構成とされており、「時刻」、「検出値」、「フラグ」、「連続フラグ」の各項目を有する。第3アクティブセット35には、第3待機セット34に格納された検出値のうち、時刻が第3期間内となった検出値が時刻情報、フラグ、連続フラグと共に格納される。
また、図11に示すように、異常検知装置12の制御部22は、第1判定部43と、第2判定部44を有する。
第1判定部43は、取得された検出値に対して、各種の判定を行う。例えば、第1判定部43は、実施例1の判定部41と同様に、取得部40により取得した検出値ごとに、当該検出値が、取得時よりも前である第1期間での検出値の最大値よりも大きいかを判定する。例えば、判定部41は、取得部40により検出値が取得される毎に、第1アクティブセット31に記憶された検出値内での検出値の最大値を特定する。この第1アクティブセット31に記憶された検出値の最大値は、第1期間での検出値の最大値である。判定部41は、検出値が取得される毎に、取得された検出値を第1期間の検出値の最大値と比較して、取得された検出値が第1期間の検出値の最大値よりも大きいかを判定する。
第1判定部43は、取得された検出値を時刻情報と共に第2待機セット32に格納する。また、第1判定部43は、判定結果として、最新の検出値が第1期間での検出値の最大値よりも大きいか否かを示すフラグを第2待機セット32に格納する。
第2判定部44は、第1判定部43の判定の結果を用いて、各種の判定を行う。例えば、第2判定部44は、第2期間において、取得された検出値が第1期間での最大値よりも大きいとの判定の結果が少なくとも1回得られるかを判定する。例えば、第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。また、第2判定部44は、第2アクティブセット33に格納された検出値のうち、第2期間外となった検出値を第2アクティブセット33から削除する。そして、第2判定部44は、取得部40により検出値が取得される毎に、第2アクティブセット33に記憶された検出値の何れかでフラグが1のものがあるか判定する。
第2判定部44は、取得された検出値、時刻情報、フラグを第3待機セット34に格納する。また、第2判定部44は、第2アクティブセット33に記憶された検出値の何れかでフラグが1のものがあるか否かを示す連続フラグを第3待機セット34に格納する。
出力部42は、第3期間における判定の結果に基づいて、異常が発生したか否かの検知を行う。そして、出力部42は、異常が発生したことが検知された場合、アラートを出力する。例えば、出力部42は、第2期間において、検出値が第1期間での最大値よりも大きいとの判定の結果が少なくとも1回得られるとの判定の結果が第3期間の間連続して得られた場合、異常が発生しているものとして、アラートを出力する。例えば、出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。また、出力部42は、第3アクティブセット35に格納された検出値のうち、第3期間外となった検出値を第3アクティブセット35から削除する。そして、出力部42は、取得部40により検出値が取得される毎に、第3アクティブセット35に記憶された検出値が全て、検出値が第1期間での最大値よりも大きいとの判定の結果が少なくとも1回得られると判定されたものである場合、アラートを出力する。
ここで、具体例を用いて説明する。本実施例では、監視対象をサーバ装置11とし、検出値としてサーバ装置11のCPUの利用率を取得し、異常として、サーバ装置11の異常の発生を検知する場合を例に説明する。また、本実施例では、第1期間を2分〜4分前の期間とし、第2期間を0分〜3分前の期間とし、第3期間を0分〜6分前の期間とする。また、本実施例では、検出値が第1期間の最大値よりしきい値「5」以上大きい状態が第2期間連続した場合にCPUの異常が発生したと検知する場合を例に説明する。図14A〜図14Mは、CPUの異常の発生を検知する際の流れの一例を示す図である。図14A〜図14Mには、サーバ装置11で1分毎に検出されるCPUの利用率の一例が示されている。また、図14A〜図14Mには、第1待機セット30、第1アクティブセット31、第2待機セット32、第2アクティブセット33、第3待機セット34および第3アクティブセット35に格納されるデータの変化の一例が示されている。なお、図14A〜図14Mの例でも、時刻の経過を把握しやくするため、時刻を図14Aの時点を基準(00:00)として示している。また、図14A〜図14Mの例では、入力として、各時刻で取得されるCPUの利用率が示されている。
図14Aに示すように、取得部40は、時刻「00:00」にサーバ装置11のCPUの利用率「80」が取得されると、時刻「00:00」およびCPUの利用率「80」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、第1アクティブセット31にはデータの格納は行わない。第1アクティブセット31にデータが格納されていないため、第1アクティブセット31に格納されたCPUの利用率の最大値は、未定である。取得されたCPUの利用率「80」は、第1アクティブセット31に格納されたCPUの利用率の最大値と、しきい値「5」とを加算した値より大きくはない。このため、第1判定部43は、フラグ「0」として、時刻「00:00」、CPUの利用率「80」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Aの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:00」、CPUの利用率「80」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、何れのフラグも「0」である。このため、第2判定部44は、連続フラグ「0」として、時刻「00:00」、CPUの利用率「80」、フラグ「0」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Aの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:00」、CPUの利用率「80」、フラグ「0」、連続フラグ「0」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Bに示すように、取得部40は、時刻「00:01」にサーバ装置11のCPUの利用率「83」が取得されると、時刻「00:01」およびCPUの利用率「83」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、第1アクティブセット31にはデータの格納は行わない。第1アクティブセット31にデータが格納されていないため、第1アクティブセット31に格納されたCPUの利用率の最大値は、未定である。取得されたCPUの利用率「83」は、第1アクティブセット31に格納されたCPUの利用率の最大値と、しきい値「5」とを加算した値より大きくはない。このため、第1判定部43は、フラグ「0」として、時刻「00:01」、CPUの利用率「83」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Bの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:01」、CPUの利用率「83」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、何れのフラグも「0」である。このため、第2判定部44は、連続フラグ「0」として、時刻「00:01」、CPUの利用率「83」、フラグ「0」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Bの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:01」、CPUの利用率「83」、フラグ「0」、連続フラグ「0」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Cに示すように、取得部40は、時刻「00:02」にサーバ装置11のCPUの利用率「14」が取得されると、時刻「00:02」およびCPUの利用率「14」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:00」、検出値「80」を第1アクティブセット31に格納する。CPUの利用率「14」は、第1アクティブセット31に格納されたCPUの利用率の最大値「80」と、しきい値「5」とを加算した値より大きくはない。このため、第1判定部43は、フラグ「0」として、時刻「00:02」、CPUの利用率「14」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Cの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:02」、CPUの利用率「14」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、何れのフラグも「0」である。このため、第2判定部44は、連続フラグ「0」として、時刻「00:02」、CPUの利用率「14」、フラグ「0」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Cの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:02」、CPUの利用率「14」、フラグ「0」、連続フラグ「0」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Dに示すように、取得部40は、時刻「00:03」にサーバ装置11のCPUの利用率「38」が取得されると、時刻「00:03」およびCPUの利用率「38」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:01」、検出値「83」を第1アクティブセット31に格納する。CPUの利用率「38」は、第1アクティブセット31に格納されたCPUの利用率の最大値「83」と、しきい値「5」とを加算した値より大きくはない。このため、第1判定部43は、フラグ「0」として、時刻「00:03」、CPUの利用率「38」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Dの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:03」、CPUの利用率「38」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、何れのフラグも「0」である。このため、第2判定部44は、連続フラグ「0」として、時刻「00:03」、CPUの利用率「38」、フラグ「0」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Dの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:03」、CPUの利用率「38」、フラグ「0」、連続フラグ「0」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Eに示すように、取得部40は、時刻「00:04」にサーバ装置11のCPUの利用率「15」が取得されると、時刻「00:04」およびCPUの利用率「15」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:02」、検出値「14」を第1アクティブセット31に格納する。CPUの利用率「15」は、第1アクティブセット31に格納されたCPUの利用率の最大値「83」と、しきい値「5」とを加算した値より大きくはない。このため、第1判定部43は、フラグ「0」として、時刻「00:04」、CPUの利用率「15」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Eの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:04」、CPUの利用率「15」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、何れのフラグも「0」である。このため、第2判定部44は、連続フラグ「0」として、時刻「00:04」、CPUの利用率「15」、フラグ「0」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Eの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:04」、CPUの利用率「15」、フラグ「0」、連続フラグ「0」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Fに示すように、取得部40は、時刻「00:05」にサーバ装置11のCPUの利用率「53」が取得されると、時刻「00:05」およびCPUの利用率「53」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:03」、検出値「38」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:00」のデータが第1期間外となったため、第1アクティブセット31から削除する。CPUの利用率「53」は、第1アクティブセット31に格納されたCPUの利用率の最大値「83」と、しきい値「5」とを加算した値より大きくはない。このため、第1判定部43は、フラグ「0」として、時刻「00:05」、CPUの利用率「53」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Fの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:05」、CPUの利用率「53」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、何れのフラグも「0」である。このため、第2判定部44は、連続フラグ「0」として、時刻「00:05」、CPUの利用率「53」、フラグ「0」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Fの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:05」、CPUの利用率「53」、フラグ「0」、連続フラグ「0」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Gに示すように、取得部40は、時刻「00:06」にサーバ装置11のCPUの利用率「45」が取得されると、時刻「00:06」およびCPUの利用率「45」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:04」、検出値「15」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:01」のデータが第1期間外となったため、第1アクティブセット31から削除する。CPUの利用率「45」は、第1アクティブセット31に格納されたCPUの利用率の最大値「38」と、しきい値「5」とを加算した値より大きい。このため、第1判定部43は、フラグ「1」として、時刻「00:06」、CPUの利用率「45」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Gの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:06」、CPUの利用率「45」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、フラグ「1」を含む。このため、第2判定部44は、連続フラグ「1」として、時刻「00:06」、CPUの利用率「45」、フラグ「1」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Gの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:06」、CPUの利用率「45」、フラグ「1」、連続フラグ「1」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Hに示すように、取得部40は、時刻「00:07」にサーバ装置11のCPUの利用率「23」が取得されると、時刻「00:07」およびCPUの利用率「23」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:05」、検出値「53」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:02」のデータが第1期間外となったため、第1アクティブセット31から削除する。CPUの利用率「23」は、第1アクティブセット31に格納されたCPUの利用率の最大値「53」と、しきい値「5」とを加算した値より大きくはない。このため、第1判定部43は、フラグ「0」として、時刻「00:07」、CPUの利用率「23」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Hの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:07」、CPUの利用率「23」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、フラグ「1」を含む。このため、第2判定部44は、連続フラグ「1」として、時刻「00:07」、CPUの利用率「23」、フラグ「0」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Hの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:07」、CPUの利用率「23」、フラグ「0」、連続フラグ「1」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Iに示すように、取得部40は、時刻「00:08」にサーバ装置11のCPUの利用率「38」が取得されると、時刻「00:08」およびCPUの利用率「38」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:06」、検出値「45」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:03」のデータが第1期間外となったため、第1アクティブセット31から削除する。CPUの利用率「38」は、第1アクティブセット31に格納されたCPUの利用率の最大値「53」と、しきい値「5」とを加算した値より大きくはない。このため、第1判定部43は、フラグ「0」として、時刻「00:08」、CPUの利用率「38」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Iの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:08」、CPUの利用率「38」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、フラグ「1」を含む。このため、第2判定部44は、連続フラグ「1」として、時刻「00:08」、CPUの利用率「38」、フラグ「0」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Iの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:08」、CPUの利用率「38」、フラグ「0」、連続フラグ「1」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Jに示すように、取得部40は、時刻「00:09」にサーバ装置11のCPUの利用率「18」が取得されると、時刻「00:09」およびCPUの利用率「18」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:07」、検出値「23」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:04」のデータが第1期間外となったため、第1アクティブセット31から削除する。CPUの利用率「18」は、第1アクティブセット31に格納されたCPUの利用率の最大値「53」と、しきい値「5」とを加算した値より大きくはない。このため、第1判定部43は、フラグ「0」として、時刻「00:09」、CPUの利用率「18」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Jの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:09」、CPUの利用率「18」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、フラグ「1」を含む。このため、第2判定部44は、連続フラグ「1」として、時刻「00:09」、CPUの利用率「18」、フラグ「0」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Jの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:09」、CPUの利用率「18」、フラグ「0」、連続フラグ「1」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Kに示すように、取得部40は、時刻「00:10」にサーバ装置11のCPUの利用率「85」が取得されると、時刻「00:10」およびCPUの利用率「85」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:08」、検出値「38」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:05」のデータが第1期間外となったため、第1アクティブセット31から削除する。CPUの利用率「85」は、第1アクティブセット31に格納されたCPUの利用率の最大値「45」と、しきい値「5」とを加算した値より大きい。このため、第1判定部43は、フラグ「1」として、CPUの利用率「85」および時刻「00:10」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Kの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:10」、CPUの利用率「85」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、フラグ「1」を含む。このため、第2判定部44は、連続フラグ「1」として、時刻「00:10」、CPUの利用率「85」、フラグ「1」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Jの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:10」、CPUの利用率「85」、フラグ「1」、連続フラグ「1」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Lに示すように、取得部40は、時刻「00:11」にサーバ装置11のCPUの利用率「41」が取得されると、時刻「00:11」およびCPUの利用率「41」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:09」、検出値「18」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:06」のデータが第1期間外となったため、第1アクティブセット31から削除する。CPUの利用率「41」は、第1アクティブセット31に格納されたCPUの利用率の最大値「38」と、しきい値「5」とを加算した値より大きくはない。このため、第1判定部43は、フラグ「0」として、時刻「00:11」、CPUの利用率「41」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Lの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:11」、CPUの利用率「41」、フラグ「0」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、フラグ「1」を含む。このため、第2判定部44は、連続フラグ「1」として、時刻「00:11」、CPUの利用率「41」、フラグ「0」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Lの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:11」、CPUの利用率「41」、フラグ「0」、連続フラグ「1」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
次に、図14Mに示すように、取得部40は、時刻「00:12」にサーバ装置11のCPUの利用率「96」が取得されると、時刻「00:12」およびCPUの利用率「96」を第1待機セット30に格納する。第1期間は、2分〜4分前の期間である。このため、取得部40は、時刻「00:10」、検出値「85」を第1アクティブセット31に格納する。また、取得部40は、時刻「00:07」のデータが第1期間外となったため、第1アクティブセット31から削除する。CPUの利用率「96」は、第1アクティブセット31に格納されたCPUの利用率の最大値「85」と、しきい値「5」とを加算した値より大きい。このため、第1判定部43は、フラグ「1」として、時刻「00:12」、CPUの利用率「96」を第2待機セット32に格納する。
第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる。図14Mの例では、第2期間内が0分〜3分前の期間であるため、移動の結果、時刻「00:12」、CPUの利用率「96」、フラグ「1」が第2アクティブセット33に格納され、第2待機セット32が空となっている。
第2アクティブセット33のデータは、フラグ「1」を含む。このため、第2判定部44は、連続フラグ「1」として、時刻「00:12」、CPUの利用率「96」、フラグ「1」を第3待機セット34に格納する。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる。図14Mの例では、第3期間内が0分〜6分前の期間であるため、移動の結果、時刻「00:12」、CPUの利用率「96」、フラグ「1」、連続フラグ「1」が第3アクティブセット35に格納され、第3待機セット34が空となっている。
ここで、図14Mに示す第3アクティブセット35に格納された第3の期間の各データは、全て連続フラグが1となっている。この図14Mに示す状態は、取得された検出値が第1期間での最大値よりも大きいとの判定の結果が少なくとも1回得られる期間が第3期間連続した状態である。出力部42は、第3アクティブセット35に記憶された各データの連続フラグが全て「1」である場合、アラートを出力する。
例えば、サーバ装置11では、プロセスを起動するとCPUの利用率が上がり、停止するとCPUの利用率が下がるため、CPUの利用率が瞬間的に大きく増加し、すぐに元に戻る性質を持つ。
図15は、CPUの利用率の変化の一例を示す図である。図15に示すように、CPUの利用率は、瞬間的に大きく増加し、すぐに元に戻る性質を持つ。例えば、システム10が、サーバ装置11のCPUの利用率が一定以上に上がらないことを保証するシステムである場合、CPUの利用率が一定のしきい値以上をとなった場合に異常が発生したと検知すると、異常の発生の検知が遅くなる場合がある。例えば、CPUの利用率が一定のしきい値以上となったことの検知が、直前あるいは事後のタイミングとなってしまう。
そこで、異常検知装置12は、周期的にサーバ装置11のCPUの利用率を取得する。異常検知装置12は、取得したCPUの利用率が、取得時よりも前の第1期間でのCPUの利用率の最大値よりも大きいかを判定する。そして、異常検知装置12は、第2期間において、検出値が第1期間でのCPUの利用率の最大値よりも大きいとの判定の結果が少なくとも1回得られる状態が第3期間の間連続して得られた場合、アラートを出力する。図16は、CPUの利用率の変化の他の一例を示す図である。図16の例では、CPUの利用率が、CPUの利用率の取得時よりも前の第1期間の最大値より増加している部分にフラグ「1」を表示させている。また、図16の例では、CPUの利用率が、第1期間でのCPUの利用率の最大値よりも大きいとの判定の結果が少なくとも1回得られる部分に連続フラグ「1」を表示させている。このように、連続フラグ「1」の期間が第3期間連続した場合、アラートを出力することにより、CPUの利用率のように増加、減少の激しい、パルス的なデータの最大値の増加傾向を検知できるため、異常の発生を早期に検知できる。また、本実施例では、第1期間を検出値の取得時から所定時間間隔をあけており、取得時から所定時間を含まない前の期間としている。このように第1期間を取得時から間隔をあけた期間とすることで、直近の検出値の影響を抑制して大局的に増加しているかを検出できる。
[処理の流れ]
次に、実施例2に係る異常検知処理の手順を説明する。図17は、異常検知処理の手順の一例を示すフローチャートである。この異常検知処理は、図10に示した実施例1に係る異常検知処理と同様に、所定のタイミング、例えば、サーバ装置11から検出値を取得したタイミングで実行される。なお、図10に示した実施例1に係る異常検知処理と同一部分については同一の符号を付して説明する。
図17に示すように、取得部40は、サーバ装置11から検出値を取得すると、取得された検出値を時刻情報と共に第1待機セット30に格納する(S10)。取得部40は、第1待機セット30に格納された検出値のうち、第1期間内となった検出値を第1アクティブセット31に追加する(S11)。取得部40は、第1待機セット30に格納された検出値のうち、第1期間内となったデータを第1待機セット30から削除する(S12)。
第1判定部43は、第1アクティブセット31に記憶された検出値内での検出値の最大値を特定する(S13)。第1判定部43は、取得された検出値が、最大値としきい値を加算した値よりも大きいかを判定する(S14)。検出値が加算した値よりも大きい場合(S14肯定)、フラグに「1(ON)」をセットする(S15)。一方、検出値が加算した値もより大きくはない場合(S14否定)、フラグに「0(OFF)」をセットする(S16)。
第1判定部43は、取得された検出値、時刻情報、フラグを第2待機セット32に格納する(S17)。第2判定部44は、第2待機セット32に格納された検出値のうち、第2期間内となった検出値を第2アクティブセット33に移動させる(S18)。また、第2判定部44は、第2アクティブセット33に格納された検出値のうち、第2期間外となった検出値を第2アクティブセット33から削除する(S19)。そして、第2判定部44は、第2アクティブセット33に記憶された検出値の何れかのフラグが「1」となっているか判定する(S30)。何れかのフラグが「1」となっている場合(S30肯定)、連続フラグに「1(ON)」をセットする(S31)。一方、何れかのフラグも「1」となっていない場合(S30否定)、連続フラグに「0(OFF)」をセットする(S32)。
第2判定部44は、取得された検出値、時刻情報、フラグ、連続フラグを第3待機セット34に格納する(S33)。出力部42は、第3待機セット34に格納された検出値のうち、第3期間内となった検出値を第3アクティブセット35に移動させる(S34)。また、出力部42は、第3アクティブセット35に格納された検出値のうち、第3期間外となった検出値を第3アクティブセット35から削除する(S35)。そして、出力部42は、第3アクティブセット35に記憶された検出値の連続フラグが全て「1」となっているか判定する(S36)。連続フラグが全て「1」となっている場合(S36肯定)、出力部42は、アラートを出力し(S37)、処理を終了する。一方、連続フラグが全て「1」となっていない場合(S36否定)、処理を終了する。
[効果]
上述してきたように、本実施例に係る異常検知装置12は、監視対象の状態を示す検出値を取得する。異常検知装置12は、取得した検出値ごとに、当該検出値が、取得時よりも前である特定期間(第1期間)での検出値の最大値よりも大きいかを判定する。異常検知装置12は、検出値が特定期間での最大値よりも大きいとの判定結果が第1の所定時間(第2期間)以内に少なくとも1回得られるかを判定する。異常検知装置12は、検出値が特定期間での最大値よりも大きいとの判定結果が第1の所定時間以内に少なくとも1回得られるとの判定結果が、第2の所定時間(第3期間)以上にわたり連続して得られた場合、アラートを出力する。これにより、異常検知装置12は、検出値の変動が激しい場合でも、検出値の最大値が増加する傾向がある異常を早期に検出できる。
また、本実施例に係る異常検知装置12は、最大値より大きい判定に閾値を用いており、また、第1期間を取得時から所定時間を含まない前の期間としている。第1期間として直近期間を含む場合には、最大値として直前の検出値が選ばれることがあり、大局的には増加傾向があっても、直前の検出値との差が小さいために、検出値と最大値との差が閾値を超えなくなることがある。一方、本実施例に係る異常検知装置12は、第1期間を取得時から所定時間を含まない前の期間としたことにより、第1期間の最大値として直近の値が選択されなくなるため、大局的な増加傾向を捉えることができる。
また、本実施例に係る異常検知装置12は、検出値をCPUの利用率とする。これにより、異常検知装置12は、CPUの利用率に上昇傾向が発生する異常を早期に検出できる。
ここで、実施例2に係る異常検知装置12は、検出値が特定期間での最大値よりも大きいとの判定結果が第1の所定時間以内に少なくとも1回得られるかを判定する場合について、説明したが、これに限定されない。例えば、実施例1に係る異常検知装置12は、取得した検出値ごとに、当該検出値が、取得時よりも前である特定期間での検出値の最小値よりも小さいかを判定する。異常検知装置12は、検出値が特定期間での最小値よりも小さいとの判定結果が第1の所定時間以内に少なくとも1回得られるかを判定する。そして、異常検知装置12は、検出値が特定期間での最小値よりも小さいとの判定結果が前記第1の所定時間以内に少なくとも1回得られるとの判定結果が、第2の所定時間以上にわたり連続して得られた場合、アラートを出力してもよい。この場合、本実施例に係る異常検知装置12は、検出値の変動が激しい場合でも、検出値の最小値が減少する傾向がある異常を早期に検出できる。このように、第1期間での検出値の最小値の変化から異常を検知可能な検出値としては、例えば、複数のサーバで負荷分散する際のアクセス数や処理数などが挙げられる。例えば、複数のサーバで負荷を均等に分散させる場合、アクセス数や処理数は、ほぼ均等なるが、各サーバのアクセス数や処理数を比較することにより、サーバの異常や負荷分散処理の異常の発生を検知できる。