(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-10
(45)【発行日】2024-01-18
(54)【発明の名称】情報処理装置、制御方法、プログラム
(51)【国際特許分類】
G06F 11/07 20060101AFI20240111BHJP
【FI】
G06F11/07 190
G06F11/07 178
G06F11/07 181
(21)【出願番号】P 2021185616
(22)【出願日】2021-11-15
【審査請求日】2022-08-01
(73)【特許権者】
【識別番号】390002761
【氏名又は名称】キヤノンマーケティングジャパン株式会社
(73)【特許権者】
【識別番号】592135203
【氏名又は名称】キヤノンITソリューションズ株式会社
(74)【代理人】
【識別番号】100189751
【氏名又は名称】木村 友輔
(72)【発明者】
【氏名】大崎 敦司
【審査官】北川 純次
(56)【参考文献】
【文献】特開2017-84270(JP,A)
【文献】国際公開第2019/202711(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 11/07
G06F 11/34
(57)【特許請求の範囲】
【請求項1】
対象の状態を変えるイベントを時系列に記録したログデータを取得する取得手段と、
前記取得手段により取得したログデータから、前記対象の状態を第2の状態から第1の状態に変える第1イベントと、当該対象の状態を第2の状態に変える第2イベントとを特定する特定手段と、
複数の対象に係る
一連のイベントであって、前記特定手段にて特定された前記対象に係る第1イベントと
当該対象に係る第2イベントとの対を含む一連のイベントを出力する出力手段と
を備えることを特徴とする情報処理装置。
【請求項2】
前記出力手段は、前記対象に係る第1イベントの数と当該対象に係る第2イベントの数が一致する一連のイベントを出力することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記出力されるイベントは、所定の条件を満たす複数の対象に係る第1イベントと第2イベントとの対を含む一連のイベントであることを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記所定の条件は、同一の装置に係る対象であることを
示す条件であることを特徴とする請求項3に記載の情報処理装置。
【請求項5】
前記対象において、第1の状態は非定常状態、第2の状態は定常状態であることを特徴とする請求項1~4のいずれか1項に記載の情報処理装置。
【請求項6】
前記特定手段は、前記対象
に係る対となるイベントについて、一方のイベントが発生してから他方のイベントが発生するまでの経過時間に基づいて第1イベントか第2イベントかを特定することを特徴とする請求項1~5のいずれか1項に記載の情報処理装置。
【請求項7】
前記出力手段により出力される一連のイベントのうち、含まれるイベントが同一または類似するかの判定に基づいて、基準となる一連のイベントを出力する基準出力手段を備えることを特徴とする請求項1~6のいずれか1項に記載の情報処理装置。
【請求項8】
前記出力手段により出力される一連のイベントと、前記基準出力手段により出力される基準となる一連のイベントとを比較した結果を出力する比較出力手段を備えることを特徴とする請求項7に記載の情報処理装置。
【請求項9】
取得手段が、対象の状態を変えるイベントを時系列に記録したログデータを取得する取得ステップと、
特定手段が、前記取得ステップで取得したログデータから、前記対象の状態を第2の状態から第1の状態に変える第1イベントと、当該対象の状態を第2の状態に変える第2イベントとを特定する特定ステップと、
出力手段が
、複数の対象に係る
一連のイベントであって、前記特定ステップで特定された前記対象に係る第1イベントと
当該対象に係る第2イベントとの対を含む一連のイベントを出力する出力ステップと
を備えることを特徴とする情報処理装置の制御方法。
【請求項10】
情報処理装置を、
対象の状態を変えるイベントを時系列に記録したログデータを取得する取得手段と、
前記取得手段により取得したログデータから、前記対象の状態を第2の状態から第1の状態に変える第1イベントと、当該対象の状態を第2の状態に変える第2イベントとを特定する特定手段と、
複数の対象に係る
一連のイベントであって、前記特定手段にて特定された前記対象に係る第1イベントと
当該対象に係る第2イベントとの対を含む一連のイベントを出力する出力手段
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、イベントを記録したログデータを解析する技術に関する。
【背景技術】
【0002】
近年、IoT機器から様々なイベントを収集できるようになってきたため、収集されたイベントログを分析することで運用に生かすことが望まれている。イベントを収集できるIoT機器が増えたため、イベントログは大量に集まるようになってきた。
【0003】
大量のイベントログを人手で分析するには非常にコストがかかるようになってきたため、イベントログの分析を自動化することが望まれている。
【0004】
IoT機器から発せられるイベントには、現在の温度や湿度などを定期的に発するイベントや、装置のメンテナンス時に装置を停止・運転再開する際に発する「停止」「運転」のような対になるイベントや、電源をON・OFFする際に「ON」「OFF」のような対になるイベントなどがある。
【0005】
特許文献1では、ログシーケンスを、一定時間で分割し、類似するシーケンスを特定し、「正常パターン」を自動的に抽出する手法を開示している。
【0006】
特許文献2では、開始点となるログと、終了点となるログを事前に定義しておくことにより、ログシーケンスを分割する手法を開示している。
【先行技術文献】
【特許文献】
【0007】
【文献】国際公開2015/045262号公報
【文献】特開2012-203522号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
一般的に、装置の保守点検は、週1回や月1回のように、間隔を空けて実施されることが多いため、保守点検に関連するログは、間隔を空けて、まとまって出力される。例えば、保守点検を行う場合、最初に装置の電源を切って、点検を行い、点検が終わると装置の電源を入れる。ただし、状況に応じて、点検の開始作業や終了作業が異なる場合がある。
【0009】
特許文献1では、単に一定時間でログシーケンスを分割するので、分割されたログシーケンスは意味のある部分シーケンスとはならない。
【0010】
特許文献2では、開始点となるログと終了点となるログが固定されるため、状況に応じて開始点となるログや終了点となるログが変わるようなケースでは適切に部分シーケンスを取得することはできない。
【0011】
本発明では、イベントを記録したログデータから一連のイベント群である特定シーケンスを適切に出力できる仕組みを提供することを目的とする。
【課題を解決するための手段】
【0012】
本発明は、対象の状態を変えるイベントを時系列に記録したログデータを取得する取得手段と、前記取得手段により取得したログデータから、前記対象の状態を第2の状態から第1の状態に変える第1イベントと、当該対象の状態を第2の状態に変える第2イベントとを特定する特定手段と、複数の対象に係る一連のイベントであって、前記特定手段にて特定された前記対象に係る第1イベントと当該対象に係る第2イベントとの対を含む一連のイベントを出力する出力手段とを備えることを特徴とする情報処理装置。
【発明の効果】
【0013】
本発明によれば、イベントを記録したログデータから一連のイベント群である特定シーケンスを適切に出力できる仕組みを提供することができる。
【図面の簡単な説明】
【0014】
【
図1】本発明の実施形態のログ分析装置の構成の一例を示したブロック図
【
図3】装置抽出条件記憶部116の一例を示すデータ構造図
【
図4】増減割当記憶部117の一例を示すデータ構造図
【
図5】部分シーケンス抽出部113で使用するデータ構造の例
【
図6】テンプレート抽出部114で使用する部分シーケンス間の距離を表すグラフの例
【
図7】テンプレート記憶部118の一例を示すデータ構造図
【
図8】部分シーケンス記憶部119の一例を示すデータ構造図
【
図10】差分記憶部120の一例を示すデータ構造図
【
図11】ログ分析装置のテンプレート作成時の処理方法の手順の一例を示したフローチャート
【
図13】ログ分析装置の差分検出時の処理方法の手順の一例を示したフローチャート
【
図14】S1103の処理手順の一例を示したフローチャート
【
図15】S1104の処理手順の一例を示したフローチャート
【
図17】S1105の処理手順の一例を示したフローチャート
【
図18】S1303の処理手順の一例を示したフローチャート
【発明を実施するための形態】
【0015】
以下、本発明の実施の形態を、図面を参照して詳細に説明する。
【0016】
図1は、本実施形態のログ分析装置の構成を示したブロック図である。
図1に示すように、ログ分析装置101は、ログデータ取得部110と、装置抽出部111と、増減判定部112と、部分シーケンス抽出部113と、テンプレート抽出部114と、差分検出部115と、装置抽出条件記憶部116と、増減割当記憶部117と、テンプレート記憶部118と、部分シーケンス記憶部119と、差分記憶部120とを備えて構成される。これらの機能は、コンピュータに所定のプログラムを実行させることによって具現化することが出来る。
【0017】
図2にログデータ102の一例を示す。IoT機器から発せられるログデータは、通常規格化されているため、TSV(Tab-Separated Values)のようなテキスト形式になっていることが多い。ログデータ102では、1行に、発生日時201、装置ID202、イベントID203、状態204、イベント名205の情報が記録されている。
【0018】
ログデータ取得部110は、例えば、IoT機器から時系列に発せられるログデータ102の入力を受け付け、それを取得する。ログデータ102は、例えば、ネットワークに接続されたIoT機器などからリアルタイムに取得しても良いし、記録媒体などに記録されたデータファイルからまとめて取得するようにしても良い。
【0019】
図3は、装置抽出条件記憶部116の構成を示したものである。装置抽出条件記憶部116は、ログデータから特定の装置のログだけを抽出するための条件を定義したものである。装置抽出条件記憶部116は、条件ID301、抽出条件302を有する。
【0020】
条件ID301は、装置抽出条件に付与する一意なIDである。抽出条件302は、ログデータ取得部110から特定の装置のログだけを抽出する条件式である。条件式の指定方法として、例えばSQLがある。レコード311の抽出条件302では、装置IDが「2」に一致するログをすべて抽出する。レコード312の抽出条件302では、装置IDが「2」に一致し、かつ、イベントIDが「1」に一致するログをすべて抽出する。
【0021】
装置抽出部111は、ログデータ取得部110による取得されたログデータから、指定した装置抽出条件のログデータだけを抽出する。例えば、抽出条件に「1」を指定して抽出を行うと、条件ID301が「1」に一致するレコード311を選択し、抽出条件302から、装置ID202が「2」に一致するログだけ抽出される。
【0022】
増減判定部112は、イベントごとに、通常時に取りうる状態(定常状態)と、まれに取りうる状態(非定常状態)とを状態204の値を用いて判定する。定常状態から非定常状態に変化する状態204の値に「+1」を割り当て、逆に、非定常状態から定常状態に変化する状態204の値に「-1」を割り当てる。判定方法は後述する。割り当てた結果を、増減割当記憶部117に保存する。
【0023】
例えば、ある装置は運転を継続している状態が通常の状態であり、保守点検時や非常時にしか停止しない場合、状態204が「停止」のレコードが「非定常状態」に変化するレコードとなり、状態204が「運転」のレコードが「定常状態」に変化するレコードとなる。一方、別の装置は運転を停止している状態が通常の状態である場合、状態204が「運転」のレコードが「非定常状態」に変化するレコードとなり、状態204が「停止」のレコードが「定常状態」に変化するレコードとなる。
図4は、増減割当記憶部117の構成を示したものである。増減割当記憶部117は、増減判定部112で判別した結果を保存する。増減割当記憶部117は、条件ID401、イベントID402、状態403、増減404を有する。
【0024】
条件ID401は、装置抽出部111実行時に指定した条件ID301の値を指定する。イベントID402は、装置ID202の値を指定する。状態403は、状態204の値を指定する。増減404は、「1」または「-1」を指定する。
【0025】
例えば、装置抽出部111で、条件ID301に「1」を指定し、増減判定部112で、レコード211が非定常状態と判定されたとき、レコード411のように登録、レコード214が定常状態と判定されたとき、レコード412のように登録する。
【0026】
部分シーケンス抽出部113は、装置抽出部111の出力を入力とし、増減割当記憶部117の情報を使って、部分シーケンスを抽出し、出力する。
【0027】
図5は、
図2のログデータを装置抽出部111で、条件ID301に「1」を指定して出力したものに、増減503と合計504の列を付与したものである。例えば、レコード511は、イベントID501の値が「5」、状態502の値が「運転」であるので、増減割当記憶部117のレコード411が対応する。レコード511の増減503には、レコード411の増減404の値を指定する。レコード511の合計504の値は、増減503の値を前レコードの合計504(前レコードがないので、0とする)に加算し、「1」を指定する。このように、合計504の値を計算する。なお、合計が「0」未満になる場合は、合計を「0」とする。
【0028】
対になるイベントが、「+1」、「-1」の順に出現し、出現回数が同じなら、必ず合計504の値が「0」になるレコード(例えば、レコード516)がある。合計504の値が「1」になるレコード(例えば、レコード511)から、「0」になるレコード(レコード516)までを部分シーケンスとして抽出する。
【0029】
抽出した部分シーケンスを配列として出力し、テンプレート抽出部114に渡す。
【0030】
テンプレート抽出部114は、部分シーケンス抽出部113の出力を入力とし、類似する部分シーケンスをグループ化することでテンプレートを抽出する。
【0031】
部分シーケンス抽出部113が出力した部分シーケンスの全ての組み合わせに対して類似度を計算する。類似度としては、例えば、レーベンシュタイン距離(シーケンス間の最小編集操作SES(Shortest Edit Script)、完全一致の場合は「0」)やF値(0から1の値、完全一致の場合は「1」)などを使用する。
図6は、部分シーケンスがS0~S4であるときの、類似度を計算した例である。部分シーケンスをノードとし、部分シーケンス間の類似度をエッジとした無向グラフとして表現している。この例では、類似度にレーベンシュタイン距離を採用している。部分シーケンス601と部分シーケンス602の類似度611は「0」を表している。同様に、部分シーケンス604と部分シーケンス605の類似度612は「2」を表している。類似度の高い部分シーケンスをグループ化すると、[S0,S1,S2]のグループ621と、[S3,S4]のグループ622に分けられる。グループ621は部分シーケンスが完全に一致するグループであり、グループ622は類似度の高い部分シーケンスのグループである。
【0032】
グループの中から、代表となる部分シーケンスを選び「テンプレート」とする。代表の選び方は、例えば、ランダムに選んでもよいし、グループの中から、シーケンス長が最小のものを選んでもよい。
【0033】
抽出したテンプレートを、テンプレート記憶部118に記録する。
【0034】
図7は、テンプレート記憶部118の構成を示したものである。テンプレート記憶部118は、テンプレート抽出部114で抽出したテンプレートを保持する。テンプレート記憶部118は、条件ID701、テンプレートID702、連番703、イベントID704、状態705、イベント名706を有する。
【0035】
条件ID701は、装置抽出部111実行時に指定した条件ID301の値を指定する。テンプレートID702は、テンプレートを区別するIDである。連番703は、テンプレート内でのイベントの出現順を表す。イベントID704は、装置ID202の値を指定する。状態705は、状態204の値を指定する。イベント名706は、イベント名205の値を指定する。
【0036】
例えば、
図5の部分シーケンスが、テンプレートとして抽出されたとき、
図7のように保存する。
【0037】
差分検出部115は、装置抽出部111の出力を入力とし、増減割当記憶部117の情報を使って、部分シーケンスを抽出する。抽出した部分シーケンスは、部分シーケンス記憶部119に保存する。さらに、各部分シーケンスとテンプレート記憶部118のテンプレートとを比較し差分を検出し、差分記憶部120に保存する。
図8は、保存した部分シーケンスの例である。
【0038】
部分シーケンスとテンプレートの差分を検出するにはいろいろな方法があるが、ここでは、レーベンシュタイン距離を計算する際の途中経過である最短編集操作SES(Shortest Edit Script)を使用する。
【0039】
SESは、あるシーケンスに対し、挿入・削除・置換の操作を行って別のシーケンスに一致させるために必要な編集手順の中で最短のものである。また、最短の編集手順の回数がレーベンシュタイン距離となる。
【0040】
図9は、差分検出の例である。表700のテンプレートID「1」が表902、表800の部分シーケンスID「2」が表901を表している。部分シーケンス901を編集して、テンプレート902に一致させるための編集手順を表している。レコード911、912は、テンプレート902には存在しないので「削除」し、レコード913はレコード923で「置換」する。レコード921、922は見やすくするために入れた空行なので、実際は無視する。この場合、3つの編集操作を行っているので、レーベンシュタイン距離は「3」となる。検出した差分情報を、差分記憶部120に保存する。
【0041】
図8は、部分シーケンス記憶部119の構成を示したものである。部分シーケンス記憶部119は、差分検出部115で抽出した部分シーケンスを保持する。条件ID801、部分シーケンスID802、連番803、発生日時804、イベントID805、状態806、イベント名807を有する。
【0042】
条件ID801は、装置抽出部111実行時に指定した条件ID301の値を指定する。部分シーケンスID802は、部分シーケンスを区別するIDである。連番803は、部分シーケンス内でのイベントの出現順を表す。発生日時804は、発生日時201の値を指定する。イベントID805は、装置ID202の値を指定する。状態806は、状態204の値を指定する。イベント名807は、イベント名205の値を指定する。
【0043】
図10は、差分記憶部120の構成を示したものである。差分記憶部120は、差分検出部115で検出した差分情報(編集手順)を保持する。差分記憶部120は、条件ID1001、部分シーケンスID1002、テンプレートID1003、操作順1004、操作1005、対象S1006、対象T1007を有する。
【0044】
条件ID1001は、装置抽出部111実行時に指定した条件ID301の値を指定する。部分シーケンスID1002は、部分シーケンスID802の値を指定する。テンプレートID1003は、テンプレートID702の値を指定する。操作順1004は、編集操作を実行する順番を指定する。操作1005は、「削除」「挿入」「置換」のいずれかを指定する。対象S1006は、編集操作を行う部分シーケンスの連番803の値を指定する。対象T1007は、編集操作を行うテンプレートの連番703の値を指定する。
【0045】
例えば、
図9のレコード911は、レコード1011に対応し、レコード912は、レコード1012に対応し、レコード913は、レコード1013に対応する。
【0046】
差分表示部103は、テンプレート記憶部118と部分シーケンス記憶部119と差分記憶部120の情報を使って、ログデータの中の通常とは異なる部分を視覚的に表示する。例えば、部分シーケンスは最初のイベントから最後のイベントまでの期間を持つので、スケジューラのように表示することができる。また、テンプレートと部分シーケンスの類似度によって、色分けして表示することもできる。
【0047】
図11は、本実施形態のログ分析装置によって実行されるテンプレート作成方法の手順を示したフローチャートである。はじめに、ログデータ取得部110は、ログデータを取得する(ステップS1101)。
【0048】
取得したログデータの一例を
図2に示す。ログデータ102は、IoT機器から送られてきたログを想定している。IoT機器には、例えば、発電機、給油ポンプ、照明などがある。
【0049】
次に、装置抽出部111は、指定された「条件ID」で、ログデータ102を抽出する。抽出されたレコードの配列を、「records」に代入する(ステップS1102)。「条件ID」には、装置抽出条件記憶部116に記録されている条件ID301の値を指定する。
【0050】
例えば、「条件ID」に「1」を指定した場合、レコード311の抽出条件302の値を使って抽出する。この例では、抽出条件302はSQL風に記述しているので、ログデータ102から「装置ID」が「2」のものだけを抽出する。したがって、ログデータ102から、レコード211、212、213、214、215、216が抽出される。
【0051】
「records」の例を
図12に示す。「records」は、発生日時1201、イベントID1202、状態1203、イベント名1204を有する。
【0052】
次に、増減判定部112は、「records」を解析して、イベントごとに通常時に取りうる状態204(定常状態)と、まれに取りうる状態204(非定常状態)とを判定し、増減割当記憶部117に保存する(ステップS1103)。S1103はS1401を呼び出している。S1103は引数「条件ID」、「records」を持つ。「条件ID」には、S1102に与えた値と同じ値を指定する。「records」には、S1102で抽出されたレコードの配列「records」と同じものを指定する。処理方法の詳細については、後に、
図14を用いて説明する。
【0053】
次に、部分シーケンスを抽出部113は、「records」を入力とし、増減割当記憶部117の情報を使って、部分シーケンスを抽出する。抽出された部分シーケンスの配列を「seqs」に代入する(ステップS1104)。S1104はS1501を呼び出している。S1104は引数「条件ID」、「records」を持つ。「条件ID」には、S1102に与えた値と同じ値を指定する。「records」には、S1102で抽出されたレコードの配列「records」と同じものを指定する。処理方法の詳細については、後に、
図15を用いて説明する。
【0054】
次に、テンプレート抽出部114は、「seqs」を入力とし、類似する部分シーケンスをグループ化することでテンプレートを抽出し、抽出されたテンプレートをテンプレート記憶部118に保存する(ステップS1105)。S1105はS1601を呼び出している。S1105は引数「条件ID」、「seqs」を持つ。「条件ID」には、S1102に与えた値と同じ値を指定する。「seqs」には、S1104で抽出された部分シーケンスの配列「seqs」と同じものを指定する。処理方法の詳細については、後に、
図17を用いて説明する。
【0055】
図13は、本実施形態のログ分析装置によって実行される差分検出方法の手順を示したフローチャートである。はじめに、ログデータ取得部110は、ログデータを取得する(ステップS1301)。
【0056】
S1301は、S1101と全く同じ処理である。
【0057】
次に、装置抽出部111は、指定された「条件ID」で、ログデータ102を抽出する。抽出されたレコードの配列を、「records」に代入する(ステップS1302)。S1302は、S1102と全く同じ処理である。
【0058】
次に、差分検出部115は、「records」を入力とし、増減割当記憶部117とテンプレート記憶部118の情報を使って差分を検出する(ステップS1303)。抽出した部分シーケンスを部分シーケンス記憶部119に、検出した差分を差分記憶部120に保存する。S1303はS1701を呼び出している。S1303は引数「条件ID」、「records」を持つ。「条件ID」には、S1302に与えた値と同じ値を指定する。「records」には、S1302で抽出されたレコードの配列「records」と同じものを指定する。処理方法の詳細については、後に、
図18を用いて説明する。
【0059】
図14は、増減判定部112の判定方法の手順を示した処理フローである。本フローチャートの呼び出し時に引数が必要である。引数「条件ID」には、装置抽出条件記憶部116の条件ID301の値を指定する。引数「records」には、ステップS1102の「records」を指定する。
【0060】
S1402では、「records」に含まれるすべてのイベントID1202を集めて、イベントID1202の配列として、「events」に代入する。「records」に
図12の配列が入っている場合、「events」には、配列[1,5,6]が代入される。
【0061】
S1403では、配列「events」の各要素を「ev」に代入し、すべての要素「ev」に対してS1409までの処理を実行する。例えば、「events」に配列[1,5,6]が入っている場合、配列の各要素に対してS1409までの処理を実行するため、合計3回ループすることになる。
【0062】
S1404では、「records」の中で、イベントID1202「ev」が取る状態1203を集めて、状態1203の配列を「states」に代入する。例えば、「ev」が「5」のとき、イベントID1202が「5」であるレコードは、レコード1211、1214、1217、1221となる。これらのレコードの状態1203の値を集めると、配列 [”運転”,”停止”]となり、この配列を「states」に代入する。
【0063】
S1405では、「records」の中で、イベントID1202「ev」の状態1203を維持している時間を集計する。例えば、「ev」が「5」のとき、状態1203が「運転」である時間は、レコード1211からレコード1214までの時間と、レコード1217からレコード1221までの時間とを、発生日時1201から計算し集計する。同様に、状態1203が「停止」である時間も集計する。
【0064】
配列statesに[”運転”,”停止”]が入っている場合、「states[0]」は「運転」、「states[1]」は「停止」と参照できる。状態1203が「states[0]」である時間をT0、状態1203が「states[1]」である時間をT1とするとき、配列「sums」に[T0,T1]を代入する。
【0065】
S1406では、「states[0]」と「states[1]」のどちらが非定常状態か判定する。状態1203を維持している時間が長い方を定常状態、短い方を非定常状態と定義する。「True」の場合は、S1407に進む。「False」の場合は、S1408に進む。
【0066】
S1407では、「sums[0]<sums[1]」が成り立つので、「states[0]」が非定常状態である。したがって、「states[0]」には「1」を割り当て、「states[1]」には「-1」を割り当てる。増減割当記憶部117に登録するために、以下の情報を指定してレコードを作成する。
【0067】
条件ID401に引数「条件ID」の値を指定、イベントID402に「ev」を指定、状態403に「states[0]」を指定、増減404に「1」を指定しレコードを登録する。
【0068】
さらに、条件ID401に引数「条件ID」の値を指定、イベントID402に「ev」を指定、状態403に「states[1]」を指定、増減404に「-1」を指定しレコードを登録する。
【0069】
例えば、「ev」が「5」のとき、レコード411、412を登録する。
【0070】
S1408では、「sums[0]<sums[1]」が成り立たないので、「states[1]」が非定常状態である。したがって、「states[0]」には「-1」を割り当て、「states[1]」には「1」を割り当てる。増減割当記憶部117に登録するために、以下の情報を指定してレコードを作成する。
【0071】
条件ID401に引数「条件ID」の値を指定、イベントID402に「ev」を指定、状態403に「states[0]」を指定、増減404に「-1」を指定しレコードを登録する。
【0072】
さらに、条件ID401に引数「条件ID」の値を指定、イベントID402に「ev」を指定、状態403に「states[1]」を指定、増減404に「1」を指定しレコードを登録する。
【0073】
図15は、部分シーケンス抽出部113の抽出方法の手順を示した処理フローである。本フローチャートの呼び出し時に引数が必要である。引数「条件ID」には、装置抽出条件記憶部116の条件ID301の値を指定する。引数「records」には、ステップS1102の「records」を指定する。
【0074】
例えば、引数「records」に
図12のレコード配列が入っている場合、S1520の時点で、「records」は、
図16のようになる。
【0075】
S1502では、変数を初期化する。「sum」に「0」を代入し、「states」に「{}」を代入する。「states」は出現した状態を管理するためのマップ(キーバリューストア)である。
【0076】
S1503では、配列「records」の各要素を「r」に代入し、すべての要素「r」に対してS1520までの処理を実行する。
【0077】
S1504では、ループの中で使用する変数を初期化する。「event_id」に「r.イベントID」を代入する。「event_id」には、レコード「r」のイベントID1202の値が代入される。また、「state」に「r.状態」を代入する。「state」には、レコード「r」の状態1203の値が代入される。
【0078】
S1505では、増減割当記憶部117からレコードを検索する。「条件ID」、「event_id」、「state」が、条件ID401、イベントID402、状態403に合致するレコードを取得する。取得したレコードの増減404の値を「sign」に代入する。さらに、レコード「r」の増減1605に「sign」を代入する。
【0079】
S1506では、「sum==0」であるか判定する。
【0080】
「True」の場合は、S1507に進む。「sum==0」の場合は、部分シーケンスの切り出しがまだ始まっていないことを表すため、S1507以降のステップで、部分シーケンス切り出しのための開始処理を行う。
【0081】
「False」の場合は、S1510に進む。「sum≠0」の場合は、部分シーケンスの切り出し中であることを表すため、S1510以降のステップで、部分シーケンスの切り出しを継続するか終了するかを判断する。
【0082】
S1507では、「sign>0」であるか判定する。
【0083】
「True」の場合は、S1508に進む。「sign>0」であるため、部分シーケンスの切り出しを正常に開始する。
【0084】
「False」の場合は、S1509に進む。部分シーケンスの切り出しが未開始のときに、「sign」が負のイベントは来てはならないため、エラー処理を行う。
【0085】
S1508では、部分シーケンスの切り出し処理を開始する。「sum」に「sum+sign」を代入し、レコード「r」の合計1606に「sum」を代入する。さらに、マップ「states」にキー「event_id」、値「state」を登録する。この「states」を使って、同じイベントが重複していないか(S1511)、イベントが正しく対になっているか(S1515)を判定する。レコード1611、1617がこのステップで変更するレコードである。
【0086】
S1509では、レコード「r」のエラー1607に”未登録”を代入する。「sum」が「0」のときに、「sign」が負のイベントが来ると、未登録エラーとなる。レコード1624が未登録エラーの例である。
【0087】
S1510では、「sign>0」であるか判定する。
【0088】
「True」の場合は、S1511に進む。部分シーケンスの切り出し中に「sign」が正のイベントが出現したことを表す。
【0089】
「False」の場合は、S1517に進む。部分シーケンスの切り出し中に、「sign」が負のイベントが出現したことを表す。
【0090】
S1511では、マップ「states」にキー「event_id」が登録されていないか判定する。
【0091】
「True」の場合は、S1512に進む。マップ「states」にキー「event_id」が登録されていないということは、「event_id」が正常に出現したことを表す。
【0092】
「False」の場合は、S1516に進む。マップ「states」に登録済の「event_id」が出現したため、エラーとして処理する。
【0093】
S1512では、マップ「states」にキー「event_id」、値「state」を登録する。
【0094】
S1513では、「sum」に「sum + sign」を代入し、レコード「r」の合計1606に「sum」を代入する。
【0095】
S1514では、「sum == 0」であるか判定する。
【0096】
「True」の場合は、S1515に進む。「sum==0」であるので、部分シーケンスの切り出しが正常に終了したことを表す。
「False」の場合は、S1520に進む。「sum≠0」であるので、部分シーケンスの切り出しが継続中であることを表す。
【0097】
S1515では、マップ「states」に「{}」を代入することで、マップを空にする。
【0098】
S1516では、レコード「r」のエラー1607に”重複”を代入する。「sign」が正のイベントで、マップ「states」に登録済のイベントが来た場合、重複エラーとなる。レコード1620が重複エラーの例である。
【0099】
S1517では、マップ「states」にキー「event_id」が登録されているか判定する。
【0100】
「True」の場合は、S1518に進む。マップ「states」にキー「event_id」が登録されているということは、対になる「sign」が正のイベントが出現済であることを表す。そのため、「sign」が負のイベントが正しく出現したことになる。
【0101】
「False」の場合は、S1519に進む。マップ「states」にキー「event_id」が登録されていないということは、対になる「sign」が正のイベントが出現していないことを表す。そのため、エラーとして処理する。
【0102】
S1518では、マップ「states」からキー「event_id」を削除する。
【0103】
S1519では、レコード「r」のエラー1607に”未登録”を代入する。「sign」が正のイベントで、マップ「states」に未登録のイベントが来た場合、未登録エラーとなる。
【0104】
S1521では、「records」を部分シーケンスに分割する。合計が「1」のレコードから、合計が「0」のレコードまでを部分シーケンス(レコードの配列)とする。抽出した部分シーケンスの配列を「seqs」に代入する。
【0105】
例えば、この時点で、「records」は
図16のようになっている。レコード1611からレコード1616が1つ目の部分シーケンスとなり、レコード1617からレコード1623までが2つ目の部分シーケンスとなる。
【0106】
図17は、テンプレート抽出部114の抽出方法の手順を示した処理フローである。本フローチャートの呼び出し時に引数が必要である。引数「条件ID」には、装置抽出条件記憶部116の条件ID301の値を指定する。引数「seqs」には、ステップS1104の「seqs」を指定する「seqs」は部分シーケンス(レコードの配列)の配列である。
【0107】
例えば、引数の配列「seqs」には、1つ目の要素として、レコード1611からレコード1616の配列、2つ目の要素として、レコード1617からレコード1623の配列が入っている。
【0108】
S1702では、「seqs」の要素数から、すべてのインデックスの組み合わせを生成する。生成した組の配列を「pairs」に代入する。ここで生成した組み合わせをもとに、部分シーケンス間の距離を計算する。
例えば、
図6のように、部分シーケンスがS0からS4まであるとき、「seqs」には、[S0,S1,S2,S3,S4]が入っている。要素数が5なので、インデックス0~4から2つ取り出す組み合わせを生成すると[(0,1),(0,2),(0,3),(0,4),(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]のようにタプル(tuple)の配列となる。この配列を「pairs」に代入する。
【0109】
S1703では、配列「distances」を「[]」で初期化する。
【0110】
S1704では、配列「pairs」の各要素を「p」に代入し、すべての要素「p」に対してS1708までの処理を実行する。「p」には、(1,2)のようなタプル形式で入っているため、「p.0」で0番目の要素「1」、「p.1」で1番目の要素「2」と参照できる。
【0111】
S1705では、ループの中で使用する変数を初期化する。「x」には、「seqs」の「p.0」番目の要素を代入する。「y」には、「seqs」の「p.1」番目の要素を代入する。
【0112】
S1706では、公知の方法を使って、「x」と「y」のレーベンシュタイン距離を計算する。計算した値を「d」に代入する。
【0113】
S1707では、計算したレーベンシュタイン距離から、タプル(p.0,p.1,d)を作成し、配列「distances」に追加する。
【0114】
S1708では、ループが終了しているので、配列「distances」の生成が完了している。例えば、配列「distances」の内容は、(部分シーケンスA,部分シーケンスB,距離)であるため、
図6のように無向グラフとして表現できる。
【0115】
S1709では、配列「distances」の中から、距離が「0」のものだけ取り出し、距離「0」で繋がっている部分シーケンスを集めてグループ化する。生成したグループの配列を「sames」に代入する。
【0116】
例えば、
図6の場合、「seqs」には、[S0,S1,S2,S3,S4]が入っている。距離「0」で繋がっているのは、[S0,S1,S2]となる。グループはインデックスの配列とするので、グループは[0,1,2]と表される。
図6の場合、グループは1つしかないので、「sames」には、[[0,1,2]]が代入される。
【0117】
S1710では、配列「distances」の中から、距離が近いものだけ取り出し、距離が近く繋がっている部分シーケンスを集めてグループ化する。生成したグループの配列を「nears」に代入する。「距離が近い」は、例えば、部分シーケンス長の1/2未満のように決める。
【0118】
例えば、
図6の場合、S3とS4の距離が近いので、グループは[3,4]となる。グループは1つしかないので、「nears」には[[3,4]]が代入される。
【0119】
S1711では、配列「sames」と配列「nears」を連結して、「groups」に代入する。
【0120】
例えば、
図6の場合、[[0,1,2],[3,4]]が「groups」に代入される。
【0121】
S1712では、配列「groups」の各要素を「g」に代入して、すべての要素「g」に対してS1715までの処理を実行する。
【0122】
S1713では、配列「g」からテンプレート候補を選択する。選択した部分シーケンスのインデックスを「t」に代入する。テンプレート候補を選択する方法は、例えば、ランダムに選んでもよいし、シーケンス長が最小のものを選んでもよい。
【0123】
S1714では、テンプレート候補となる部分シーケンス(イベントの配列)を「seqs[t]」で取得し、テンプレート記憶部118に保存する。条件ID701に引数「条件ID」の値を指定、テンプレートID702に自動採番した値を指定、連番703に部分シーケンスの出現順を指定、イベントID704に部分シーケンスのレコードのイベントID1602を指定、状態705に部分シーケンスのレコードの状態1603を指定、イベント名706部分シーケンスのレコードのイベント名1604を指定しレコードを登録する。
【0124】
図18は、差分検出部115の検出方法の手順を示した処理フローである。本フローチャートの呼び出し時に引数が必要である。引数「条件ID」には、装置抽出条件記憶部116の条件ID301の値を指定する。引数「records」には、ステップS1302の「records」を指定する。
【0125】
S1802では、S1501を呼び出している。S1501は引数「条件ID」、「records」を持つ。「条件ID」には、S1801の引数「条件ID」を指定する。「records」には、S1801の引数「records」を指定する。抽出した部分シーケンスの配列を「seqs」に代入する。
【0126】
S1803では、S1802で抽出した部分シーケンス「seqs」を部分シーケンス記憶部119に保存する。条件ID801に引数「条件ID」の値を指定、部分シーケンスID802に部分シーケンスを識別する自動採番した値を指定、連番803にイベントの出現順を指定、発生日時804にレコードの発生日時1601の値を指定、イベントID805に部分シーケンスのレコードのイベントID1602を指定、状態806に部分シーケンスのレコードの状態1603を指定、イベント名807に部分シーケンスのレコードのイベント名1604を指定しレコードを登録する。
【0127】
S1804では、引数「条件ID」で生成されたテンプレートをテンプレート記憶部118から取得する。取得したテンプレートの配列を配列「templs」に代入する。
【0128】
S1805では、配列「seqs」の各要素を「seq」に代入し、すべての要素「seq」に対してS1814までの処理を実行する。
【0129】
S1806では、「templ」に「[]」を代入し、「min」に「9999」を代入する。
【0130】
S1807では、配列「templs」の各要素を「t」に代入し、すべての要素「t」に対してS1811までの処理を実行する。このループで、「seq」と距離が最小になるテンプレートを見つけ「templ」に保存する。
【0131】
S1808では、公知の方法を使って、部分シーケンス「seq」とテンプレート「t」とのレーベンシュタイン距離を計算する。計算した値を「d」に代入する。
【0132】
S1809では、「d<min」を判定する。「True」の場合は、S1810に進む。「False」の場合は、S1811に進む。
【0133】
S1810では、「min」に「d」を代入し、「templ」に「t」を代入する。
【0134】
S1812では、公知の方法を使って、「seq」と「templ」との最小編集手順を計算する。計算結果を「ses」に代入する。
【0135】
例えば、「seq」が
図9の901であり、「templ」が902であるとき、「ses」には、[(”削除”,4,0),(”削除”,6,0),(”置換”,8,6)]が代入される。
【0136】
S1813では、差分(最小編集手順)を差分記憶部120に保存する。条件ID1001に引数「条件ID」を指定する。部分シーケンスID1002に「seq.部分シーケンスID」を指定する。テンプレートID1003に「templ.テンプレートID」を指定する。操作順1004に「ses」の連番を指定する。操作1005に、「削除」「挿入」「置換」のいずれかを指定する。対象S1006に部分シーケンスの操作対象の連番を指定する。対象T1007にテンプレートの捜査対象の連番を指定する。ただし、操作1005が「削除」のときは、対象T1007は指定しない。
【0137】
上記により、イベントを記録したログデータから一連のイベント群である特定シーケンス(部分シーケンス)を適切に出力することができ、出力された特定シーケンスに基づいてログデータを解析することが可能となる。
【0138】
以上、いくつかの実施形態について示したが、本発明は、例えば、システム、装置、方法、コンピュータプログラムもしくは記録媒体等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【0139】
また、本発明におけるコンピュータプログラムは、各フローチャートの処理方法をコンピュータが実行可能なコンピュータプログラムであり、本発明の記憶媒体は各フローチャートの処理方法をコンピュータが実行可能なコンピュータプログラムが記憶されている。なお、本発明におけるコンピュータプログラムは各フローチャートの各装置の処理方法ごとのコンピュータプログラムであってもよい。
【0140】
以上のように、前述した実施形態の機能を実現するコンピュータプログラムを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたコンピュータプログラムを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【0141】
この場合、記録媒体から読み出されたコンピュータプログラム自体が本発明の新規な機能を実現することになり、そのコンピュータプログラムを記憶した記録媒体は本発明を構成することになる。
【0142】
コンピュータプログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD-ROM、CD-R、DVD-ROM、磁気テープ、不揮発性のメモリカード、ROM、シリコンディスク、ソリッドステートドライブ等を用いることができる。
【0143】
また、コンピュータが読み出したコンピュータプログラムを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのコンピュータプログラムの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0144】
さらに、記録媒体から読み出されたコンピュータプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのコンピュータプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0145】
また、本発明は、複数の機器から構成されるシステムに適用しても、1つの機器からなる装置に適用してもよい。また、本発明は、システムあるいは装置にコンピュータプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのコンピュータプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【0146】
さらに、本発明を達成するためのコンピュータプログラムをネットワーク上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【0147】
なお、上述した各実施形態およびその変形例を組み合わせた構成も全て本発明に含まれるものである。
【符号の説明】
【0148】
101 ログ分析装置