(57)【要約】【課題】並列処理されるメソッドのログ分析を可能とする。【解決手段】アスペクト指向技術を用いたログの取得であって、トランザクションの開始時に、ジョインポイント、識別用時刻及びログ取得対象情報がログとして保存されトランザクションの終了時にジョインポイント、識別用時刻、ログ取得対象情報及び終了時刻がログとして保存されることにより、並列処理がなされた場合であっても、開始時と終了時に共通するジョインポイント、識別用時刻、ログ取得対象情報を参考にして、識別用時刻と終了時刻との時間間隔から、あるトランザクションにかかった処理時間を正確かつ簡易に判断することが可能となる。【選択図】図４
2008210135.tif 000002
【特許請求の範囲】
【請求項１】
アスペクト指向によりログを取得する方法において、ログ取得の対象となるトランザクションの開始時に、当該時点での時刻を識別用時刻として取得して、前記識別用時刻を当該時点でのジョインポイントに関連づけて記憶する処理及び前記トランザクションのログ取得対象情報を記憶する処理を少なくとも行って、前記トランザクションの開始時のログとして、前記ジョインポイント、前記識別用時刻及び前記ログ取得対象情報を保存し、前記トランザクションの終了時に、当該時点でのジョインポイントをキーとして前記識別用時刻を取得してこれらを記憶する処理、前記トランザクションのログ取得対象情報を記憶する処理及び当該時点での時刻を終了時刻として取得して、前記終了時刻を記憶する処理を少なくとも行って、前記トランザクションの終了時のログとして、前記ジョインポイント、前記識別用時刻、前記ログ取得対象情報及び前記終了時刻を保存することを特徴とするログ取得方法。
【請求項２】
前記トランザクションの開始時に、前記識別用時刻を当該時点でのジョインポイントに関連づけて記憶する処理及び前記トランザクションのログ取得対象情報を記憶する処理を行った後に、更に、当該時点での時刻を開始時刻として取得して記憶する処理を行って、前記トランザクションの開始時のログとして保存することを特徴とする請求項１に記載のログ取得方法。
【請求項３】
前記トランザクションの開始時に、メソッドがどの順番で呼び出されたかを示す呼び出しスタックを併せて記憶し、前記トランザクションの開始時のログとして保存することを特徴とする請求項１または２に記載のログ取得方法。
【請求項４】
前記ログ取得の対象となるオブジェクトクラス及びメソッドを、予めパラメータとして任意に設定可能としたことを特徴とする請求項１から３までのいずれかに記載のログ取得方法。
【請求項５】
前記トランザクションの開始時に、カウンタの値をインクリメントし、予め設定されたサンプリング周期の設定値と前記カウンタの値とが一致した場合にのみログの取得を行うことを特徴とする請求項１から４までのいずれかに記載のログ取得方法。
【請求項６】
請求項１から５までのいずれかに記載のログ取得方法を、監視制御システムにおいて監視制御機能を実現する監視制御アプリケーションに利用されるソフトウェアライブラリに適用することを特徴とするログ取得方法。
【請求項７】
アスペクト指向技術を用いてログを取得するシステムであって、ログ取得の対象となるトランザクションの開始時に、当該時点での時刻をタイマーから読み出して識別用時刻とし、前記識別用時刻を当該時点でのジョインポイントに関連づけて記憶装置に記憶する処理及び前記トランザクションのログ取得対象情報を記憶装置に記憶する処理を少なくとも実行して、前記トランザクションの開始時のログとして、前記ジョインポイント、前記識別用時刻及び前記ログ取得対象情報をログ記録部に記憶する処理及び前記トランザクションの終了時に、当該時点でのジョインポイントをキーとして前記識別用時刻を読み出してこれらを記憶装置に記憶する処理、前記トランザクションのログ取得対象情報を記憶装置に記憶する処理及び当該時点での時刻をタイマーから読み出して終了時刻とし、前記終了時刻を記憶装置に記憶する処理を少なくとも実行して、前記トランザクションの終了時のログとして、前記ジョインポイント、前記識別用時刻、前記ログ取得対象情報及び前記終了時刻をログ記録部に記憶する処理を実行するログ取得部を備えることを特徴とするログ取得システム。
【請求項８】
アスペクト指向技術を用いてログを取得するプログラムであって、ログ取得の対象となるトランザクションの開始時に、当該時点での時刻をタイマーから読み出して識別用時刻とし、前記識別用時刻を当該時点でのジョインポイントに関連づけて記憶装置に記憶させる処理、前記トランザクションのログ取得対象情報を記憶装置に記憶させる処理及び前記トランザクションの開始時のログとして、前記ジョインポイント、前記識別用時刻及び前記ログ取得対象情報をログ記録部に記憶させる処理、並びに前記トランザクションの終了時に、当該時点でのジョインポイントをキーとして前記識別用時刻を読み出してこれらを記憶装置に記憶させる処理、前記トランザクションのログ取得対象情報を記憶装置に記憶させる処理、当該時点での時刻をタイマーから読み出して終了時刻とし、前記終了時刻を記憶装置に記憶させる処理及び前記トランザクションの終了時のログとして、前記ジョインポイント、前記識別用時刻、前記ログ取得対象情報及び前記終了時刻をログ記録部に記憶させる処理をコンピュータに実行させることを特徴とするログ取得プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ログ取得方法、ログ取得システム及びログ取得プログラムに関する。さらに詳述すると、本発明は、オブジェクト指向技術を用いて構築され、リアルタイム性、信頼性を要求されるシステムにおけるロギングに好適なログ取得方法、ログ取得システム及びログ取得プログラムに関する。
【背景技術】
【０００２】
オブジェクト指向技術を用いたシステム開発がシステム開発の主流となりつつある。
【０００３】
例えば、監視、制御の対象となる設備および資源等（以下、監視対象物という）を集中的に監視、制御する監視制御システムの設計に際し、監視対象物をオブジェクトクラスとしてモデル化し、設備構成データや状態／測定値の管理にオブジェクトを利用する方法が普及しつつある。尚、このようなオブジェクトクラスの集合は、「情報モデル」と呼ばれる。監視制御システムの構築時において「情報モデル」は、ソフトウェアライブラリという形で実現され、監視制御機能を実現するソフトウェア（アプリケーション）に利用される。
【０００４】
監視制御システムにおいては、リアルタイム性（要求時間内に処理を終了すること）や信頼性が非常に重視され、例えば、ある制御処理の開始から終了までシステム全体で１秒以内に実行を完了しなければならないといった制約が存在する。
【０００５】
従来の監視制御システムは、リアルタイム性を実現するために、使用するハードウェアに応じて単一のベンダーによりソフトウェアライブラリ等が構築されていた。このため、異なるハードウェア、オペレーティングシステムではソフトウェアライブラリを使用できず、汎用性がなかったが、近年、単一のベンダーに依存しないソフトウェアライブラリの共通的利用へのニーズが存在する。したがって、「情報モデル」を実装したソフトウェアライブラリは、異なるオペレーティングシステムにおいて利用され、アプリケーションは様々な開発者によって利用されることが望まれる。
【０００６】
更に、システム分析に際し、動作記録であるログの分析は重要であるが、特に監視制御システムのように高いリアルタイム性や信頼性を要求されるシステムにおいては、問題が発生した場合に問題場所の特定を正確且つシステム全体に負荷をかけることなく行うことが要求される。
【０００７】
例えば、特許文献１には、ネットワークのログ管理において、各サーバのアプリケーションを停止させることなく各アプリケーションにログレベルおよび出力先変更のコードを挿入し、コマンドを各アプリケーションに送信することによってログレベルの変更およびログ出力先の変更を動的に実行するログ管理方法が提案されている。また、特許文献２には、ログの出力機構をシステムカーネルへ実装したソフトウェア動作監視装置が提案されている。
【０００８】
更に、近年オブジェクト指向ではうまく分離できないクラス間を横断するような特徴を「横断的関心事」とし、この「横断的関心事」をアスペクトとして分離して記述することでプログラムの保守性を向上するアスペクト指向技術が注目されている（非特許文献１）。アスペクト指向技術を実現するプログラム言語としては、例えば、ＡｓｐｅｃｔＪが存在する。ＡｓｐｅｃｔＪは、Ｊａｖａ（登録商標）言語にアスペクト指向技術のための拡張性を持たせたプログラム言語である。
【０００９】
【特許文献１】特開２００４−１５２０２４
【特許文献２】特開２００６−５３７８８
【非特許文献１】「アスペクト指向ソフトウェア開発とそのツール」,千葉滋,情報処理 45巻1号,pp.28-33（平成16年1月号)
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、特許文献１に記載のようにログ出力のためのコードをアプリケーション単位で明示的に埋込む必要があるのでは、システムの仕様が変更される毎に、ログを取得するすべてのプログラムのソースコードを見直す必要が生じ、ソースコードの修正量が膨大となるため容易に対応できないという問題がある。また、修正の過程において、プログラマによるコーディングのミス、例えば、本来処理を追加すべきでない場所にコードを追加してしまう場合、本来追加すべき場所にコードを追加し忘れる場合、誤ったコードを記載してしまう場合、ロギングに関係のない箇所のコードを変更し本来のプログラムにバグを生じさせる場合等が起こることが想定される。
【００１１】
また、特許文献２に記載の技術では、ログの出力機構をシステムカーネルへ実装しているため、システム全体を実現するオペレーティングシステムの修正、機能追加等の度にログ取得のためのソースコードの適正を見直さねばならず、保守性が低いという問題がある。また、オペレーティングシステムの修正、機能追加等は、頻繁に発生することが想定されるため、その修正頻度は多く、保守作業が繁雑となる。更に、オペレーティングシステム毎に実装する必要があるので、情報モデルを実装したソフトウェアライブラリの共通的利用ができなくなるという問題がある。また、ソースコードが一般に公開されていないオペレーティングシステムを用いたシステムには適用できないという問題も存在する。
【００１２】
これらの問題に対しては、非特許文献１に記載の発明のようにアスペクト指向技術により、アスペクトとしてログの出力処理を規定することで保守性の向上を図ることが考えられるが、非特許文献１に記載の技術を用いて、アスペクトによりログの出力処理を行った場合、以下の問題がある。
【００１３】
システムの規模が大きい場合、特に監視制御システムのように高いリアルタイム性を要求されるシステムにおいては、計算機上で複数の処理を同時に実行する（並列処理、マルチスレッド）が行われる。即ち、同じメソッドが複数並列して呼び出される可能性がある。しかしながら、非特許文献１に記載の技術を用いても、このような並列処理が行われる場合、それぞれがどのログに対応しているかを分析することはできず、適切なシステム分析を行うことができない。
【００１４】
また、同じメソッドであってもどのような順序で呼び出されたか（呼出しスタック）により処理時間は異なる場合がある。しかしながら、非特許文献１に記載の技術を用いても、同じメソッドを呼出したスレッドの違いによるタイムラグをログとして取得することはできない。
【００１５】
更に、アスペクト指向により各メソッドの毎回の実行につき、ログを取得することはシステム全体の負荷となり、特に監視制御システム等においては、リアルタイム性の阻害要因ともなるという問題がある。
【００１６】
そこで本発明は、並列処理されるトランザクションであってもそのトランザクションに要した時間を計測すること、更に、ログを記録する対象となるメソッドやサンプリング周期を任意に指定することを可能とするログ取得方法、ログ取得システム及びログ取得プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
かかる目的を達成するため、請求項１記載のログ取得方法は、アスペクト指向によりログを取得する方法において、ログ取得の対象となるトランザクションの開始時に、当該時点での時刻を識別用時刻として取得して、識別用時刻を当該時点でのジョインポイントに関連づけて記憶する処理及びトランザクションのログ取得対象情報を記憶する処理を少なくとも行って、トランザクションの開始時のログとして、ジョインポイント、識別用時刻及びログ取得対象情報を保存し、トランザクションの終了時に、当該時点でのジョインポイントをキーとして識別用時刻を取得してこれらを記憶する処理、トランザクションのログ取得対象情報を記憶する処理及び当該時点での時刻を終了時刻として取得して、終了時刻を記憶する処理を少なくとも行って、トランザクションの終了時のログとして、ジョインポイント、識別用時刻、ログ取得対象情報及び終了時刻を保存するようにしている。
【００１８】
また、請求項７に記載のログ取得システムは、アスペクト指向技術を用いてログを取得するシステムであって、ログ取得の対象となるトランザクションの開始時に、当該時点での時刻をタイマーから読み出して識別用時刻とし、識別用時刻を当該時点でのジョインポイントに関連づけて記憶装置に記憶する処理及びトランザクションのログ取得対象情報を記憶装置に記憶する処理を少なくとも実行して、トランザクションの開始時のログとして、ジョインポイント、識別用時刻及びログ取得対象情報をログ記録部に記憶する処理及びトランザクションの終了時に、当該時点でのジョインポイントをキーとして識別用時刻を読み出してこれらを記憶装置に記憶する処理、トランザクションのログ取得対象情報を記憶装置に記憶する処理及び当該時点での時刻をタイマーから読み出して終了時刻とし、終了時刻を記憶装置に記憶する処理を少なくとも実行して、トランザクションの終了時のログとして、ジョインポイント、識別用時刻、ログ取得対象情報及び終了時刻をログ記録部に記憶する処理を実行するログ取得部を備えるものである。
【００１９】
また、請求項８に記載のログ取得プログラムは、アスペクト指向技術を用いてログを取得するプログラムであって、ログ取得の対象となるトランザクションの開始時に、当該時点での時刻をタイマーから読み出して識別用時刻とし、識別用時刻を当該時点でのジョインポイントに関連づけて記憶装置に記憶させる処理、トランザクションのログ取得対象情報を記憶装置に記憶させる処理及びトランザクションの開始時のログとして、ジョインポイント、識別用時刻及びログ取得対象情報をログ記録部に記憶させる処理、並びにトランザクションの終了時に、当該時点でのジョインポイントをキーとして識別用時刻を読み出してこれらを記憶装置に記憶させる処理、トランザクションのログ取得対象情報を記憶装置に記憶させる処理、当該時点での時刻をタイマーから読み出して終了時刻とし、終了時刻を記憶装置に記憶させる処理及びトランザクションの終了時のログとして、ジョインポイント、識別用時刻、ログ取得対象情報及び終了時刻をログ記録部に記憶させる処理をコンピュータに実行させるものである。
【００２０】
したがって、アスペクト指向技術を用いたログの取得であって、トランザクションの開始時に、ジョインポイント、識別用時刻及びログ取得対象情報がログとして保存され、トランザクションの終了時にジョインポイント、識別用時刻、ログ取得対象情報及び終了時刻がログとして保存されることにより、システムの運用者は、並列処理がなされた場合であっても、開始時と終了時に共通するジョインポイント、識別用時刻、ログ取得対象情報を参考にして、識別用時刻と終了時刻との時間間隔から、あるトランザクションにかかった処理時間を正確かつ簡易に判断することが可能となる。尚、ジョインポイントとは、アスペクト指向技術において、コードのどこでアドバイス（処理内容、この場合、ログ取得）の対象にするかというコード中の場所をいう。また、本明細書においてトランザクションとは、ログ取得の対象となる処理全般を指し、メソッド及び後述するコンストラクタの呼出し、データの表示機能等も含むものである。
【００２１】
また、請求項２に記載の発明は、請求項１に記載のログ取得方法において、トランザクションの開始時に、識別用時刻を当該時点でのジョインポイントに関連づけて記憶する処理及びトランザクションのログ取得対象情報を記憶する処理を行った後に、更に、当該時点での時刻を開始時刻として取得して記憶する処理を行って、トランザクションの開始時のログとして保存するようにしている。したがって、トランザクションの開始直前に開始時刻を識別用時刻とは別途取得し、開始時のログとして保存している。
【００２２】
また、請求項３に記載の発明は、請求項１または２のいずれかに記載のログ取得方法において、トランザクションの開始時に、メソッドがどの順番で呼び出されたかを示す呼出しスタックを併せて記憶し、トランザクションの開始時のログとして保存するようにしている。
【００２３】
したがって、呼出しスタックを取得することにより、同じメソッドが呼び出された順番によってメソッドの処理時間が異なる場合であっても、それぞれの呼出位置で何秒かかったかをログとして保存することが可能となる。
【００２４】
また、請求項４に記載の発明は、請求項１から３までのいずれかに記載のログ取得方法において、ログ取得の対象となるオブジェクトクラス及びメソッドを、予めパラメータとして任意に設定可能としている。したがって、アスペクト指向技術が用いられているので、ログ取得の対象となるクラス及びメソッドをシステムの運用中にも変更することを可能としている。
【００２５】
また、請求項５に記載の発明は、請求項１から４までのいずれかに記載のログ取得方法において、トランザクションの開始時に、カウンタの値をインクリメントし、予め設定されたサンプリング周期の設定値とカウンタの値とが一致した場合にのみログの取得を行うようにしている。
【００２６】
したがって、予めパラメータとして入力されるサンプリング周期の設定値により、ログの取得を行う頻度を任意に設定可能としている。
【００２７】
また、請求項６に記載のログ取得方法は、請求項１から５までのいずれかに記載のログ取得方法を、監視制御システムにおいて監視制御機能を実現する監視制御アプリケーションに利用されるソフトウェアライブラリに適用するようにしている。
【００２８】
したがって、アスペクト指向技術により、ソフトウェアライブラリを実現する「情報モデル」とは別のソースコードとしてログ取得のためのコードを記載し、「情報モデル」の修正等に際しても、ログ取得のためのソースコードを変更する必要がないようにしている。
【発明の効果】
【００２９】
請求項１に記載のログ取得方法、請求項７に記載のログ取得システム及び請求項８に記載のログ取得プログラムによれば、トランザクションが並列処理される場合であっても、あるトランザクションに要した時間を個別に識別できることができる。例えば、並列処理において、スレッドＡにてメソッド１が起動され、その直後にスレッドＢにてメソッド１が終了した場合、どのトランザクションを測定しているのかをきちんと把握していないと、実際とは異なる短い時間が計測されてしまうが、各メソッドの処理に要した時間を個別に識別することができるので、このような不具合を回避することが可能となる。また、アスペクトを用いることによって、各オブジェクトクラスには本来の処理だけを定義すれば良く、ソフトウェアの保守性を向上させることができる。
【００３０】
また、請求項２に記載のログ取得方法によれば、識別用時刻の取得後であって、トランザクションの開始直前に再度開始時刻を取得することにより、当該開始時刻及び終了時刻から処理時間をより正確に計測することが可能となる。
【００３１】
また、請求項３に記載のログ取得方法によれば、同じメソッドがどのスレッドに呼出されるかによって処理時間が異なる場合であっても、呼出しスタックを参照することでそれぞれの呼出位置で何秒かかったかを判断することができる。例えば、対象メソッドを呼び出すスレッド毎にメソッドの処理時間をログとして記録することが可能となる。
【００３２】
また、請求項４に記載のログ取得方法によれば、ログを取得する対象となるクラス及びメソッドを、システムの実運用中にも任意に変更することが可能となる。更に、ログの取得対象を任意に選択できることにより、運用者は適宜ログ取得の必要な処理を選択することができ、システム全体におけるログ取得のための処理の負荷を軽減し、オーバヘッドタイムの最小化を図ることが可能となる。
【００３３】
また、請求項５に記載のログ取得方法によれば、ログの取得を行う頻度を任意に設定することが可能となる。これにより、運用者の要求に応じたログの取得を行うことが可能となる。また、システム全体におけるログ取得のための処理の負荷を軽減し、オーバヘッドタイムの最小化を図ることが可能となる。
【００３４】
また、請求項６に記載のログ取得方法によれば、様々なシステム開発者に利用される監視制御用ライブラリにおけるログ取得を、監視制御処理を実行するアプリケーション及び監視制御用ライブラリに影響を与えることなく実現することができるため、監視制御システム全体の保守性を向上することができる。
【発明を実施するための最良の形態】
【００３５】
以下、本発明の構成を図面に示す実施形態に基づいて詳細に説明する。
【００３６】
本発明のログ取得方法は、アスペクト指向によりログを取得する方法において、ログ取得の対象となるトランザクションの開始時に、当該時点での時刻を識別用時刻として取得して、識別用時刻を当該時点でのジョインポイントに関連づけて記憶する処理及びトランザクションのログ取得対象情報を記憶する処理を少なくとも行って、トランザクションの開始時のログとして、ジョインポイント、識別用時刻及びログ取得対象情報を保存し、トランザクションの終了時に、当該時点でのジョインポイントをキーとして識別用時刻を取得してこれらを記憶する処理、トランザクションのログ取得対象情報を記憶する処理及び当該時点での時刻を終了時刻として取得して、終了時刻を記憶する処理を少なくとも行って、トランザクションの終了時のログとして、ジョインポイント、識別用時刻、ログ取得対象情報及び終了時刻を保存するようにしている。また、ログ取得の対象となるトランザクションの開始直前に、識別用時刻とは別に開始時刻をしゅとくすることで、より正確にトランザクションの処理時間の計測をしても良い。更に、ログとして取得する情報も、業務の必要性に応じて上述の項目に加えて適宜必要な情報を取得するようにすることが可能である。
【００３７】
本発明のログ取得方法、ログ取得システム及びログ取得プログラムを適用するシステムは、オブジェクト指向技術により設計されたシステムであれば、特に限られるものではない。本実施形態では、以下に水再生センター（下水処理場）の監視制御システム（参考文献：中村、吉田、高橋、大谷、嶋田「実験システム構築を通じた水再生センター監視制御システムに対する汎用技術の適用性評価」、平成１７年電気学会産業応用部門大会、pp.II-265〜II268、平成１７年８月））に本発明のログ取得方法、ログ取得システム及びログ取得プログラムを適用した場合について説明する。
【００３８】
本実施形態での水再生センターの監視制御システム１の構成は、例えば、図１に示すようなハードウェア構成となっている。
【００３９】
本実施形態の監視制御システム１は、中央監視制御設備２、プロセスコントローラ３、シーケンサ４により構成される。以下、プロセスコントローラ３とシーケンサ４を併せてローカル制御設備６という。
【００４０】
中央監視制御設備２には、図２に示すようなディスプレイ等の出力装置２０と、キーボード、マウス等の入力装置２１と、演算処理を行う中央処理演算装置（ＣＰＵ）２２と、計算中のデータ、パラメータ等が記憶される主記憶装置（ＲＡＭ）２３と、各データベース、計算結果等が記録される補助記憶装置２４としてのハードディスク、外部との通信を行う通信インタフェース２５等を備えたワークステーションや専用の計算機が用いられる。以下、主記憶装置２３及び補助記憶装置２４を総称して単に記憶装置ともいう。また、上記各ハードウェア資源は例えばバス２６を通じて電気的に接続されている。
【００４１】
更に、図３に示すように中央監視制御装置２には、監視制御用ライブラリ１７及び監視制御アプリケーション（監視制御ＡＰＰ１〜３）１６が構成される。監視制御用ライブラリ１７及び監視制御アプリケーション１６を実現するプログラム等は、補助記憶装置２４に記録されており、これらがＣＰＵ２２に読み込まれ実行されることによって、ワークステーションや専用の計算機が中央監視制御設備２として機能する。その実行の際に必要なデータ、パラメータ等は、ＲＡＭ２３にロードされる。
【００４２】
監視制御用ライブラリ１７は、様々な監視制御アプリケーション１６において利用されるものである。監視制御用ライブラリ１７は、例えば、監視制御アプリケーション１６の加工処理に必要な基本データ１５（図示せず）を保存するとともに、ローカル制御設備６を介して監視対象機器５との監視データ１８及び制御データ１９の交換を担う。尚、基本データ１５とは、例えば、現場から得られた監視データ１８や運用者９が入力した設定値などである。
【００４３】
また、監視制御アプリケーション１６は、例えば、監視結果を出力装置２０に表示する等の運用者９に対するユーザインタフェースを提供するとともに、監視データ１８及び制御データ１９の加工処理等を行うものである。尚、本実施形態では、監視制御アプリケーション１６と監視制御用ライブラリ１７は同一のハードウェア上に実装するようにしているが、分散計算機環境において実現するようにしても良い。
【００４４】
本実施形態では、この中央監視制御装置２がログ取得システム１０として機能する。ログ取得システム１０は、監視制御用ライブラリ１７において監視データ１８及び制御データ１９の交換処理や基本データ１５の保存・取得、更には基本データ１５のファイルへの出力や監視制御アプリケーション１６を経由した監視データ１８の表示等にかかわるトランザクションについてログ８を取得、出力するものである。このように、ログ取得システム１０は、中央監視制御装置２が通常実行する監視制御機能とは別に、ライブラリ自体の保守に有用なデータを取得することを可能とするものである。
【００４５】
本実施形態のログ取得システム１０の機能構成の一例を図４に示す。本実施形態におけるログ取得システム１０は、ログ取得処理を実行するログ取得部１１、ログ取得のためのプログラムを記憶したプログラム記憶部１２、作成されたログ８をログファイルとして記憶するログ記憶部１３及びログを出力装置２０に表示する表示制御部１４により構成される。
【００４６】
また、プロセスコントローラ３には、少なくとも演算装置（ＣＰＵ）、記憶装置、通信インタフェース等を備えた専用に開発されたハードウェア装置が主として用いられる。
【００４７】
プロセスコントローラ３は、シーケンサ４から送られてきたデータに基づきフィードバック制御に必要な積分計算や微分計算等の演算を行い、演算結果に基づく指令をシーケンサ４に送る機能および中央監視制御設備２から送られてきた指令値に基づいて制御演算のパラメータを設定したり、シーケンサ４に当該機器の操作指令を送ったりする機能を備えている。尚、個々の監視対象機器５ａ〜５ｄを制御する際に必要となる演算は、中央監視制御設備２で実行されるものではなく、プロセスコントローラ３により実行される場合が多い。
【００４８】
シーケンサ４には、例えばプログラマブルロジックコントローラ（ＰＬＣ）が用いられ、各シーケンサ４ａ〜４ｄには、例えば、ポンプ５ａ、弁５ｂ、コンベヤ５ｃ、送風機５ｄ等が接続される。
【００４９】
シーケンサ４は、各監視対象機器５ａ〜５ｄからの上記アナログ値やディジタル値を示す信号を受けとる機能、プロセスコントローラ３からの指令を受信し、設定されたロジックとプロセスコントローラ３からの指令や機器からの信号に基づいてシーケンス制御を行い、信号を各監視対象機器５ａ〜５ｄへ送る機能および監視データをプロセスコントローラへ送信する機能等を備えるものである。尚、各監視対象機器５ａ〜５ｄとの信号の送受信には、例えば、リモート入出力装置を用いる。
【００５０】
ローカル制御設備６（例えば、ＰＬＣ）から中央監視制御設備２に送られる監視データ１８は、アナログ値（測定値、連続値）とディジタル値（オンオフ情報、０−１値）に区別される。尚、監視データ１８の各レコードは、各機器に一意のＩＤ（機器ＩＤ）を付され、各機器に予め指定された時間間隔で自動的に送信がなされるものである。その際、各機器ＩＤと機器との対応関係については、予め初期設定ファイルとして補助記憶装置２４に記憶させておけば良い。
【００５１】
監視データ１８のアナログ値には、例えば、水位（基準水位からの差）（ｍ）、ポンプ出力（％）、弁の開閉度（％）、電流値（Ａ）等がある。
【００５２】
一方、監視データ１８のディジタル値には、例えば、弁の閉鎖状況（ＯＮ＝全閉、ＯＦＦ＝寸開）、受変電設備における開閉装置の状況（ＯＮ＝投入、ＯＦＦ＝開放）、ポンプの運転状況（ＯＮ＝運転、ＯＦＦ＝停止）、各種警報（地絡発生の有無等）等がある。
【００５３】
また、中央監視制御設備２からローカル制御設備６に送信される制御データ１９についても、同様にアナログ値とディジタル値に大別できる。
【００５４】
制御データ１９のアナログ値には、例えば、ポンプ出力設定値（％）、弁開度設定値（％）、薬剤注入率（％）等があり、ディジタル値には、例えば、ポンプ、送風機などの各機器の運転指令（ＯＮ＝運転、ＯＦＦ＝停止）、弁の開閉指令（ＯＮ＝閉、ＯＦＦ＝開）等がある。
【００５５】
以上、本実施形態の監視制御システム１及びログ取得システム１０のハードウェア構成について説明したが、上記ハードウェア構成は一例であり、これに限られるものではない。また、監視制御用ライブラリ１７とローカル制御設備６の間で制御データ、監視データ等のデータ交換を行う際の通信プロトコルは特に限定されるものではない。本実施形態では、通信プロトコルとしてトランスポート層以下にＴＣＰ・ＵＤＰ／ＩＰ／Ｅｔｈｅｒｎｅｔ（登録商標）を用い、セション層以上に独自に定義したものを利用しているが、通信プロトコルは特に限られるものではなく、新規又は公知の組合せを用いればよい。
【００５６】
図５に本実施形態のログ取得システム１０に用いる実行コードを生成する様子を模式した図を示す。ログ取得システム１０は、監視制御用ライブラリ１７本体を構成するオブジェクトクラス３０，３１と、ログ出力機能を定義したアスペクト３２を別々に定義し、アスペクトコンパイラ３３を通じて実行コード３７を生成するものである。
【００５７】
オブジェクトクラスＡ３０は、監視対象機器（ポンプ５ａ、弁５ｂ等）の計測値を取得し、当該計測値が予め設定された閾値を超える値の場合に、計測値の送信を行うものである。例えば、あるポンプの出力の計測値が閾値（１２０％）を超える場合は、異常として計測値を送信するものである。また、オブジェクトクラスＢ３１は、監視対象機器のＯＮ／ＯＦＦ状態を取得して、これを送信するものである。尚、オブジェクトクラス３０，３１は、監視制御用ライブラリ１７におけるログ取得を行う可能性のあるオブジェクトクラスの一例であり、特に限られるものではない。
【００５８】
これらのオブジェクトクラスに対し、アスペクト指向技術を用いて、アスペクト３２として後述するログ取得プログラムを記述し、これらをアスペクトコンパイラ３３（例えば、ＡｓｐｅｃｔＪにおけるａｊｃ）によりコンパイルすることで、アスペクト３２として記載されたログ取得プログラムは、オブジェクトクラスＡ３０及びオブジェクトクラスＢ３１の双方のオブジェクトクラスの処理に組み込まれる。これを中間コードＡ３４、中間コードＢ３５という。更に、中間コードＡ３４、中間コードＢ３５を言語コンパイラ３６によりコンパイルすることにより実行コード３７が生成されるものである。
【００５９】
本実施形態では、上述の手法により、ログ取得を行う可能性のあるすべてのオブジェクトクラスに対し、アスペクトを織り込むようにしている。これにより、ログ取得を行う可能性のあるすべてのオブジェクトクラスに対し、一つのアスペクトによりログ取得機能を自動的に織り込むことが可能となる。
【００６０】
以下に、本実施形態のログ取得部１１が実行する処理について説明する。以下に述べる各処理は、プログラム記憶部１２に記憶されたログ取得プログラムを読み出して、これを実行することにより実行されるものである。
【００６１】
図７は、トランザクション開始時のログ取得処理の一例を示すフローチャートである。
【００６２】
先ず、図６に示すログ取得処理開始条件が成立するかどうかを判断し（Ｓ１０１）、成立する場合は（Ｓ１０１：Ｙｅｓ）、図８のフローチャートに示すサンプリング周期となっているかどうか、即ち、ログを取得すべきタイミングであるかどうかを判断し（Ｓ１０２）、サンプリング周期であれば（Ｓ１０２：Ｙｅｓ）、現在の時刻を識別用時刻として取得する（Ｓ１０３）。識別用時刻の取得方法は、特に限られるものではないが、本実施形態では、中央監視制御設備２のタイマー（図示せず）から取得している。
【００６３】
これに対し、ログ取得処理開始条件を満たさない場合（Ｓ１０１：Ｎｏ）またはサンプリング周期となっていない場合（Ｓ１０２：Ｎｏ）は、ログ取得処理は終了し、ログは取得されない。
【００６４】
図６にログ取得処理開始条件の一例を示す。本実施形態では、例えば、「トランザクションログを取得するモードである」こと、「トランザクションログの取得対象クラスである」こと、「トランザクションログの取得対象メソッドである」ことをすべて満たし、且つ「メソッドの実行」、「コンストラクタの呼出し」、または「表示機能の呼出し」のいずれかが成立することを開始条件としている。尚、図６に示すログ取得処理開始条件は一例であって監視制御業務の必要に応じたログ取得を行うようにすればよい。
【００６５】
本実施形態ログ取得システム１０では、トランザクションログの取得の有無を表すモードについては、運用者９が適宜選択可能なパラメータとしている。また、ログの取得対象とするオブジェクトクラス（取得対象クラス）及びメソッド（取得対象メソッド）についても、同様に運用者９が適宜選択可能なパラメータとし、アスペクトが織り込まれたログ取得を行う可能性のあるすべてのオブジェクトクラスから任意に選択可能としている。
【００６６】
本実施形態では、これらのモード、取得対象クラス及び取得対象メソッドをライブラリの運用最中でも変更可能としている。例えば、トランザクションログの取得の有無を表すモードは、booleanの変数として保存され、アスペクトを実行する度にその値が参照される。運用者９がこの値を出力装置２０上の操作画面から任意に設定可能とすることで、ライブラリの運用最中でも変更可能としている。
【００６７】
また、取得対象クラスまたは取得対象メソッドであるかどうかは、例えば、thisJoinPointから得られるクラス名またはメソッド名が、ログ取得対象クラスを管理する集合に登録されているかどうかを照合し、真であればログ取得を実行し、偽であればログ取得処理を終了するようにしている。運用者９がこの集合へのクラス名あるいはメソッド名の登録及び削除を出力装置２０上の操作画面から任意に設定可能とすることで、ライブラリの運用最中でも変更可能としている。
【００６８】
また、「メソッドの実行」におけるメソッドとは、監視制御用ライブラリ１７のために設計されたオブジェクトが有するメソッドを指し、例えば、Ｊａｖａ（登録商標）を用いて実装した場合であれば、Ｊａｖａ（登録商標）本来のオブジェクトにより提供されるメソッドは対象としないものである。
【００６９】
また、「コンストラクタの呼出し」におけるコンストラクタとは、新たなオブジェクトを生成する際に呼び出されて内容の初期化等を行う処理であり、本実施形態では、監視制御用ライブラリ１７のために設計されたオブジェクトが生成される際の所要時間を測定するために開始条件の一つとしているものである。
【００７０】
また、「表示機能の呼出し」については、本実施形態では、表示機能がどのように実装されるかは監視制御用ライブラリ１７の対象外であるので、例えば、Ｊａｖａ（登録商標）において表示用のオブジェクトを再描写するメソッドを呼び出す際に、真の値を返すように設定している。
【００７１】
次に、現在のジョインポイントをキーとして識別用時刻を値とする対を保存する（Ｓ１０４）。ジョインポイントとは、アスペクト指向技術において、アスペクトが呼び出されている位置をいい、それぞれの位置について一意に定まる値を有するものである。尚、本実施形態では、ジョインポイントのハッシュコードと識別用時刻の対を保存するようにしている。
【００７２】
次に、ログ取得対象情報を取得する（Ｓ１０５）。ログ取得対象情報とは、例えば、ログを取得する対象となっているクラス名、メソッド名及び監視対象物の名称をいう。例えば、ある監視制御物である沈砂池（「沈砂池１号」）がTankオブジェクトによって表され、その水位をsetMeasurement()メソッドによって記録する場合に、このメソッドに関するログを取得する場合、ログ取得対象情報としては、Tankオブジェクトであること、setMeasurement()というメソッドであること及び監視制御物が「沈砂池１号」という名前であることが取得される。
【００７３】
次に、呼出しスタックを取得する（Ｓ１０６）。呼出しスタックとは、メソッドの読み出す順序であり、処理対象となっているメソッドを呼び出したメソッドを呼出しスタックとして記憶するものである。具体的には、例えば、Ｊａｖａ（登録商標）の場合Throwableクラスを生成することで、生成時点での呼出しスタックを取得することが可能となる。更に、Throwable.getStackTrace()メソッドを利用することで、スタックを構成するクラス名とメソッド名の組合せ等の要素に分解することが可能となる。本実施形態では、例えば、この要素から文字列を取得することで、最終的にログに保存する呼出しスタックを取得している。
【００７４】
次に、現在の時刻を開始時刻として取得する（Ｓ１０７）。開始時刻の取得方法は、特に限られるものではないが、識別用時刻と同様に中央監視制御設備２のタイマー（図示せず）から取得するものである。本実施形態では、開始時刻をログ取得の対象となるトランザクションの開始直前に、識別用時刻とは別途記憶することで、より正確なトランザクションの処理時間の計測を可能としている。尚、開始時刻を取得せず、識別用時刻を開始時刻と同じと扱い処理の簡素化を図ることも可能である。
【００７５】
次に、ログ取得対象情報、識別データ、呼出しスタック及び開始時刻を保存して（Ｓ１０８）、トランザクション開始時のログ取得処理は終了する。尚、識別データとは、Ｓ１０５で取得したメソッド名とＳ１０４で取得した現在のジョインポイントをキーとして識別用時刻を値とする対とを組み合わせたものいう。この識別データを記憶しておくことにより、並列処理がなされていて、同じメソッドに対するアクセスがほぼ同時に発生したとしても、ログを解析する際に、いずれのアクセスであるかを判別することが可能となる。尚、図７に示したログ取得対象情報、識別データ、呼出しスタック及び開始時刻の取得順序は、一例でありこれに限られるものではない。また、上述の開始時のログとして取得する情報は一例であり、業務の必要性に応じて適宜必要な情報を取得するようにすればよい。
【００７６】
図８にログ取得処理において、設定されたサンプリングのタイミングであるかどうか判断するサンプリング判定処理（Ｓ１０２）の一例を示す。
【００７７】
本実施形態では、同じメソッドの呼出しに対し、何回に１回（例えば、１００回に１回）の割合でログを保存するのかを示す値（サンプリング周期）を設定可能としている。サンプリング周期は、運用者９が任意に設定することが可能なパラメータであり、メモリ上に読み出されたサンプリング周期の設定値は、処理回数を示すカウンタと比較される。これにより、サンプリング周期として設定した値分のメソッドの実行に際し、１回のログ取得処理を行うことが可能となる。
【００７８】
このように、ログの取得を行う頻度を任意に設定可能とすることにより、例えば、普段は、サンプリング回数を多めに設定しておき、詳細な試験を行いたい場合にのみサンプリング回数を少なめに設定してログの取得頻度を多くする等の運用が可能となる。また、各メソッドの毎回の実行につきログを取得することは、システムの本来の目的（例えば、監視制御処理）とは異なる処理でシステム全体に負荷をかけ、処理量、処理時間の増大に繋がる。したがって、毎回ログの取得処理を行う場合に比べ、システム全体におけるログ取得処理の処理量を軽減することができるので、オーバヘッドタイムの最小化を図ることが可能となる。
【００７９】
サンプリング判定処理では、先ずカウンタの値を１増加させ（Ｓ２０１）、サンプリング周期とカウンタの値が一致するかどうかを判断する（Ｓ２０２）。
【００８０】
サンプリング周期とカウンタの値が一致している場合（Ｓ２０２：Ｙｅｓ）は、対象ジョインポイントを現在のジョインポイントに更新し（Ｓ２０３）、更に対象スレッドを現在実行しているスレッドに更新したうえで（Ｓ２０４）、Ｓ２０５の判断に移る。一方、サンプリング周期とカウンタの値が一致していない場合（Ｓ２０２：Ｎｏ）は、Ｓ２０５の判断に移るものである。
【００８１】
Ｓ２０５は、対象ジョインポイントが空でなく、かつ対象スレッドがこの手続きを呼び出しているスレッドかどうかを判断する（Ｓ２０５）。具体的には、ジョインポイントがnull値でないこと及び対象となるスレッドを表すオブジェクトが一致するかどうかを判断するものである。
【００８２】
Ｓ２０５の条件に該当する場合（Ｓ２０５：Ｙｅｓ）は真を返し（Ｓ２０６）、該当しない場合（Ｓ２０５：Ｎｏ）は偽を返して（Ｓ２０７）、サンプリング判定処理は終了する。即ち、本処理では、設定されたサンプリングのタイミングであれば真の値、そうでなければ偽の値が戻り値となるものである。
【００８３】
図９は、トランザクション終了時のログ取得処理の一例を示すフローチャートである。
【００８４】
先ず、ログ取得処理開始条件が成立するかどうかを判断し（Ｓ３０１）、成立する場合は（Ｓ３０１：Ｙｅｓ）、現在のジョインポイントと開始時に保存したジョインポイントが同一かどうかを判断する（Ｓ３０２）。同一である場合（Ｓ３０２：Ｙｅｓ）は、サンプリングの諸データ（カウンタ等）をリセットする（Ｓ３０３）。一方、ログ取得処理終了条件が成立しない場合（Ｓ３０１：Ｎｏ）、または現在のジョインポイントと開始時に保存したジョインポイントが一致しない場合（Ｓ３０２：Ｎｏ）は、トランザクション終了時のログ取得処理は終了する。
【００８５】
次に、現在のジョインポイントに対応する識別用時刻を取得する（Ｓ３０４）。ここで識別用時刻は、Ｓ１０４において保存された「現在のジョインポイントをキーとして識別用時刻を値とする対」から取得する。これにより、同じメソッドが複数並行して呼び出された場合でも、それぞれ独立して時間を計測することが可能となる。
【００８６】
ここで、識別用時刻が空かどうかを判断し、空であれば（Ｓ３０５：Ｙｅｓ）無効なデータであるとしてログ取得処理は終了する。
【００８７】
一方、識別用時刻がある場合（Ｓ３０５：Ｎｏ）は、ログ取得対象情報を取得する（Ｓ３０６）。尚、処理の内容は、Ｓ１０５と同様であるので説明を省略する。
【００８８】
次に、終了時刻を取得する（Ｓ３０７）。終了時刻の取得方法は、特に限られるものではないが、識別用時刻と同様に中央監視制御設備２のタイマー（図示せず）から取得するものである。
【００８９】
最後に、ログ取得対象情報、識別データ、呼出しスタックおよび終了時刻を保存して（Ｓ３０８）、処理は終了する。尚、識別データとしては、Ｓ１０８と同様にＳ３０６で取得したメソッド名とＳ３０４で取得した現在のジョインポイントをキーとして識別用時刻を値とする対とを組み合わせたものを保存する。尚、図９に示したログ取得対象情報、識別データ及び終了時刻の取得順序は、一例でありこれに限られるものではない。また、上述の終了時のログとして取得する情報は一例であり、業務の必要性に応じて適宜必要な情報を取得するようにすればよい。
【００９０】
以上説明したログ取得処理により取得されたログ取得対象情報、識別データ、呼出しスタック、開始時刻は処理開始時のログとして、また、ログ取得対象情報、識別データ、終了時刻は処理終了時のログとして、ログ記憶部１３のログファイルに記憶される。また、表示制御部１４は、出力装置２０にログを出力することを可能とする。
【００９１】
これにより、運用者９はログファイルを表示、印刷等を行うことによりログの解析を行うことが可能となるものである。本実施形態のログ取得システム１０により提供されるログ８によれば、運用者９は、同じトランザクションが複数並行して実行された場合でも、識別データによりどのいずれのアクセスであるかを判別することが可能となる。
【００９２】
また、一般に、ログ取得システムの開発に際し、特殊な処理を実現するためには、多くのパラメータを使い、処理手順も複雑化する傾向があるが、本発明のログ取得方法によれば、上述のように、その処理手順自体や利用するパラメータの種類を最小に維持することができ、ログ取得処理のオーバーヘッドを最小限にすることを可能としている。
【００９３】
尚、上述の実施形態は本発明の好適な実施の例ではあるがこれに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々変形実施可能である。
【図面の簡単な説明】
【００９４】
【図１】監視制御システムのハードウェア構成の一例を示す図である。
【図２】中央監視制御装置のハードウェア構成の一例を示す図である。
【図３】中央監視制御装置におけるソフトウェアライブラリ、監視制御アプリケーションの関係を示す図である。
【図４】ログ取得システムの機能構成の一例を示す図である。
【図５】監視制御ライブラリを構成するオブジェクトクラスとログ取得を定義したアスペクトをコンパイルし、実行コードを生成する際のイメージを示した図である。
【図６】ログ取得処理開始条件の一例を示す図である。
【図７】トランザクション開始時のログ取得処理の一例を示すフローチャートである。
【図８】サンプリング判定処理の一例を示すフローチャートである。
【図９】トランザクション終了時のログ取得処理の一例を示すフローチャートである。
【符号の説明】
【００９５】
１  監視制御システム
１０  ログ取得システム
１１  ログ取得部
１３  ログ記憶部
【図１】
2008210135.tif 000003
【図２】
2008210135.tif 000004
【図４】
2008210135.tif 000005
【図６】
2008210135.tif 000006
【図７】
2008210135.tif 000007
【図８】
2008210135.tif 000008
【図９】
2008210135.tif 000009
【図３】
2008210135.tif 000010
【図５】
2008210135.tif 000011