JP2017130111A - Dataflow log generation device, relational database, dataflow log generation method, program, and monitoring system - Google Patents
Dataflow log generation device, relational database, dataflow log generation method, program, and monitoring system Download PDFInfo
- Publication number
- JP2017130111A JP2017130111A JP2016010003A JP2016010003A JP2017130111A JP 2017130111 A JP2017130111 A JP 2017130111A JP 2016010003 A JP2016010003 A JP 2016010003A JP 2016010003 A JP2016010003 A JP 2016010003A JP 2017130111 A JP2017130111 A JP 2017130111A
- Authority
- JP
- Japan
- Prior art keywords
- data flow
- data
- component
- position information
- log
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Description
本発明の実施形態は、データフローログ生成装置、リレーショナルデータベース、データフローログ生成方法、プログラム、および監視システムに関する。 Embodiments described herein relate generally to a data flow log generation device, a relational database, a data flow log generation method, a program, and a monitoring system.
近年、計算機の処理効率の向上、情報サービスの高度化などに伴い、複数の計算機およびプログラムが連携して動作する計算システムが一般化している。このような計算システムにおいて、計算処理の異常の検出、セキュリティ診断、デバッグ、性能監視、性能劣化要因分析などを実現するために、複数のプログラムを横断したデータの流れ(データフロー)を観測・監視することが知られている。 In recent years, with the improvement of processing efficiency of computers and the advancement of information services, computer systems in which a plurality of computers and programs operate in cooperation have become common. In such a computing system, observation and monitoring of data flow (data flow) across multiple programs is performed in order to realize calculation processing abnormality detection, security diagnosis, debugging, performance monitoring, performance degradation factor analysis, etc. It is known to do.
上記のようなデータフローの監視を行う監視手法は、(1)データが、例えば、プロセス、ファイル、データベースなどの様々な種類のコンポーネントを横断する場合でも網羅的に監視できることが求められる。しかし、例えば、OS標準の監視機能を用いると、ファイルやプロセス間通信に基づくデータフローを監視することはできるが、プロセス内部のデータフロー、またはプロセスとデータベースとの間のデータフローを監視することは難しい。 The monitoring method for monitoring the data flow as described above requires (1) that data can be comprehensively monitored even when data crosses various types of components such as processes, files, and databases. However, for example, if the OS standard monitoring function is used, it is possible to monitor the data flow based on the file or the inter-process communication, but the data flow inside the process or the data flow between the process and the database is monitored. Is difficult.
一方で、(2)計算システムにかかる負荷(オーバーヘッド)または構成変更をなるべく小さく抑えられることも求められる。例えば、コンポーネントを横断するデータフローを観測するために識別用のメタデータを付与する仕組みを追加すると、計算システムにかかる負荷等が増加してしまう。ゆえに、網羅的な監視と計算システムにかかる負荷とをいかにして両立させるかが重要となる。 On the other hand, (2) it is also required that the load (overhead) or the configuration change applied to the calculation system be minimized. For example, if a mechanism for adding identification metadata for observing a data flow across components is added, the load on the calculation system increases. Therefore, it is important how to make comprehensive monitoring and the load on the computing system compatible.
本発明の実施形態は、計算システムにかかる負荷などをなるべく抑えつつ、様々な種類のコンポーネントを横断するデータも網羅的に監視可能なデータフローログを生成する。 The embodiment of the present invention generates a data flow log that can comprehensively monitor data crossing various types of components while minimizing the load on the computing system.
本発明の一態様としてのデータフローログ生成装置は、プロセスである第1コンポーネント内の第1オブジェクトと、第2コンポーネントとの間におけるデータフローが生じた場合において、前記第1コンポーネントにおける、前記データフローの始点または終点を示す第1位置情報を取得する第1取得部と、前記第2コンポーネントにおける、前記データフローの始点または終点を示す第2位置情報を取得する第2取得部と、前記第1位置情報と前記第2位置情報とが記録されたデータフローログを生成するログ生成部と、を備える。 When the data flow between the 1st object in the 1st component which is a process and the 2nd component arises, the data flow log generation device as one mode of the present invention WHEREIN: The data in the 1st component A first acquisition unit that acquires first position information indicating a start point or an end point of a flow; a second acquisition unit that acquires second position information indicating a start point or an end point of the data flow in the second component; A log generation unit that generates a data flow log in which one position information and the second position information are recorded.
以下、図面を参照しながら、本発明の実施形態について説明する。 Hereinafter, embodiments of the present invention will be described with reference to the drawings.
(第1の実施形態)
図1は、第1の実施形態に係る計算機システム全体の概略構成の一例を示すブロック図である。第1の実施形態に係る計算機システムは、プログラムによるプロセス1と、リレーショナルデータベース(Relational Database:RDB)2と、ログ受信部3とを備える。
(First embodiment)
FIG. 1 is a block diagram illustrating an example of a schematic configuration of the entire computer system according to the first embodiment. The computer system according to the first embodiment includes a process 1 by a program, a relational database (RDB) 2, and a log receiving unit 3.
第1の実施形態に係る計算機システムは、第1コンポーネントであるプロセス(プログラム)1により、所定の手続きが実施されることを想定する。そして、所定の手続きが実施されるにあたり、様々なデータの授受(やり取り)が行われる。ここでは、データの授受の流れをデータフローと称する。なお、この授受されるデータは特に限定されるものではない。また、例えば、データの転送だけでなく、プログラム内のオブジェクトが別のオブジェクトを生成するといった事象もデータフローに含まれる。 The computer system according to the first embodiment assumes that a predetermined procedure is performed by a process (program) 1 that is a first component. Then, when a predetermined procedure is performed, various data are exchanged (exchanged). Here, the flow of data exchange is referred to as a data flow. The data exchanged is not particularly limited. Further, for example, not only data transfer but also an event that an object in a program generates another object is included in the data flow.
ここでは、プログラムにJava(登録商標)が用いられることを想定し、以降は、Javaプログラム1として説明する。なお、Javaプログラム1と同機能を有するオブジェクト指向プログラムなど、Java以外のプログラムを用いてもよい。 Here, it is assumed that Java (registered trademark) is used for the program, and the following description will be made as Java program 1. A program other than Java, such as an object-oriented program having the same function as the Java program 1, may be used.
Javaプログラム1は、データフローが記録されたログを生成する。このログをデータフローログと称する。データフローログには、データフローの始点または終点を示す情報(位置情報)が含まれる。このようなデータフローログが生成されることにより、データフローの監視を行うことができる。 The Java program 1 generates a log in which the data flow is recorded. This log is referred to as a data flow log. The data flow log includes information (position information) indicating the start point or end point of the data flow. By generating such a data flow log, it is possible to monitor the data flow.
第1の実施形態に係る計算機システムでは、Javaプログラム1内部のデータフローと、Javaプログラム1とRDB2間のデータフローが起こり得る。ゆえに、下記3種類のデータフローに係るデータフローログが生成される。
(1)Javaプログラム1内部のデータフロー
(2)Javaプログラム1がRDB2からデータを読み込むデータフロー
(3)Javaプログラム1からRDB2へデータを書き込むデータフロー
(2)と(3)のデータフローログにより、データフローが第1コンポーネントと別のコンポーネント(第2コンポーネント)を横断する場合においても、網羅的に監視を行うことができる。
In the computer system according to the first embodiment, a data flow inside the Java program 1 and a data flow between the Java program 1 and the RDB 2 can occur. Therefore, data flow logs relating to the following three types of data flows are generated.
(1) Data flow in Java program 1 (2) Data flow in which Java program 1 reads data from RDB 2 (3) Data flow in which data is written from Java program 1 to RDB 2 (2) and data flow logs in (3) Even when the data flow crosses the first component and another component (second component), comprehensive monitoring can be performed.
次に、Javaプログラム1について説明する。図1に示すJavaプログラム1は、Javaオブジェクト101および102と、Systemクラス103と、Loggerオブジェクト104と、JDBC(Java Database Connectivity)ドライバと、Loggerフック107と、バインド一時保存部105とを有する。 Next, the Java program 1 will be described. The Java program 1 shown in FIG. 1 includes Java objects 101 and 102, a System class 103, a Logger object 104, a JDBC (Java Database Connectivity) driver, a Logger hook 107, and a temporary binding storage unit 105.
Javaオブジェクトは、所定の手続きを実行するために生成されるオブジェクトであり、Javaプログラム内でデータを保持する単位である。Javaオブジェクト間において、データの授受が行われることで、Javaプログラムが動作する。 A Java object is an object generated for executing a predetermined procedure, and is a unit for holding data in a Java program. A Java program operates by exchanging data between Java objects.
図1に示されるJavaオブジェクト101とJavaオブジェクト102との間の矢印は、上記(1)のJavaプログラム1内部のデータフローを意味する。また、Javaオブジェクト102とRDB2との矢印は、上記(2)と(3)のJavaプログラム1とRDB2間のデータフローを意味する。 The arrows between the Java object 101 and the Java object 102 shown in FIG. 1 mean the data flow inside the Java program 1 of (1) above. Moreover, the arrows between the Java object 102 and the RDB2 mean the data flow between the Java program 1 and the RDB 2 in the above (2) and (3).
なお、用いられるJavaオブジェクトは手続きごとに異なる。用いられるJavaオブジェクトは、後述する手続きの説明ごとに紹介する。 Note that the Java object used varies from procedure to procedure. The Java object used is introduced for each procedure described later.
Systemクラス103は、Javaオブジェクトそれぞれに対してオブジェクト識別子を与え、当該オブジェクト識別子を管理する。本実施形態では、オブジェクト識別子は、データの授受が行われたJavaオブジェクトを識別するために用いられる。すなわち、オブジェクト識別子は、データフローの始点または終点を示すために用いられる。 The System class 103 gives an object identifier to each Java object and manages the object identifier. In the present embodiment, the object identifier is used to identify the Java object to which data has been exchanged. That is, the object identifier is used to indicate the start point or end point of the data flow.
Loggerオブジェクト104は、Javaプログラム1内部のデータフローを監視する。また、Loggerオブジェクト104は、後述するLoggerフック107を生成し、Javaプログラム1とRDB2との間のデータフローを監視する。さらに、Loggerオブジェクト104は、データフローログを生成し、データフローログをログ受信部3に送る。 The Logger object 104 monitors the data flow inside the Java program 1. In addition, the Logger object 104 generates a Logger hook 107 to be described later and monitors the data flow between the Java program 1 and the RDB 2. Further, the Logger object 104 generates a data flow log and sends the data flow log to the log receiving unit 3.
バインド一時保存部105は、Loggerオブジェクト104がデータフローログを生成する際に必要なデータを一時的に保存する。 The temporary binding storage unit 105 temporarily stores data necessary for the Logger object 104 to generate a data flow log.
JDBCドライバ106は、Javaプログラム1とRDB2との間のデータの授受に係る通信を行う。また、JDBCドライバ106は、データフローログを生成するために必要な情報をRDB2から取得するための通信を行う。 The JDBC driver 106 performs communication related to data exchange between the Java program 1 and the RDB 2. Further, the JDBC driver 106 performs communication for acquiring information necessary for generating a data flow log from the RDB 2.
Loggerフック107は、Loggerオブジェクト104により生成され、JDBCドライバ106に接続される。これにより、Javaプログラム1とRDB2との間のデータフローは全てLoggerフック107を経由することになる。そして、Loggerフック107がJavaプログラム1とRDB2との間のデータフローを検知することにより、Javaプログラム1とRDB2との間のデータフローを網羅することができる。 The logger hook 107 is generated by the logger object 104 and connected to the JDBC driver 106. As a result, all data flows between the Java program 1 and the RDB 2 go through the Logger hook 107. Then, the Logger hook 107 detects the data flow between the Java program 1 and the RDB 2 so that the data flow between the Java program 1 and the RDB 2 can be covered.
次に、RDB2について説明する。RDB2は、データベースインタフェース(Database Interfacer:DB_I/F)201、アクセス先テーブル202、システムカタログ203、一時ログテーブル204を有する。 Next, RDB2 will be described. The RDB 2 includes a database interface (DB_I / F) 201, an access destination table 202, a system catalog 203, and a temporary log table 204.
DB_I/F201はJavaプログラム1に対して公開されるデータベースの操作インタフェースである。JDBCドライバ106とDB_I/F201とが通信を行うことにより、Javaプログラム1とRDB2間においてデータの授受が行われる。 DB_I / F 201 is a database operation interface that is open to the Java program 1. Data is exchanged between the Java program 1 and the RDB 2 by the communication between the JDBC driver 106 and the DB_I / F 201.
アクセス先テーブル202は、Javaプログラム1が実行する所定の手続きにおいて、Javaオブジェクト102からアクセスされるテーブルである。図2は、アクセス先テーブル202の一例を示す図である。ここでは、アクセス先テーブル202が図2の構造から成ることを想定して、説明する。なお、図2に示されていない情報が含まれていてもよい。 The access destination table 202 is a table accessed from the Java object 102 in a predetermined procedure executed by the Java program 1. FIG. 2 is a diagram illustrating an example of the access destination table 202. Here, description will be made assuming that the access destination table 202 has the structure of FIG. Information that is not shown in FIG. 2 may be included.
アクセス先テーブル202は、sample_schemaというスキーマ名と、sample_tableというテーブル名をもつとする。sample_tableには、signal_idと、history_timeと、signal_valueとの3つの列をもつ。ここでは、signal_idとhistory_timeのペア(組み合わせ)を、テーブルに含まれる行を一意に特定するための主キーとする。 It is assumed that the access destination table 202 has a schema name “sample_schema” and a table name “sample_table”. The sample_table has three columns: signal_id, history_time, and signal_value. Here, a pair (combination) of signal_id and history_time is used as a primary key for uniquely identifying a row included in the table.
システムカタログ203は、RDB2内の全テーブル(アクセス先テーブル202を含む)に関する情報を保持するテーブルである。 The system catalog 203 is a table that holds information regarding all the tables (including the access destination table 202) in the RDB2.
一次ログテーブルは、アクセス先テーブル202へのデータ書き込みに対するログを一時的に保存するためのテーブルである。 The primary log table is a table for temporarily storing a log for data writing to the access destination table 202.
次に、ログ受信部3について説明する。ログ受信部3は、生成されたデータフローログを受け取る。データフローログの送受信は、TCP/IP通信など任意の通信手段を用いればよい。ログ受信部3は、後にデータフローログが分析されるために、データフローログを保存しておいてもよいし、他のシステムなどに出力してもよい。 Next, the log receiving unit 3 will be described. The log receiving unit 3 receives the generated data flow log. Any communication means such as TCP / IP communication may be used for transmission / reception of the data flow log. The log receiving unit 3 may store the data flow log or output it to another system or the like in order to analyze the data flow log later.
なお、図1において、ログ受信部3はJavaプログラム1外部にあるとしたが、Javaプログラム1の内部にあってもよいし、RDB2の内部にあってもよい。 In FIG. 1, the log receiving unit 3 is located outside the Java program 1, but may be located inside the Java program 1 or inside the RDB 2.
次に、上記3種類のデータフローのデータフローログを生成するための具体的な記録方法について説明する。
(1)Javaプログラム1の内部のデータフロー
Javaプログラム1内部のデータフローには、図1に示すように、Javaオブジェクト101からJavaオブジェクト102へのデータ転送、または、Javaオブジェクト101によるJavaオブジェクト102の生成といった事象などがある。例えば、下記に示されるコードは、Javaプログラム1の内部のデータフローを生ずる。
Object copied_data = original_data.clone()
Object processed_data = processData (copied_data)
1行目において、original_dataオブジェクトからcopied_dataオブジェクトへのデータフローが発生していると言える。この場合、original_dataオブジェクトがJavaオブジェクト101であり、copied_dataオブジェクトがJavaオブジェクト102と言える。また、2行目においてcopied_dataオブジェクトからprocessed_dataオブジェクトへのデータフローが発生していると言える。
Next, a specific recording method for generating data flow logs of the above three types of data flows will be described.
(1) Data flow inside Java program 1 As shown in FIG. 1, the data flow inside Java program 1 includes data transfer from Java object 101 to Java object 102, or Java object 102 using Java object 101. There are events such as generation. For example, the code shown below produces a data flow within Java program 1.
Object copied_data = original_data.clone ()
Object processed_data = processData (copied_data)
In the first line, it can be said that a data flow from the original_data object to the copied_data object has occurred. In this case, it can be said that the original_data object is the Java object 101 and the copied_data object is the Java object 102. In addition, it can be said that the data flow from the copied_data object to the processed_data object occurs in the second line.
上記のように、Javaプログラム1内部にてデータフローが発生した場合に、データフローの始点であるJavaオブジェクト101とデータフローの終点であるJavaオブジェクト102が、Loggerオブジェクト104に渡されることにより、Loggerオブジェクト104はデータフローの発生を検知することができる。 As described above, when a data flow occurs in the Java program 1, the Java object 101 that is the start point of the data flow and the Java object 102 that is the end point of the data flow are passed to the Logger object 104, so that the Logger The object 104 can detect the occurrence of a data flow.
より詳細に説明すると、Javaオブジェクト101および102は、Loggerオブジェクト104に対するflowメソッドの呼び出しにより、Loggerオブジェクト104に渡される。上記の2つのデータフローに対するflowメソッドの呼び出しは、下記のようなコードになる。
logger.flow(original_data,copied_data)
logger.flow(copied_data, processed_data)
上記コードのloggerがLoggerオブジェクト104を意味する。logger.flowによりflowメソッドが呼び出され、カッコ内のオブジェクトがLoggerオブジェクト104に渡される。上記コードの例では、括弧内の1番目がデータフローの始点であるJavaオブジェクト101、括弧内の2番目がデータフローの終点であるJavaオブジェクト102として、Loggerオブジェクト104に渡される。
More specifically, the Java objects 101 and 102 are passed to the Logger object 104 by calling a flow method for the Logger object 104. Calling the flow method for the above two data flows results in the following code.
logger.flow (original_data, copied_data)
logger.flow (copied_data, processed_data)
The logger of the above code means the logger object 104. logger. The flow method is called by the flow, and the object in parentheses is passed to the Logger object 104. In the above code example, the first object in the parentheses is passed to the Logger object 104 as the Java object 101 that is the start point of the data flow, and the second object in the parentheses is the Java object 102 that is the end point of the data flow.
データフローの発生を検知したLoggerオブジェクト104は、当該データフローのデータフローログを生成する。図3は、Javaプログラム内部のデータフローログの生成処理のフローチャートである。本フローは、前述のように、flowメソッドが呼び出された時点で開始される。 The Logger object 104 that has detected the occurrence of the data flow generates a data flow log of the data flow. FIG. 3 is a flowchart of the data flow log generation process inside the Java program. As described above, this flow starts when the flow method is called.
Loggerオブジェクト104は、まず、Systemクラス103のidentifyHashCodeメソッドを呼び出し、Javaオブジェクト101および102のオブジェクト識別子を取得する(S101とS102)。次に、Loggerオブジェクト104は、取得した両識別子に基づき、データフローログを生成する(S103)。生成されたデータフローログは、ログ受信部3に送られる(S104)。ログの送信は、TCP/IP通信など任意の通信手段を用いればよい。以上が、データフローログの生成処理のフローである。 The Logger object 104 first calls the identifyHashCode method of the System class 103 to acquire the object identifiers of the Java objects 101 and 102 (S101 and S102). Next, the Logger object 104 generates a data flow log based on the acquired identifiers (S103). The generated data flow log is sent to the log receiving unit 3 (S104). For the log transmission, any communication means such as TCP / IP communication may be used. The above is the flow of data flow log generation processing.
なお、本フローチャートは一例であり、これに限られるものではない。例えば、S101とS102の順番は異なっていてもよい。以降に説明される各実施形態におけるフローチャートも同様である。 This flowchart is an example, and the present invention is not limited to this. For example, the order of S101 and S102 may be different. The same applies to flowcharts in the embodiments described below.
データフローログは、例えば、JSON(JavaScript(登録商標) Object Notation)形式のテキストデータとして、生成される。下記にJSON形式のテキストデータとして生成されたデータフローログの一例を示す。
{
“src”:{
“type”:“java_internal”,
“object_hash”:“1487365346”
},
“dst”:{
“type”:“java_internal”,
“object_hash”:“1786281489”
},
“time”:“1439172160987”
}
srcにはデータフローの始点に関する情報を示す。dstは、データフローの終点に関する情報を示す。srcおよびdstに含まれているtypeフィールドは、コンポーネントの種類を示す。typeフィールドの値java_internalは、Javaオブジェクトを意味する。また、object_hashフィールドは、オブジェクトの識別子を示す。ゆえに、上記データフローログから、データフローの始点のJavaオブジェクトおよび終点のJavaオブジェクトを分析することができる。また、timeフィールドは、データフローログが生成された時刻を示す。
The data flow log is generated, for example, as text data in JSON (Java Script (registered trademark) Object Notation) format. An example of a data flow log generated as JSON format text data is shown below.
{
“Src”: {
“Type”: “java_internal”,
“Object_hash”: “1487365346”
},
“Dst”: {
“Type”: “java_internal”,
“Object_hash”: “1786281489”
},
“Time”: “1439172160987”
}
src indicates information related to the start point of the data flow. dst indicates information regarding the end point of the data flow. The type field included in src and dst indicates the type of component. The value field Java_internal of the type field means a Java object. The object_hash field indicates the identifier of the object. Therefore, it is possible to analyze the Java object at the start point and the Java object at the end point of the data flow from the data flow log. The time field indicates the time when the data flow log is generated.
なお、データフローログには、上記の情報の他にも様々な情報を含めてもよい。例えば、Javaプログラム1が動作している計算機のホスト名、Javaプログラム1のプロセスID、Javaプログラム1のスレッドID、始点もしくは終点のJavaオブジェクトのクラス名、flowメソッドを呼び出すコードのファイル名と当該ファイル内の行番号、またはflowメソッドを呼び出すクラス名とメソッド名などの情報が、データフローログに含まれていてもよい。 The data flow log may include various information in addition to the above information. For example, the host name of the computer on which the Java program 1 is running, the process ID of the Java program 1, the thread ID of the Java program 1, the class name of the Java object at the start or end point, the file name of the code that calls the flow method, and the file The data flow log may include information such as the line number in the table or the class name and method name that calls the flow method.
このように、Loggerオブジェクト104は、Systemクラス103から、データフローの始点を示すオブジェクト識別子と、データフローの終点を示すオブジェクト識別子を取得する。そして、Loggerオブジェクト104は、両オブジェクト識別子が記録されたデータフローログを生成する。これにより、生成されたデータフローログに基づきJavaプログラムの内部のデータフローを監視することができる。 Thus, the Logger object 104 acquires an object identifier indicating the start point of the data flow and an object identifier indicating the end point of the data flow from the System class 103. The Logger object 104 generates a data flow log in which both object identifiers are recorded. As a result, the data flow inside the Java program can be monitored based on the generated data flow log.
(2)Javaプログラム1がRDB2からデータを読み込むデータフロー
Javaプログラム1がRDB2からデータを読み込むデータフローは、例えば、図1に示すように、Javaオブジェクト102が、RDB2のアクセス先テーブル202からデータを取得するといったものがある。Javaプログラム1とRDB2との間のデータフローに関する情報は、Loggerフック107により集められる。
(2) Data flow in which the Java program 1 reads data from the RDB 2 The data flow in which the Java program 1 reads data from the RDB 2 is, for example, as shown in FIG. There is something to get. Information regarding the data flow between the Java program 1 and the RDB 2 is collected by the Logger hook 107.
Loggerフック107は、JDBCドライバ106に接続される追加機能である。Loggerフック107は、例えば、java.lang.reflect.Proxyクラスの機能を用いて実現可能である。そして、Loggerオブジェクト104は、下記に示すコードのように、wrapメソッドを呼び出し、JDBCドライバ106にLoggerフック107をラップ(接続)しておく。
connection=logger.wrap(connection)
connectionは、JDBCドライバ106の一部であるjava.sql.Connection型のオブジェクトである。wrapメソッドは、与えられたconnectionにLoggerフック107を接続し、その結果を戻り値として返す。これにより、connectionにLoggerフック107が接続され、connectionおよびconnectionから生成されるオブジェクトに対して実施される操作は、全てLoggerフックにより監視される。
The Logger hook 107 is an additional function connected to the JDBC driver 106. The Logger hook 107 is, for example, Java. lang. reflect. This can be realized by using the function of the Proxy class. Then, the Logger object 104 calls the wrap method and wraps (connects) the Logger hook 107 to the JDBC driver 106 as shown in the following code.
connection = logger.wrap (connection)
connection is Java. which is a part of the JDBC driver 106. sql. It is a Connection type object. The wrap method connects the Logger hook 107 to a given connection and returns the result as a return value. Accordingly, the Logger hook 107 is connected to the connection, and all operations performed on the object generated from the connection and the connection are monitored by the Logger hook.
JDBCドライバ106を用いてRDB2からデータを読み込む場合、主にResultSetオブジェクトが用いられる。Loggerフック107は、このResultSetオブジェクトに対するデータの読み込む操作を検出する。そして、検出の通知を受けたLoggerオブジェクト104が、検出されたデータの読み込む操作に係るデータフローログを生成する。 When data is read from RDB2 using the JDBC driver 106, a ResultSet object is mainly used. The Logger hook 107 detects an operation of reading data for the ResultSet object. Then, the Logger object 104 that has received the detection notification generates a data flow log related to an operation of reading the detected data.
下記は、ResultSetオブジェクトを用いたデータの読み込みのコードの一例である。下記のコードでは、9行目に示されたrs.getObjectメソッドによりRDB2のデータが読み込まれるため、rs.getObjectメソッドが呼び出された時点でLoggerフック107がデータフローを検出する。
PreparedStatement ps = connection.prepareStatement(
“SELECT signal_id, history_value, signal_value”
+“FROM sample_schema.sample_table”
+“WHERE signal_id = ? ORDER BY history_time ASC LIMIT 1”
);
ps.setInt(1,1);
ResultSet rs = ps.executeQuery();
while(rs.next()){
Double value = (Double)rs.getObject(“signal_value”);
}
The following is an example of data reading code using a ResultSet object. In the code below, the rs. Since the RDB2 data is read by the getObject method, rs. When the getObject method is called, the Logger hook 107 detects a data flow.
PreparedStatement ps = connection.prepareStatement (
“SELECT signal_id, history_value, signal_value”
+ “FROM sample_schema.sample_table”
+ “WHERE signal_id =? ORDER BY history_time ASC LIMIT 1”
);
ps.setInt (1,1);
ResultSet rs = ps.executeQuery ();
while (rs.next ()) {
Double value = (Double) rs.getObject (“signal_value”);
}
なお、上記コードにおいて、データの読み込み先であるJavaオブジェクト102は、ResultSetオブジェクトではなく、ResultSetオブジェクトに対してgetObjectなどのデータ読み込みメソッドを呼び出した結果、戻り値として得られるものである。 In the above code, the Java object 102 that is the data reading destination is obtained as a return value as a result of calling a data reading method such as getObject on the ResultSet object, not on the ResultSet object.
図4は、データベースからデータを読み込む場合のデータフローログの生成処理のフローチャートである。このフローは、前述のとおり、ResultSetオブジェクトがgetObjectまたはgetStringなどのデータ読み込みメソッドを呼び出した時点にて開始される。 FIG. 4 is a flowchart of data flow log generation processing when data is read from the database. As described above, this flow starts when the ResultSet object calls a data reading method such as getObject or getString.
Loggerフック107は、ResultSetオブジェクトを生成したConnectionオブジェクトの自動コミット設定を確認し、自動コミット設定が有効であった場合は自動コミット設定を無効にする(S201)。自動コミット設定を無効にするのは、正確なデータフローログを生成するためである。 The Logger hook 107 confirms the automatic commit setting of the Connection object that generated the ResultSet object. If the automatic commit setting is valid, the Logger hook 107 invalidates the automatic commit setting (S201). The reason for invalidating the autocommit setting is to generate an accurate data flow log.
自動コミット設定の無効化は、Connectionオブジェクトに対しgetAutoCommitメソッドを呼び出して、自動コミット設定を調べた上で、setAutoCommitメソッドを呼び出すことにより実現される。詳細は後述する。 Invalidation of the automatic commit setting is realized by calling the getAutoCommit method for the Connection object, checking the automatic commit setting, and then calling the setAutoCommit method. Details will be described later.
次に、Javaオブジェクト102により、RDB2からデータが読み込まれる(S202)と、Loggerフック107がResultSetオブジェクトを用いて、読み込まれたデータが保管されていたRDB2の場所(位置)を示す情報を取得する(S203からS205)。RDB2の場所(位置)を示す情報は、データベース名、カタログ名、スキーマ名、テーブル名、列の名称、およびテーブルの主キーの名称と値である。ここでは、これらの情報をデータベース関連情報と称する。テーブルの主キーの名称と値が含まれることにより、RDB2のアクセス先テーブル202の何行目にデータが書き込まれているかを認識することができる。 Next, when data is read from the RDB2 by the Java object 102 (S202), the Logger hook 107 uses the ResultSet object to acquire information indicating the location (position) of the RDB2 where the read data is stored. (S203 to S205). Information indicating the location (position) of the RDB 2 is a database name, catalog name, schema name, table name, column name, and table primary key name and value. Here, these pieces of information are referred to as database related information. By including the name and value of the primary key of the table, it is possible to recognize in which row of the access destination table 202 of RDB2 the data is written.
まず、Loggerフック107はデータベース名を取得する(S203)。データベース名は、接続先のRDB2を示すURL文字列を取得することにより、取得することができる。URL文字列は、rs.getStatement().getConnection().getMetaData().getURL()メソッドを呼び出すことにより取得することができる。なお、rsは上記コードの6行目にて示すように、ResultSetオブジェクトを意味する。 First, the Logger hook 107 acquires a database name (S203). The database name can be acquired by acquiring a URL character string indicating the connection destination RDB2. The URL string is rs. getStatement (). getConnection (). getMetaData (). It can be obtained by calling the getURL () method. Note that rs means a ResultSet object as shown in the sixth line of the above code.
次に、Loggerフック107は、カタログ名、スキーマ名、テーブル名、列名を取得する(S204)。これらの名称は、rs.getMetaData()により取得したResultSetMetaData型オブジェクトに対し、それぞれgetCatalogName、getSchemaName、getTableName、getColumnNameメソッドを実施することにより、取得することができる。 Next, the Logger hook 107 acquires a catalog name, a schema name, a table name, and a column name (S204). These names are rs. It can be acquired by executing the getCatalogName, getSchemaName, getTableName, and getColumnName methods for the ResultSetMetaData type object acquired by getMetaData ().
次に、Loggerフック107は、テーブルの主キーの名称を取得する(S205)。主キーの名称は、取得したカタログ名、スキーマ名、テーブル名を、rs.getStatement().getConnection().getMetaData().getPrimaryKeys()メソッドの引数として渡すことにより、取得することができる。その後、Loggerフック107は、ResultSetオブジェクトrsに含まれるデータのうち、列名が主キーに含まれるものの値を取得し、主キーの名称と値のペアとして記憶する(S206)。 Next, the Logger hook 107 acquires the name of the primary key of the table (S205). The name of the primary key is the acquired catalog name, schema name, table name, rs. getStatement (). getConnection (). getMetaData (). It can be obtained by passing it as an argument of the getPrimaryKeys () method. Thereafter, the Logger hook 107 acquires the value of the data whose column name is included in the primary key among the data included in the ResultSet object rs, and stores it as a pair of the primary key name and value (S206).
なお、S203からS205の処理において実行されたメソッドは、ResultSetオブジェクトを介して、最終的にRDB2のシステムカタログ203へ問い合わせを行うものである。 Note that the method executed in the processing from S203 to S205 finally makes an inquiry to the system catalog 203 of RDB2 via the ResultSet object.
Loggerフック107が取得したこれらのデータベース関連情報は、Loggerオブジェクト104に渡され、Loggerフック107は、Connectionの自動コミット設定を無効化した場合は有効化する(S207)。Loggerオブジェクト104は、取得したデータの読み込み先であるJavaオブジェクト102のオブジェクト識別子をSystemクラス103から取得する(S208)。 The database related information acquired by the Logger hook 107 is passed to the Logger object 104, and the Logger hook 107 is activated when invalidating the connection auto-commit setting (S207). The Logger object 104 acquires the object identifier of the Java object 102 from which the acquired data is read from the system class 103 (S208).
Loggerオブジェクト104は、Loggerフック107から取得したデータベース関連情報と、Systemクラス103から取得したオブジェクト識別子とを用いて、データフローログを生成する(S209)。Loggerオブジェクト104は生成したデータフローログをログ受信部3に送信する(S210)。以上が、RDB2からデータを読み込む場合のデータフローログの生成処理のフローである。 The Logger object 104 generates a data flow log using the database related information acquired from the Logger hook 107 and the object identifier acquired from the System class 103 (S209). The Logger object 104 transmits the generated data flow log to the log receiving unit 3 (S210). The above is the flow of data flow log generation processing when data is read from the RDB2.
Loggerフック107がConnectionの自動コミット設定を無効化した理由は、ResultSetオブジェクトからのデータの読み込みと、その後のLoggerフック107からのシステムカタログ203への問い合わせが同一のトランザクションにて実行されるためである。これらの処理が別々のトランザクションにて実施されると、ResultSetからデータを読み込んだ直後に、別のプログラムがRDB2に命令を実行すると、問題が生ずる可能性がある。例えば、別のプログラムがRDB2にテーブル名の変更命令を行った後にシステムカタログ203から情報を読み込むと、当該情報がResultSetから読み込んだデータを正しく表現できなくなる。ゆえに、自動コミット設定を操作して、同一のトランザクションにて各処理を実行させることにより、上記のような問題が生じず、常に正しい情報をシステムカタログ203から取得できる。 The reason why the Logger hook 107 invalidates the connection auto-commit setting is that the data read from the ResultSet object and the subsequent inquiry to the system catalog 203 from the Logger hook 107 are executed in the same transaction. . If these processes are performed in separate transactions, a problem may occur if another program executes an instruction to the RDB 2 immediately after reading data from the ResultSet. For example, when information is read from the system catalog 203 after another program issues a table name change instruction to the RDB 2, the information cannot correctly represent the data read from the ResultSet. Therefore, by operating the automatic commit setting and executing each process in the same transaction, the above information does not occur and correct information can always be acquired from the system catalog 203.
なお、上記では、Connectionの自動コミット設定を操作したが、同様にgetTransactionIsolationメソッドとsetTransactionIsolationメソッドを用いてトランザクション分離レベルを一時的に操作してもよい。例えば、トランザクション分離レベルを一時的に最も強い分離レベルであるTRANSACTION_SERIALIZABLEにすることにより、しないときよりも確実に正しいデータフローログを取得できるようになる。 In the above description, the connection auto-commit setting is operated. However, similarly, the transaction isolation level may be temporarily operated using the getTransactionIsolation method and the setTransactionIsolation method. For example, when the transaction isolation level is temporarily set to TRANSACTION_SERIALIZEABLE, which is the strongest isolation level, a correct data flow log can be obtained more reliably than when not.
下記は、生成されたデータフローログの一例である。当該データフローログは、図2に示したアクセス先テーブル202における上から2番目の行(列名の行を除く)のsignal_vaue列(値は100.4)をJavaオブジェクト102が読み込んだ際のデータフローログである。
{
“src”: {
“type”:“rdb”,
“db_name”:“sample_db”,
“db_catalog”:“”,
“db_schema”:“sample_schema”,
“db_table”:“sample_table”,
“db_pk_signal_id”:“1”,
“db_pk_history_time”:“2015-09-07 10:05:48.392+09:00”,
“db_column”:“signal_value”
},
“dst”: {
“type”:“java_internal”,
“object_hash”:“337422011”
},
“time”:“1439172160332”
}
The following is an example of the generated data flow log. The data flow log is data when the Java object 102 reads the signal_value column (value is 100.4) in the second row (excluding the column name row) from the top in the access destination table 202 shown in FIG. It is a flow log.
{
“Src”: {
“Type”: “rdb”,
“Db_name”: “sample_db”,
“Db_catalog”: “”,
“Db_schema”: “sample_schema”,
“Db_table”: “sample_table”,
“Db_pk_signal_id”: “1”,
“Db_pk_history_time”: “2015-09-07 10: 05: 48.392 + 09: 00”,
“Db_column”: “signal_value”
},
“Dst”: {
“Type”: “java_internal”,
“Object_hash”: “337422011”
},
“Time”: “1439172160332”
}
データフローログの2行目から示されているsrcフィールドには、データフローの始点に関する情報が含まれている。ここでは、データフローの始点はRDB2内であり、srcフィールドには、RDB2内におけるデータの記録場所(カタログ名、スキーマ名、テーブル名、列の名前)などのデータベース関連情報が含まれる。 The src field shown from the second line of the data flow log includes information on the start point of the data flow. Here, the starting point of the data flow is in the RDB2, and the src field includes database related information such as the data recording location (catalog name, schema name, table name, column name) in the RDB2.
srcフィールド中のtypeフィールドの値“rdb”はデータベースを表している。db_name、db_catalog、db_schema、db_table、db_columnはそれぞれデータベース名、カタログ名、スキーマ名、テーブル名、列の名前を示す。例えば、データベース名は、sample_dbである。 The value “rdb” of the type field in the src field represents a database. db_name, db_catalog, db_schema, db_table, and db_column indicate the database name, catalog name, schema name, table name, and column name, respectively. For example, the database name is sample_db.
db_pk_signal_idフィールドとdb_pk_history_timeフィールドは、sample_tableの主キーを構成するペアである。このように、主キーがログに記録されているために、データが格納されていたアクセス先テーブル202の行まで特定することができる。timeフィールドはこのデータフローログが生成された時刻である。 The db_pk_signal_id field and the db_pk_history_time field are a pair that constitutes the primary key of sample_table. In this way, since the primary key is recorded in the log, it is possible to specify up to the row of the access destination table 202 where the data was stored. The time field is the time when this data flow log is generated.
データフローログの13行目から示されているdstフィールドには、データフローの終点に関する情報が含まれている。ここでは、データフローの終点はJavaオブジェクト102である。dstフィールド中の各フィールドは、前述のJavaプログラム1の内部のデータフローと同じである。 The dst field shown from the 13th line of the data flow log includes information regarding the end point of the data flow. Here, the end point of the data flow is the Java object 102. Each field in the dst field is the same as the internal data flow of the Java program 1 described above.
なお、データフローログには、上記で述べた情報の他にも様々な情報を含めてよい。例えば、RDB2に関するIPアドレス、待ち受けポート番号、または製品名およびそのバージョン番号などをデータフローログに含めてよい。また、RDB2にアクセスした際のトランザクションID、読み込み対象の行に対してRDB2が割り振っている行ID、読み込み対象の行の主キー以外の列の値などもデータフローログに含めてもよい。 The data flow log may include various information in addition to the information described above. For example, an IP address related to RDB2, a standby port number, or a product name and its version number may be included in the data flow log. Further, the transaction ID when accessing RDB2, the row ID assigned by RDB2 to the row to be read, the values of columns other than the primary key of the row to be read, and the like may be included in the data flow log.
また、図4に示したS206の処理において、Loggerフック107はResultSetオブジェクトから主キーの値を取得するが、一般に、ResultSetオブジェクト内に読み込む対象のテーブルの主キーが全て含まれているとは限らない。そこで、ResultSetオブジェクト内に主キーの値が含まれることを保証するために、Javaプログラム1がデータ読み込み命令(SQLにおけるSELECT文)をRDB2へ発行したときは、Loggerフック107が当該データ読み込み命令を捕捉・解析を行い、読み込み対象のテーブルの主キーとともに読み込みを行うように、当該データ読み込み命令を書き換えた上で、RDB2へ送信するようにしてもよい。読み込み命令の補足は、JDBCにおけるConnectionクラス、Statementクラス、PreparedStatementクラスなどへのメソッド呼び出しを監視することで実現できる。これにより、Javaプログラム1がRDB2から読み込むデータを問わず、正確なデータフローログを記録することができる。 In the process of S206 shown in FIG. 4, the Logger hook 107 acquires the value of the primary key from the ResultSet object. However, generally, the primary key of the table to be read is not necessarily included in the ResultSet object. Absent. Therefore, when the Java program 1 issues a data read command (a SELECT statement in SQL) to the RDB 2 in order to guarantee that the ResultSet object includes the primary key value, the Logger hook 107 issues the data read command. The data read command may be rewritten and transmitted to the RDB 2 so that the data is captured and analyzed and read together with the primary key of the table to be read. Reading instructions can be supplemented by monitoring method calls to the Connection class, Statement class, PreparedStatement class, etc. in the JDBC. As a result, an accurate data flow log can be recorded regardless of the data read from the RDB 2 by the Java program 1.
このように、Loggerオブジェクト104が、Systemクラス103からデータフローの始点を示すオブジェクト識別子を取得する。また、Loggerフック107がRDB2に問い合わせを行うことにより、データフローの終点を示すデータベース関連情報を取得する。そして、Loggerオブジェクト104は、データフローの始点を示す情報および終点を示す情報が記録されたデータフローログを生成する。これにより、生成されたデータフローログに基づき、Javaプログラム1がRDB2からデータを読み込むデータフローを監視することができる。 As described above, the Logger object 104 acquires an object identifier indicating the start point of the data flow from the System class 103. Further, the Logger hook 107 makes an inquiry to the RDB 2 to acquire database related information indicating the end point of the data flow. The Logger object 104 generates a data flow log in which information indicating the start point of the data flow and information indicating the end point are recorded. Accordingly, it is possible to monitor the data flow in which the Java program 1 reads data from the RDB 2 based on the generated data flow log.
(3)Javaプログラム1からRDB2へデータを書き込むデータフロー
Javaプログラム1からRDB2へデータを書き込む場合も、Javaプログラム1がRDB2からデータを読み込む場合と同様、データフローに関する情報は、Loggerフック107により集められる。
(3) Data flow for writing data from Java program 1 to RDB2 When data is written from Java program 1 to RDB2, information related to the data flow is collected by Logger hook 107, as is the case when Java program 1 reads data from RDB2. It is done.
JDBCドライバ106を用いてRDB2へデータを書き込む場合、主にPreparedStatementオブジェクトが用いられる。Loggerフック107は、このPreparedStatementオブジェクトによるデータの書き込む操作を検出する。 When writing data to the RDB 2 using the JDBC driver 106, a PreparedState object is mainly used. The Logger hook 107 detects an operation of writing data by this PreparedStatement object.
下記は、PreparedStatementオブジェクトを用いたデータの書き込みコードの一例である。
PreparedStatement ps = connection.prepareStatement(
“UPDATE sample_schema.sample_table”
+ “SET signal_value = ?”
+ “WHERE signal_id = ?”
);
ps.setObject(1, write_value);
ps.setInt(2, 2);
ps.execute();
The following is an example of a data write code using a PreparedStatement object.
PreparedStatement ps = connection.prepareStatement (
“UPDATE sample_schema.sample_table”
+ “SET signal_value =?”
+ “WHERE signal_id =?”
);
ps.setObject (1, write_value);
ps.setInt (2, 2);
ps.execute ();
上記に示されたデータの書き込みコードは、3つの手続きから構成されている。まず、1行目に示すように、(i)connection.prepareStatementにより、RDB2に対するSQL命令を有するPreparedStatementオブジェクトが生成される。上記コードでは、3行目から5行目がSQL命令である。次に、6と7行目に示すように、(ii)PreparedStatementに対してJavaオブジェクト102およびパラメータがバインドされる。そして、8行目に示すように、(iii)ps.executeにより、データがRDB2に書き込まれる。 The data write code shown above is composed of three procedures. First, as shown in the first line, (i) connection. PreparedStatement generates a PreparedStatement object having an SQL instruction for RDB2. In the above code, the 3rd to 5th lines are SQL instructions. Next, as shown in the 6th and 7th lines, (ii) the Java object 102 and the parameter are bound to the PreparedStatement. Then, as shown in the eighth line, (iii) ps. With execute, data is written to RDB2.
上記(ii)の手続きは、RDB2へ発行するSQL命令内のプレースホルダーに対し、Javaオブジェクト102を対応付ける(バインドする)ものである。これにより、Javaプログラム1はデータをRDB2へ書き込むことができる。 The procedure (ii) above associates (binds) the Java object 102 with the placeholder in the SQL instruction issued to the RDB 2. As a result, the Java program 1 can write data to the RDB 2.
なお、上記コードにおいて、データの書き込み元であるJavaオブジェクト102は、PreparedStatementオブジェクトではなく、PreparedStatementオブジェクトにバインドされたほうである。 In the above code, the Java object 102 that is the data write source is not the PreparedState object, but is bound to the PreparedState object.
上記コードにおけるデータフローログの生成処理は、3つの処理に分けられる。まず上記(i)の手続きが行われると、Loggerフック107は、バインド一時保存部105に、データ書き込みに係る情報を格納する処理を行う。次に、上記(ii)の手続きが行われると、Loggerフック107は、バインドされたJavaオブジェクト102の識別子を取得し、バインド一時保存部105に格納したデータと対応付ける。そして、上記(iii)の手続きが行われると、Loggerフック107は、データが書き込まれたアクセス先テーブル202の行を判別するための主キーの情報を取得する。そして、Loggerオブジェクトがデータフローログを生成する。 The data flow log generation process in the above code is divided into three processes. First, when the procedure (i) is performed, the Logger hook 107 performs processing for storing information related to data writing in the temporary binding storage unit 105. Next, when the procedure (ii) is performed, the Logger hook 107 acquires the identifier of the bound Java object 102 and associates it with the data stored in the temporary binding storage unit 105. When the procedure (iii) is performed, the Logger hook 107 acquires primary key information for determining the row of the access destination table 202 in which data is written. The Logger object then generates a data flow log.
図5は、バインド一時保存部105に保存される内容の一例を示す図である。バインド一時保存部105は、PreparedStatementオブジェクトと、RDB2内のアクセス先テーブル202の情報(カタログ名、スキーマ名、テーブル名、列の名前)と、プレースホルダーインデックスと、バインドオブジェクトとの4種のデータを相互に対応付けて管理するためのデータ構造を有する。 FIG. 5 is a diagram illustrating an example of contents stored in the bind temporary storage unit 105. The temporary binding storage unit 105 stores four types of data including a prepared statement object, information on the access destination table 202 in the RDB 2 (catalog name, schema name, table name, column name), placeholder index, and bind object. It has a data structure for managing in association with each other.
PreparedStatementオブジェクト識別子は、PreparedStatementオブジェクトの識別子である。プレースホルダーインデックスは、プレースホルダーがSQL命令内に現れる順序番号である。バインドオブジェクト識別子は、バインドされたJavaオブジェクト102の識別子である。 The PreparedStatement object identifier is an identifier of a PreparedStatement object. The placeholder index is a sequence number in which the placeholder appears in the SQL instruction. The bind object identifier is an identifier of the bound Java object 102.
一般に、Javaプログラム1からRDB2へのデータ書き込みでは、SQL命令内に書き込み先の列の名前と書き込むデータを表すプレースホルダーが記される。例えば、上記コードでは、“signal_value = ?”という文字列が、列の名前である“signal_value”とプレースホルダーである“?”の組を表している。 In general, when writing data from the Java program 1 to the RDB 2, a placeholder representing the name of the write destination column and the data to be written is written in the SQL instruction. For example, in the above code, the character string “signal_value =?” Represents a set of “signal_value” that is the name of the column and “?” That is the placeholder.
上記のsignal_valueとペアになるプレースホルダーの場合、SQL命令内の最初のプレースホルダーであるため、そのインデックスは1である。ゆえに、図5の1行目のプレースホルダーインデックスに1が格納されている。一般に、1つのSQL命令内には、列の名前とプレースホルダーインデックスのペアが複数存在する。その場合はペアごとに別々の行がバインド一時保存部105に生成される。 In the case of the placeholder paired with the above signal_value, the index is 1 because it is the first placeholder in the SQL instruction. Therefore, 1 is stored in the placeholder index in the first row in FIG. Generally, there are a plurality of pairs of column names and placeholder indexes in one SQL instruction. In that case, a separate line is generated in the temporary binding storage unit 105 for each pair.
バインド一時保存部105は、Javaプログラム1のメモリ上に確保されてもよいし、RDB2上に確保されてもよいし、その他の任意の記憶領域に確保されてもよい。なお、バインド一時保存部105に保存される各データ(各行)は、該当するPreparedStatementオブジェクトが用いられなくなった時点で削除してもよい。 The bind temporary storage unit 105 may be secured on the memory of the Java program 1, may be secured on the RDB 2, or may be secured on any other storage area. Each data (each row) stored in the temporary binding storage unit 105 may be deleted when the corresponding prepared statement object is no longer used.
図6は、バインド一時保存部105へのデータ記録処理のフローチャートである。バインド一時保存部105への記録は、上記(i)のconnection.prepareStatementメソッドの実行時に行われる処理と、(ii)のJavaオブジェクト102のバインドの実行時に行われる処理との2段階に分けて実施される。図6(A)に、(i)のconnection.prepareStatementメソッドの実行時に行われる処理のフローを、図6(B)に、(ii)のJavaオブジェクト102のバインド時に行われる処理のフローを示す。 FIG. 6 is a flowchart of a data recording process to the bind temporary storage unit 105. Recording to the temporary binding storage unit 105 is performed by using the connection. The processing is performed in two stages, that is, processing that is performed when the prepareStatement method is executed and processing that is performed when the Java object 102 is bound in (ii). FIG. 6A shows the connection. FIG. 6B shows the flow of processing that is performed when the prepareStatement method is executed. FIG. 6B shows the flow of processing that is performed when the Java object 102 is bound in (ii).
まず、図6(A)に示すprepareStatementメソッドの実行時に行われる処理について述べる。本フローは、Javaプログラム1がConnectionオブジェクトに対するprepareStatementメソッド呼び出しを実行したときに開始される。Loggerフック107は、prepareStatementメソッドの戻り値であるPreparedStatementオブジェクトを取得する(S301)。次に、Loggerフック107がSQL命令文字列を解析し、書き込み先のカタログ名、スキーマ名、テーブル名、およびプレースホルダーインデックス、と対応する列の名前のペアを取得する(S302)。これにより、バインド一時保存部105のデータ構造のうちバインドオブジェクト識別子以外の情報が取得される。Loggerフック107は、取得したこれらの情報をバインド一時保存部105に記録する(S303)。 First, a process performed when the prepareStatement method shown in FIG. This flow is started when the Java program 1 executes a prepareStatement method call for the Connection object. The Logger hook 107 acquires a PreparedStatement object that is a return value of the prepareStatement method (S301). Next, the Logger hook 107 analyzes the SQL instruction character string, and acquires a pair of column names corresponding to the catalog name, schema name, table name, and placeholder index of the write destination (S302). As a result, information other than the bind object identifier in the data structure of the temporary bind storage unit 105 is acquired. The Logger hook 107 records the acquired information in the bind temporary storage unit 105 (S303).
なお、PreparedStatementオブジェクト識別子は、Systemクラス103から取得することができる。 The PreparedStatement object identifier can be acquired from the System class 103.
次に、図6(B)に示すJavaオブジェクト102のバインド時に行われる処理について述べる。本フローは、Javaプログラム1がPreparedStatementオブジェクトに対するsetObjectなどのメソッド呼び出しを実行したときに開始される。Loggerフック107は、setObjectなどのメソッドに引数として与えられるプレースホルダーインデックスおよびバインドされるJavaオブジェクト102、並びに、メソッドが呼ばれたPreparedStatementオブジェクトのオブジェクト識別子を取得する(S401)。Loggerフック107は、プレースホルダーインデックスとPreparedStatementオブジェクト識別子に基づき、バインド一時保存部105の各行を検索する(S402)。プレースホルダーインデックスとPreparedStatementオブジェクト識別子が同一の値である行が存在したときは(S403のYES)、Loggerフック107は、検出した行に対し、バインドされるJavaオブジェクト102のオブジェクト識別子をバインドオブジェクト識別子として記録する(S404)。プレースホルダーインデックスとPreparedStatementオブジェクト識別子が同一の値である行が存在しないときは(S403のNO)、Loggerフック107は何もせず、本フローは終了する。上記2つの手続きにより、バインド一時保存部105への記録が完了する。 Next, processing that is performed when the Java object 102 shown in FIG. 6B is bound will be described. This flow is started when the Java program 1 executes a method call such as setObject for the PreparedStatement object. The Logger hook 107 acquires the placeholder index given as an argument to a method such as setObject and the Java object 102 to be bound, and the object identifier of the PreparedStatement object from which the method is called (S401). The Logger hook 107 searches each row of the temporary binding storage unit 105 based on the placeholder index and the prepared statement object identifier (S402). When there is a row in which the placeholder index and the prepared statement object identifier have the same value (YES in S403), the Logger hook 107 uses the object identifier of the Java object 102 to be bound as the bind object identifier for the detected row. Record (S404). If there is no row having the same value for the placeholder index and the PreparedStatement object identifier (NO in S403), the Logger hook 107 does nothing and this flow ends. Recording to the bind temporary storage unit 105 is completed by the above two procedures.
図7は、データベースへデータを書き込む場合のデータフローログの生成処理のフローチャートである。このフローチャートは、前述の通り、上記(iii)のPreparedStatementオブジェクトに対して、データ書き込み実行メソッド、例えば、execute、executeUpdateメソッドなどが呼び出された際に開始される。 FIG. 7 is a flowchart of data flow log generation processing when data is written to the database. As described above, this flowchart is started when a data write execution method such as execute or executeUpdate method is called for the PreparedStatement object of (iii) above.
まず、Loggerフック107がConnectionオブジェクトの自動コミット設定を一時的に無効化する(S501)。この無効化は、図4に示したRDB2からデータを読み込む場合のデータフローログの生成処理において実施されたのと同じ方法および理由による。また、Loggerフック107は、一時ログテーブル204の全内容を消去しておく(S502)。 First, the Logger hook 107 temporarily invalidates the automatic commit setting of the Connection object (S501). This invalidation is based on the same method and reason as that performed in the data flow log generation process when data is read from the RDB 2 shown in FIG. Further, the Logger hook 107 deletes all the contents of the temporary log table 204 (S502).
そして、RDB2に対しデータが書き込まれる(S503)と、アクセス先テーブル202に設定されたトリガーが、データ書き込み先の情報を一時ログテーブル204へ記録する(S504)。 When data is written to the RDB 2 (S503), the trigger set in the access destination table 202 records data write destination information in the temporary log table 204 (S504).
本実施形態ではアクセス先テーブル202に予めトリガーを設定しておく。「トリガー」とは、テーブルに対して何らかの操作が実行された時に、RDB2内で実行される手続きを意味する。ここでは、トリガーがアクセス先テーブル202に設定され、アクセス先テーブル202においてデータ書き込み操作が実行された時に起動されたトリガーが、一時ログテーブル204へデータ書き込み先の情報を記録するように設定しておく。なお、多くのRDB2製品はトリガーを設定・実行する機能を提供しており、当該機能を用いればよい。 In this embodiment, a trigger is set in advance in the access destination table 202. “Trigger” means a procedure executed in the RDB 2 when an operation is performed on a table. Here, the trigger is set in the access destination table 202, and the trigger activated when the data write operation is executed in the access destination table 202 is set to record the data write destination information in the temporary log table 204. deep. Many RDB2 products provide a function for setting and executing a trigger, and the function may be used.
図8は、一時ログテーブル204の内容の一例を示す図である。一時ログテーブル204は、書き込み操作が実際に行われたテーブルのカタログ名、スキーマ名、テーブル名、書き込み先の行の主キーの名称と値、および書き込み先の列の名前を保存する。一度の書き込み操作において、複数のテーブル、複数の行、または複数の列に対する書き込みが発生した場合、当該書き込みに応じた複数の行が一時ログテーブル204に書き込まれる。なお、書き込みが実施された列の名前などの情報は、システムカタログ203から適宜読み込まれ、一時ログテーブル204へ書き込まれる。 FIG. 8 is a diagram illustrating an example of the contents of the temporary log table 204. The temporary log table 204 stores a catalog name, a schema name, a table name, a name and a value of a primary key of a write destination row, and a name of a write destination column. When writing to a plurality of tables, a plurality of rows, or a plurality of columns occurs in one writing operation, a plurality of rows corresponding to the writing are written to the temporary log table 204. Note that information such as the name of the column on which writing has been performed is appropriately read from the system catalog 203 and written to the temporary log table 204.
図7のフローの説明に戻る。トリガーが一時ログテーブル204に書き込み先のデータベース情報を書き込むと、Loggerフック107がRDB2から一時ログテーブル204の情報を読み取り、一時ログテーブル204の情報をLoggerオブジェクト104へ転送する(S505)。また、Loggerフック107がConnectionの自動コミット設定を元に戻す(S506)。 Returning to the description of the flow in FIG. When the trigger writes the write destination database information to the temporary log table 204, the Logger hook 107 reads the information of the temporary log table 204 from the RDB 2 and transfers the information of the temporary log table 204 to the Logger object 104 (S505). Further, the Logger hook 107 restores the connection auto-commit setting (S506).
Loggerオブジェクト104は、Loggerフック107から一時ログテーブル204の情報を取得し(S507)、当該一時ログテーブル204の情報に基づき、バインド一時保存部105を検索し、バインドオブジェクト識別子を取得する(S508)。 The Logger object 104 acquires information on the temporary log table 204 from the Logger hook 107 (S507), searches the bind temporary storage unit 105 based on the information on the temporary log table 204, and acquires a bind object identifier (S508). .
そして、Loggerオブジェクト104は、データベース名、カタログ名、スキーマ名、テーブル名、主キーの名称と値、列の名前、およびバインドオブジェクト識別子から成るデータの組み合わせに対し、下記に示すようなデータフローログを生成する(S509)。データの組み合わせが複数取得されたときは、当該データの組み合わせそれぞれに対して、データフローログを生成する。
{
“src”: {
“type”:“java_internal”,
“object_hash”:“337422011”
},
“dst”: {
“type”:“rdb”,
“db_name”:“sample_db”,
“db_catalog”:“”,
“db_schema”:“sample_schema”,
“db_table”:“sample_table”,
“db_pk_signal_id”:“2”,
“db_pk_history_time”:“2015-09-07 10:10:53.334+09:00”,
“db_column”:“signal_value”
},
“time”:“1439172160332”
}
上記データフローログのsrcフィールド内にあるobject_hashフィールドがバインドオブジェクト識別子を示す。dstフィールド内の各フィールドは、書き込み先のRDB2の情報を示すものであり、(2)Javaプログラム1がRDB2からデータを読み込む場合のデータフローログと同じである。timeフィールドはこのデータフローログが生成された時刻を表す。
The Logger object 104 includes a data flow log as shown below for a combination of data including a database name, catalog name, schema name, table name, primary key name and value, column name, and bind object identifier. Is generated (S509). When a plurality of data combinations are acquired, a data flow log is generated for each data combination.
{
“Src”: {
“Type”: “java_internal”,
“Object_hash”: “337422011”
},
“Dst”: {
“Type”: “rdb”,
“Db_name”: “sample_db”,
“Db_catalog”: “”,
“Db_schema”: “sample_schema”,
“Db_table”: “sample_table”,
“Db_pk_signal_id”: “2”,
“Db_pk_history_time”: “2015-09-07 10: 10: 53.334 + 09: 00”,
“Db_column”: “signal_value”
},
“Time”: “1439172160332”
}
The object_hash field in the src field of the data flow log indicates the bind object identifier. Each field in the dst field indicates information on the write destination RDB2, and (2) is the same as the data flow log when the Java program 1 reads data from the RDB2. The time field represents the time when this data flow log was generated.
Loggerオブジェクト104は、生成されたデータフローログを、ログ受信部3に送信する(S510)。以上が、データフローの報告処理のフローである。 The Logger object 104 transmits the generated data flow log to the log receiving unit 3 (S510). The above is the flow of the data flow reporting process.
なお、上記データフローの報告処理では、「主キーの名称と値」が用いられたが、これに代わり、RDB2内部において各行を識別するために用いられる行IDを用いてもよい。また、上記のデータフローログには、その他様々な関連情報を含めてもよい。 In the data flow reporting process, “name and value of primary key” are used, but instead of this, a row ID used to identify each row in the RDB 2 may be used. The data flow log may include various other related information.
このように、Loggerフック107が、Systemクラス103からデータフローの始点を示すバインドオブジェクト識別子を取得する。また、Loggerフック107が、バインド一時保存部105の情報と一時ログテーブルの情報とに基づき、データフローの終点を示すデータベース関連情報を取得する。そして、Loggerオブジェクト104は、データフローの始点を示す情報および終点を示す情報が記録されたデータフローログを生成する。これにより、生成されたデータフローログに基づき、Javaプログラム1がRDB2へデータを書き込むデータフローを監視することができる。 Thus, the Logger hook 107 acquires the bind object identifier indicating the start point of the data flow from the System class 103. Further, the Logger hook 107 acquires database related information indicating the end point of the data flow based on the information of the temporary binding storage unit 105 and the information of the temporary log table. The Logger object 104 generates a data flow log in which information indicating the start point of the data flow and information indicating the end point are recorded. As a result, the data flow in which the Java program 1 writes data to the RDB 2 can be monitored based on the generated data flow log.
以上のように、本実施形態によれば、(1)Javaプログラム1内部のデータフローと、(2)Javaプログラム1がRDB2からデータを読み込むデータフローと、(3)Javaプログラム1からRDB2へデータを書き込むデータフローとを、統一された形式にて記録することができる。これにより、Javaプログラム1とRDB2を横断するデータフローを詳細かつ網羅的に記録することができる。例えば、データがデータベースから読み込まれ、Javaプログラム内部で変換され、データベースへ書き込まれ、そのデータをまた別のJavaプログラムが読み出すといったデータフローも記録することができる。また、本実施形態によれば、データそのものに対し、タグなどのメタデータを付与する必要がないため、容易に実現することができる。 As described above, according to the present embodiment, (1) the data flow in the Java program 1, (2) the data flow in which the Java program 1 reads data from the RDB 2, and (3) the data from the Java program 1 to the RDB 2 Can be recorded in a unified format. As a result, the data flow across the Java program 1 and the RDB 2 can be recorded in detail and exhaustively. For example, a data flow can be recorded in which data is read from a database, converted inside a Java program, written to the database, and read by another Java program. In addition, according to the present embodiment, it is not necessary to add metadata such as a tag to the data itself, which can be easily realized.
(第2の実施形態)
第1の実施形態では、Javaプログラム1とRDB2にて構成されるシステムにおけるデータフローを記録する方法について示した。本実施形態では、Javaプログラム1とファイルサービス4にて構成されるシステムのデータフローを記録する方法について説明する。そして、第2コンポーネントがファイルサービス4であっても、データフローが追跡可能であることを示す。なお、第1の実施形態と重複する説明は省略する。
(Second Embodiment)
In the first embodiment, the method for recording the data flow in the system configured by the Java program 1 and the RDB 2 has been described. In this embodiment, a method for recording a data flow of a system constituted by the Java program 1 and the file service 4 will be described. Even if the second component is the file service 4, the data flow can be traced. Note that a description overlapping that of the first embodiment is omitted.
図9は、第2の実施形態に係る計算機システム全体の概略構成の一例を示すブロック図である。第2の実施形態に係る計算機システムは、Javaプログラム1のアクセス先がファイルサービス4である点が第1の実施形態と異なる。また、それに伴い、Javaプログラム1は、JDBCドライバ106の代わりにRandomAccessFileオブジェクト108を、バインド一時保存部105の代わりにアクセス先ファイル名一時保存部109を有する。 FIG. 9 is a block diagram illustrating an example of a schematic configuration of the entire computer system according to the second embodiment. The computer system according to the second embodiment is different from the first embodiment in that the access destination of the Java program 1 is the file service 4. Accordingly, the Java program 1 includes a Random Access File object 108 instead of the JDBC driver 106 and an access destination file name temporary storage unit 109 instead of the temporary binding storage unit 105.
ファイルサービス4は、アクセス先ファイル401と、ファイルサービスインタフェース(I/F)402と、ファイルポインタ管理部403とを有する。ファイルサービス4は、Javaプログラム1に対して、ファイルおよびそのファイル内部のデータの授受を行う。 The file service 4 includes an access destination file 401, a file service interface (I / F) 402, and a file pointer management unit 403. The file service 4 sends and receives files and data in the files to the Java program 1.
アクセス先ファイル401は内部にデータを有し、Javaプログラム1にて当該データの読み書きが行われる。ファイルサービスI/F402は、Javaプログラム1とのファイルとデータの授受を行うためのインタフェースである。 The access destination file 401 has data therein, and the Java program 1 reads and writes the data. The file service I / F 402 is an interface for exchanging files and data with the Java program 1.
ファイルポインタ管理部403は、ファイルポインタを管理する。ファイルポインタとは、アクセス先ファイル401内にて現在行われているデータの読み書きの場所(位置)を示す情報である。ファイルポインタは、ファイル先頭からのバイト数で表される。 The file pointer management unit 403 manages file pointers. The file pointer is information indicating the location (position) of data reading / writing currently performed in the access destination file 401. The file pointer is represented by the number of bytes from the beginning of the file.
一方、Javaプログラム1のRandomAccessFileオブジェクト108は、Javaの標準ライブラリに含まれる機能である。Javaプログラム1は、RandomAccessFileオブジェクト108を用いて、ファイルシステムI/Fとデータの授受を行う。また、Loggerオブジェクト104は、RandomAccessFileオブジェクト108にLoggerフック107を接続し、RandomAccessFileオブジェクト108を介したデータフローを監視する。 On the other hand, the Random Access File object 108 of the Java program 1 is a function included in the Java standard library. The Java program 1 uses the RandomAccessFile object 108 to exchange data with the file system I / F. The Logger object 104 connects the Logger hook 107 to the Random Access File object 108 and monitors the data flow through the Random Access File object 108.
アクセス先ファイル名一時保存部109は、RandomAccessFileオブジェクト108がアクセスする先のファイル名を一時的に保存する。 The access destination file name temporary storage unit 109 temporarily stores the file name to which the Random Access File object 108 accesses.
第2の実施形態に係る計算機システムでは、下記3種類のデータフローを想定し、監視する。
(1)Javaプログラム1内部のデータフロー
(2)Javaプログラム1がファイルからデータを読み込むデータフロー
(3)Javaプログラム1からファイルへデータを書き込むデータフロー
(1)のJavaプログラム1内部のデータフローは、第1の実施形態と同様であるため省略する。
In the computer system according to the second embodiment, the following three types of data flows are assumed and monitored.
(1) Data flow in Java program 1 (2) Data flow in which Java program 1 reads data from a file (3) Data flow in which data is written from Java program 1 to a file (1) The data flow in Java program 1 is Since it is the same as that of 1st Embodiment, it abbreviate | omits.
Javaプログラム1とファイルサービス4との間のデータフローを記録するために、Javaプログラム1は、Loggerオブジェクト104を通じてLoggerフック107が接続されたRandomAccessFileオブジェクト108を生成する。RandomAccessFileオブジェクト108の生成は、例えば、Loggerオブジェクト104に対してopenFileメソッドなどを呼び出すことで実現される。下記は、openFileメソッドの呼び出しのコードの一例である。
RandomAccessFile file = logger.openFile(“/home/user/sample.dat”, “rw”);
In order to record the data flow between the Java program 1 and the file service 4, the Java program 1 generates a Random Access File object 108 to which the Logger hook 107 is connected through the Logger object 104. The generation of the RandomAccessFile object 108 is realized by calling an openFile method or the like on the Logger object 104, for example. The following is an example of the code for calling the openFile method.
RandomAccessFile file = logger.openFile (“/ home / user / sample.dat”, “rw”);
openFileメソッドは、与えられた引数を用いてRandomAccessFileオブジェクト108を生成する。上記コードでは、“sample.dat”と“rw”が引数である。そして、openFileメソッドは、RandomAccessFileオブジェクト108にLoggerフック107を接続させる。また、その際、Loggerオブジェクト104は、アクセス先ファイル名一時保存部109にアクセス先のファイル名などの情報を保存する。 The openFile method generates a RandomAccessFile object 108 using a given argument. In the above code, “sample.dat” and “rw” are arguments. Then, the openFile method connects the Logger hook 107 to the RandomAccessFile object 108. At that time, the Logger object 104 stores information such as the file name of the access destination in the access destination file name temporary storage unit 109.
図10は、アクセス先ファイル名一時保存部109に保存された情報の一例を示す図である。Loggerオブジェクト104は、logger.openFileメソッドの第1引数と、RandomAccessFileオブジェクト108のオブジェクト識別子を、アクセス先ファイル名一時保存部109に格納する。上記のコードでは、“/home/user/sample.dat”がアクセス先ファイル401名として保存される。これにより、RandomAccessFileオブジェクト108と、RandomAccessFileオブジェクト108がアクセスしているファイルの名前とが関連付けられる。なお、アクセス先ファイル名一時保存部109に保存された情報は、当該RandomAccessFileオブジェクト108が用いられなくなった時点で削除してもよい。 FIG. 10 is a diagram illustrating an example of information stored in the access destination file name temporary storage unit 109. The Logger object 104 is a logger. The first argument of the openFile method and the object identifier of the RandomAccessFile object 108 are stored in the access destination file name temporary storage unit 109. In the above code, “/home/user/sample.dat” is stored as the name of the access destination file 401. Thereby, the Random Access File object 108 is associated with the name of the file accessed by the Random Access File object 108. The information stored in the access destination file name temporary storage unit 109 may be deleted when the Random Access File object 108 is no longer used.
RandomAccessFileオブジェクト108を用いたデータ読み込みでは、RandomAccessFileオブジェクト108に対してreadやreadLineといったメソッドを呼び出すことによってJavaオブジェクト102へデータが読み込まれる。 In data reading using the RandomAccessFile object 108, data is read into the Java object 102 by calling methods such as read and readLine on the RandomAccessFile object 108.
(2)Javaプログラム1がファイルからデータを読み込むデータフロー
図11は、ファイルからデータを読み込む場合のデータフローログの生成処理のフローチャートである。このフローは、Loggerフック107によりRandomAccessFileオブジェクト108に対するデータ読み込みメソッドが呼び出された時点にて開始される。
(2) Data flow in which Java program 1 reads data from a file FIG. 11 is a flowchart of data flow log generation processing when data is read from a file. This flow is started when a data reading method for the RandomAccessFile object 108 is called by the Logger hook 107.
Loggerフック107は、データが読み込まれたファイルの場所を得るために、データを読み込む前に、ファイルポインタをファイルポインタ管理部403から取得する(S601)。その後、実際にファイルからデータが読み込まれる(S602)と、Loggerフック107は再びファイルポインタをファイルポインタ管理部403から取得する(S603)。これにより、データの読み込み前後におけるファイルポインタを取得する。 The Logger hook 107 acquires a file pointer from the file pointer management unit 403 before reading the data in order to obtain the location of the file from which the data has been read (S601). Thereafter, when data is actually read from the file (S602), the Logger hook 107 acquires the file pointer from the file pointer management unit 403 again (S603). Thereby, the file pointer before and after reading the data is acquired.
なお、Loggerフック107は、RandomAccessFileオブジェクト108のgetFilePointerメソッドを呼び出すことにより、ファイルポインタ管理部403からファイルポインタを取得することができる。 The Logger hook 107 can acquire the file pointer from the file pointer management unit 403 by calling the getFilePointer method of the RandomAccessFile object 108.
Loggerフック107は、取得したRandomAccessFileオブジェクト108、データ読み込み先のJavaオブジェクト102、読み込み前のファイルポインタ、読み込み後のファイルポインタをLoggerオブジェクト104へ転送する(S604)。Loggerフック107から情報を受け取ったLoggerオブジェクト104は、RandomAccessFileオブジェクト108を用いて、アクセス先ファイル名一時保存部109を検索し、ファイル名を取得する(S605)。そして、Loggerオブジェクト104は、データ読み込み先のJavaオブジェクト102のオブジェクト識別子をSystemクラス103から取得する(S606)。 The Logger hook 107 transfers the acquired Random Access File object 108, the data reading destination Java object 102, the file pointer before reading, and the file pointer after reading to the Logger object 104 (S604). The Logger object 104 that has received the information from the Logger hook 107 searches the access destination file name temporary storage unit 109 using the RandomAccessFile object 108 and acquires the file name (S605). Then, the Logger object 104 acquires the object identifier of the Java object 102 that is the data reading destination from the System class 103 (S606).
Loggerオブジェクト104は、取得したアクセス先ファイル401名、読み込み前のファイルポインタ、読み込み後のファイルポインタ、読み込み先Javaオブジェクト102のオブジェクト識別子から、データフローログを生成する(S607)。Loggerオブジェクト104は、生成されたデータフローログをログ受信部3に送信する(S608)。以上がファイルからデータを読み込む場合のデータフローログの生成処理である。 The Logger object 104 generates a data flow log from the acquired access destination file 401 name, the file pointer before reading, the file pointer after reading, and the object identifier of the reading Java object 102 (S607). The Logger object 104 transmits the generated data flow log to the log receiving unit 3 (S608). The above is data flow log generation processing when data is read from a file.
下記は、ファイルからデータを読み込む場合のデータフローログの一例である。
{
“src”: {
“type”:“file”,
“path”:“/home/user/sample.dat”,
“from”:“10”,
“to”:“32”
},
“dst”: {
“type”:“java_internal”,
“object_hash”:“337422011”
},
“time”:“1439172160332”
}
srcフィールドが、アクセス先ファイル401内のデータを表し、dstフィールドが読み込み先のJavaオブジェクト102を表す。srcフィールドのtypeフィールドの値“file”は、srcフィールドがファイル内のデータを表していることを示す。srcフィールドのpathフィールドはアクセス先ファイル401名である。srcフィールドのfromフィールドは、読み込み前のファイルポインタを示す。srcフィールドのtoフィールドは、読み込み後のファイルポインタを示す。
The following is an example of a data flow log when reading data from a file.
{
“Src”: {
“Type”: “file”,
“Path”: “/ home / user / sample.dat”,
“From”: “10”,
“To”: “32”
},
“Dst”: {
“Type”: “java_internal”,
“Object_hash”: “337422011”
},
“Time”: “1439172160332”
}
The src field represents data in the access destination file 401, and the dst field represents the Java object 102 to be read. The value “file” in the type field of the src field indicates that the src field represents data in the file. The path field of the src field is the name of the access destination file 401. The from field of the src field indicates a file pointer before reading. The to field of the src field indicates the file pointer after reading.
このように、Loggerフック107が、ファイルポインタ管理部403から、データフローの始点を示すファイルポインタを取得する。また、Loggerオブジェクト104が、Systemクラス103からデータフローの終点を示すオブジェクト識別子を取得する。そして、Loggerオブジェクト104は、データフローの始点を示す情報および終点を示す情報が記録されたデータフローログを生成する。これにより、生成されたデータフローログに基づき、Javaプログラム1がファイルサービス4からファイルのデータを読み込むデータフローを監視することができる。 As described above, the Logger hook 107 acquires the file pointer indicating the start point of the data flow from the file pointer management unit 403. Further, the Logger object 104 acquires an object identifier indicating the end point of the data flow from the System class 103. The Logger object 104 generates a data flow log in which information indicating the start point of the data flow and information indicating the end point are recorded. Thereby, the data flow in which the Java program 1 reads file data from the file service 4 can be monitored based on the generated data flow log.
(3)Javaプログラム1からファイルへデータを書き込むデータフロー
図12は、ファイルへデータを書き込む場合のデータフローログの生成処理のフローチャートである。
(3) Data Flow for Writing Data from Java Program 1 to File FIG. 12 is a flowchart of data flow log generation processing when data is written to a file.
Loggerフック107は、データが書き込まれたファイルの場所を得るために、データを書き込む前に、ファイルポインタをファイルポインタ管理部403から取得する(S701)。その後、実際にファイルへデータが書き込まれると(S702)、Loggerフック107は再びファイルポインタをファイルポインタ管理部403から取得する(S703)。これにより、データの書き込み前後におけるファイルポインタを取得する。 The Logger hook 107 acquires a file pointer from the file pointer management unit 403 before writing the data in order to obtain the location of the file in which the data is written (S701). Thereafter, when data is actually written to the file (S702), the Logger hook 107 acquires the file pointer from the file pointer management unit 403 again (S703). Thereby, the file pointer before and after the data writing is acquired.
なお、RandomAccessFileオブジェクトを用いたデータ書き込みでは、RandomAccessFileオブジェクトに対してwriteやwriteUTFなどのメソッドを呼び出すことにより、データがファイルへ書き込まれる。 In the data writing using the RandomAccessFile object, data is written to the file by calling a method such as write or writeUTF on the RandomAccessFile object.
Loggerフック107は、取得したRandomAccessFileオブジェクト108、データ書き込み元のJavaオブジェクト102、書き込み前のファイルポインタ、書き込み後のファイルポインタをLoggerオブジェクト104へ転送する(S704)。Loggerフック107から情報を受け取ったLoggerオブジェクト104は、RandomAccessFileオブジェクト108を用いて、アクセス先ファイル名一時保存部109を検索し、アクセス先ファイル401名を取得する(S705)。そして、Loggerオブジェクト104は、データ書き込み元のJavaオブジェクト102のオブジェクト識別子をSystemクラス103から取得する(S706)。 The Logger hook 107 transfers the obtained RandomAccessFile object 108, the Java object 102 from which data is written, the file pointer before writing, and the file pointer after writing to the Logger object 104 (S704). The Logger object 104 that has received the information from the Logger hook 107 searches the access destination file name temporary storage unit 109 using the RandomAccessFile object 108 and acquires the name of the access destination file 401 (S705). Then, the Logger object 104 acquires the object identifier of the Java object 102 that is the data writing source from the System class 103 (S706).
Loggerオブジェクト104は、取得したアクセス先ファイル401名、書き込み前のファイルポインタ、書き込み後のファイルポインタ、書き込み元Javaオブジェクト102のオブジェクト識別子から、データフローログを生成する(S707)。Loggerオブジェクト104は、生成されたデータフローログをログ受信部3に送信する(S708)。以上がファイルへデータを書き込む場合のデータフローログの生成処理である。 The Logger object 104 generates a data flow log from the acquired access destination file 401 name, the file pointer before writing, the file pointer after writing, and the object identifier of the writing Java object 102 (S707). The Logger object 104 transmits the generated data flow log to the log receiving unit 3 (S708). The above is data flow log generation processing when data is written to a file.
下記は、ファイルへデータを書き込む場合のデータフローログの一例である。
{
“src”: {
“type”:“java_internal”,
“object_hash”:“337422011”
},
“dst”: {
“type”:“file”,
“path”:“/home/user/sample.dat”,
“from”:“3”,
“to”:“35”
},
“time”:“1439172160332”
}
srcフィールドが書き込み元のJavaオブジェクト102を表し、dstフィールドがアクセス先ファイル401内のデータを表す。その他は、ファイルからデータを読み込む場合のデータフローログと同様である。
The following is an example of a data flow log when writing data to a file.
{
“Src”: {
“Type”: “java_internal”,
“Object_hash”: “337422011”
},
“Dst”: {
“Type”: “file”,
“Path”: “/ home / user / sample.dat”,
“From”: “3”,
“To”: “35”
},
“Time”: “1439172160332”
}
The src field represents the writing source Java object 102, and the dst field represents the data in the access destination file 401. Others are the same as the data flow log when data is read from a file.
上記のデータフローログに示すように、dstフィールドのfromフィールドとtoフィールドは、バイト数で示されている。これにより、複数のJavaオブジェクトが1つのファイルに書き込んだ場合においても、ファイル内のデータの場所を弁別することができる。 As shown in the above data flow log, the from field and to field of the dst field are indicated by the number of bytes. Thereby, even when a plurality of Java objects are written in one file, the location of data in the file can be distinguished.
このように、Loggerフック107が、ファイルポインタ管理部403から、データフローの終点を示すファイルポインタを取得する。また、Loggerオブジェクト104が、Systemクラス103からデータフローの始点を示すオブジェクト識別子を取得する。そして、Loggerオブジェクト104は、データフローの始点を示す情報および終点を示す情報が記録されたデータフローログを生成する。これにより、生成されたデータフローログに基づき、Javaプログラム1がファイルサービス4へファイルのデータを書き込むデータフローを監視することができる。 As described above, the Logger hook 107 acquires the file pointer indicating the end point of the data flow from the file pointer management unit 403. Also, the Logger object 104 acquires an object identifier indicating the start point of the data flow from the System class 103. The Logger object 104 generates a data flow log in which information indicating the start point of the data flow and information indicating the end point are recorded. Accordingly, it is possible to monitor the data flow in which the Java program 1 writes the file data to the file service 4 based on the generated data flow log.
以上のように、本実施形態によれば、Javaプログラム1とファイルサービス4との間のデータフローを記録することができる。また、ファイル内のデータの場所が、バイト数により示されるファイルポインタにて記録されるため、ファイル内のデータの場所を弁別することができる。 As described above, according to the present embodiment, the data flow between the Java program 1 and the file service 4 can be recorded. Further, since the location of data in the file is recorded by a file pointer indicated by the number of bytes, the location of data in the file can be discriminated.
(第3の実施形態)
第1の実施形態では、Javaプログラム1内部におけるデータフローを記録する方法について示した。本実施形態では、Javaプログラム1内部ではなく、2つのJavaプログラム同士が直接データを授受する場合において、データフローログを記録する方法について説明する。そして、第2コンポーネントがプロセスであっても、データフローが追跡可能であることを示す。なお、第1の実施形態と重複する説明は省略する。
(Third embodiment)
In the first embodiment, the method for recording the data flow in the Java program 1 has been described. In the present embodiment, a method for recording a data flow log in the case where data is directly exchanged between two Java programs instead of the Java program 1 will be described. And even if the second component is a process, the data flow can be traced. Note that a description overlapping that of the first embodiment is omitted.
図13は、第3の実施形態に係る計算機システム全体の概略構成の一例を示すブロック図である。ここでは、2つのJavaプログラムを、第1Javaプログラム1Aと第2Javaプログラム1Bと称して区別する。なお、第1Javaプログラム1Aと第2Javaプログラム1Bとは別のJavaプログラムがあってもよい。第1Javaプログラム1Aと第2Javaプログラム1Bとは、同じ構成を有する。第1Javaプログラム1Aおよび第2Javaプログラム1Bは、第1の実施形態のJavaプログラム1と比べ、バインド一時保存部105、JDBCドライバ106、Loggerフック107ではなく、オブジェクト送信部110と、オブジェクト受信部111と、プロセスID管理部112とを有することが異なる。 FIG. 13 is a block diagram illustrating an example of a schematic configuration of the entire computer system according to the third embodiment. Here, the two Java programs are distinguished by being referred to as a first Java program 1A and a second Java program 1B. There may be another Java program for the first Java program 1A and the second Java program 1B. The first Java program 1A and the second Java program 1B have the same configuration. Compared with the Java program 1 of the first embodiment, the first Java program 1A and the second Java program 1B are not the bind temporary storage unit 105, the JDBC driver 106, and the Logger hook 107, but the object transmission unit 110, the object reception unit 111, And the process ID management unit 112.
オブジェクト送信部110は、Javaプログラム1内のJavaオブジェクトを、別のJavaプログラム1へ送信する。オブジェクト受信部111は、別のJavaプログラム1から送信されたJavaオブジェクトデータを受信する。なお、図13では、第1Javaプログラム1Aが送信を行い(送信側)、第2Javaプログラム1Bが受信を行う(受信側)場合を示しているが、逆であってもよい。 The object transmission unit 110 transmits a Java object in the Java program 1 to another Java program 1. The object receiving unit 111 receives Java object data transmitted from another Java program 1. Although FIG. 13 shows the case where the first Java program 1A performs transmission (transmission side) and the second Java program 1B performs reception (reception side), the reverse may be possible.
プロセスID管理部112は、Javaプログラム1に付与されるプロセスIDを保持する。プロセスID管理部112は、Javaの標準ライブラリに含まれるjava.lang.management.RuntimeMXBeanオブジェクトなどを用いることができる。 The process ID management unit 112 holds a process ID assigned to the Java program 1. The process ID management unit 112 is a Java. lang. management. A Runtime MXBean object or the like can be used.
第3の実施形態では、Loggerオブジェクト104がプロセスID管理部112からJavaオブジェクト101および102のプロセスIDを取得する。第3の実施形態では、複数のJavaプログラム1が動作し、複数のJavaプログラム1それぞれがJavaプログラム1内部のデータフローログを生成する。ゆえに、データフローログの生成元のJavaプログラム1を識別するために、データフローログに生成元のJavaプログラム1の識別子を含める必要がある。そのため、第3の実施形態は、Javaプログラム1のプロセスIDをデータフローログに含める。 In the third embodiment, the Logger object 104 acquires the process IDs of the Java objects 101 and 102 from the process ID management unit 112. In the third embodiment, a plurality of Java programs 1 operate, and each of the plurality of Java programs 1 generates a data flow log inside the Java program 1. Therefore, in order to identify the Java program 1 that generated the data flow log, it is necessary to include the identifier of the Java program 1 that generated the data flow log. Therefore, the third embodiment includes the process ID of the Java program 1 in the data flow log.
第3の実施形態に係る計算機システムでは、下記2種類のデータフローを想定し、監視する。
(1)Javaプログラム1内部のデータフロー
(2)Javaプログラム1同士間(第1Javaプログラム1Aと第2Javaプログラム1B間)のデータフロー
In the computer system according to the third embodiment, the following two types of data flows are assumed and monitored.
(1) Data flow inside Java program 1 (2) Data flow between Java programs 1 (between first Java program 1A and second Java program 1B)
(1)Javaプログラム1内部のデータフロー
図14は、第3の実施形態に係るJavaプログラム内部のデータフローログの生成処理のフローチャートである。本フローは、第1の実施形態同様、flowメソッドの呼び出しにより、Loggerオブジェクト104にデータフローの始点および終点であるJavaオブジェクト101と102が渡された時点で開始される。
(1) Data Flow Inside Java Program 1 FIG. 14 is a flowchart of data flow log generation processing inside the Java program according to the third embodiment. As in the first embodiment, this flow starts when the Java objects 101 and 102 that are the start and end points of the data flow are passed to the Logger object 104 by calling the flow method.
フロー開始時に、Loggerオブジェクト104はプロセスID管理部112からJavaプログラム1のプロセスIDを取得する(S801)。後のS101からS104のフローは、第1の実施形態に係るJavaプログラム1内部のデータフローログの生成処理と同様であるが、S103においてLoggerオブジェクト104はS801にて取得したプロセスIDをデータフローログに含ませる。ゆえに、生成されたデータフローログは第1および第2の実施形態と異なる。 At the start of the flow, the Logger object 104 acquires the process ID of the Java program 1 from the process ID management unit 112 (S801). The subsequent flow from S101 to S104 is the same as the data flow log generation process inside the Java program 1 according to the first embodiment. In S103, the Logger object 104 uses the process ID acquired in S801 as the data flow log. Included. Therefore, the generated data flow log is different from the first and second embodiments.
下記は、第3の実施形態のJavaプログラム1内部のデータフローログの一例である。
{
“src”: {
“type”:“java_internal”,
“process_id”:“3233”,
“object_hash”:“1487365346”
},
“dst”: {
“type”:“java_internal”,
“process_id”:“3233”,
“object_hash”:“1786281489”
},
“time”:“1439172160987”
}
本実施形態では、srcフィールドとdstフィールドのそれぞれに、process_idフィールドが含まれている。process_idフィールドは、Javaプログラム1のプロセスIDを示す。Javaプログラム1内部のデータフローログであるため、srcフィールドとdstフィールドのprocess_idフィールドの値(上記例では“3233”)は同じである。これにより、生成元のJavaプログラム1を識別することができる。その他は第1の実施形態と同様である。
The following is an example of the data flow log inside the Java program 1 of the third embodiment.
{
“Src”: {
“Type”: “java_internal”,
“Process_id”: “3233”,
“Object_hash”: “1487365346”
},
“Dst”: {
“Type”: “java_internal”,
“Process_id”: “3233”,
“Object_hash”: “1786281489”
},
“Time”: “1439172160987”
}
In the present embodiment, a process_id field is included in each of the src field and the dst field. The process_id field indicates the process ID of the Java program 1. Since it is a data flow log inside the Java program 1, the value of the process_id field of the src field and the dst field ("3233" in the above example) is the same. As a result, the Java program 1 that is the generation source can be identified. Others are the same as in the first embodiment.
このように、Loggerオブジェクト104は、データフローの始点を示す情報として、Systemクラス103からJavaオブジェクト101のオブジェクト識別子を、プロセスID管理部112からJavaプログラム1のプロセスIDを取得する。また、Loggerオブジェクト104は、データフローの終点を示す情報として、Systemクラス103からJavaオブジェクト102のオブジェクト識別子を、プロセスID管理部112からJavaプログラム1のプロセスIDを取得する。そして、Loggerオブジェクト104は、始点および終点を示す情報が記録されたデータフローログを生成する。これにより、生成されたデータフローログに基づき、各JavaプログラムのJavaプログラムの内部のデータフローを監視することができる。 As described above, the Logger object 104 acquires the object identifier of the Java object 101 from the System class 103 and the process ID of the Java program 1 from the process ID management unit 112 as information indicating the start point of the data flow. Further, the Logger object 104 acquires the object identifier of the Java object 102 from the system class 103 and the process ID of the Java program 1 from the process ID management unit 112 as information indicating the end point of the data flow. The Logger object 104 generates a data flow log in which information indicating the start point and the end point is recorded. Thereby, the data flow inside the Java program of each Java program can be monitored based on the generated data flow log.
(2)Javaプログラム1同士間のデータフロー
次に、Javaプログラム1同士間のデータフローの記録方法について述べる。図15は、第3の実施形態に係るJavaプログラム同士間のデータフローログの生成処理のフローチャートである。
(2) Data Flow Between Java Programs 1 Next, a method for recording data flow between Java programs 1 will be described. FIG. 15 is a flowchart of data flow log generation processing between Java programs according to the third embodiment.
送信側(第1Javaプログラム1A)のLoggerオブジェクト104Aが、オブジェクト識別子をSystemクラス103Aから取得する(S901)。また、送信側のLoggerオブジェクト104Aは、プロセスIDをプロセスID管理部112Aから取得する(S902)。そして、送信側のオブジェクト送信部110Aは、取得されたオブジェクト識別子およびプロセスID、並びにシリアライズされたJavaオブジェクト102Aを受信側(第2Javaプログラム1B)へ送信する(S903)。 The Logger object 104A on the transmission side (first Java program 1A) acquires the object identifier from the System class 103A (S901). Further, the Logger object 104A on the transmission side acquires the process ID from the process ID management unit 112A (S902). Then, the transmission-side object transmission unit 110A transmits the acquired object identifier and process ID, and the serialized Java object 102A to the reception side (second Java program 1B) (S903).
送信側のオブジェクト送信部110AがJavaオブジェクト102Aを送信する際、Javaオブジェクトは通信路に送信可能な形式に変換されなくてはならない。この変換は、シリアライズと称される。受信側のオブジェクト受信部111Bは、送信されたデータを受け取り、シリアライズされたデータからJavaオブジェクト101Bを生成する(S904)。このシリアライズされたデータからJavaオブジェクトを生成することは、デシリアライズと称される。シリアライズおよびデシリアライズは、Javaプログラム1のSerializableインタフェースを用いればよい。 When the object transmission unit 110A on the transmission side transmits the Java object 102A, the Java object must be converted into a format that can be transmitted to the communication path. This conversion is called serialization. The object receiving unit 111B on the receiving side receives the transmitted data, and generates the Java object 101B from the serialized data (S904). Generating a Java object from this serialized data is called deserialization. For serialization and deserialization, the Serializable interface of the Java program 1 may be used.
なお、送信側のオブジェクト送信部110Aと、受信側のオブジェクト受信部111Bとの間の通信は、UNIX(登録商標)システムにおけるパイプ、UNIXドメインソケット、TCP/IP、または何らかのメッセージバスを用いた通信など、様々な手段を用いて実現することができる。 Note that the communication between the object transmission unit 110A on the transmission side and the object reception unit 111B on the reception side is communication using a pipe, UNIX domain socket, TCP / IP, or some message bus in the UNIX (registered trademark) system. It can be realized using various means.
受信側のLoggerオブジェクト104BがデシリアライズされたJavaオブジェクト101Bのオブジェクト識別子をSystemクラス103Bから取得する(S905)。また、受信側のLoggerオブジェクト104BがプロセスIDをプロセスID管理部112Bから取得する(S906)。そして、受信側のLoggerオブジェクト104Bは、送信側から受信したオブジェクト識別子およびプロセスID、並びに受信側にて取得したオブジェクト識別子とプロセスIDを用いて、データフローログを生成する(S907)。受信側のLoggerオブジェクト104Bは、生成したデータフローログをログ受信部3に送信する(S908)。以上が、第3の実施形態に係るJavaプログラム1同士間のデータフローログの生成処理のフローである。 The object identifier of the Java object 101B from which the receiving-side Logger object 104B is deserialized is acquired from the System class 103B (S905). Further, the Logger object 104B on the receiving side acquires the process ID from the process ID management unit 112B (S906). Then, the Logger object 104B on the reception side generates a data flow log using the object identifier and process ID received from the transmission side, and the object identifier and process ID acquired on the reception side (S907). The Logger object 104B on the receiving side transmits the generated data flow log to the log receiving unit 3 (S908). The above is the flow of data flow log generation processing between Java programs 1 according to the third embodiment.
下記は、第3の実施形態のJavaプログラム1同士間のデータフローログの一例である。
{
“src”: {
“type”:“java_internal”,
“process_id”:“3233”,
“object_hash”:“1786281489”
},
“dst”: {
“type”:“java_internal”,
“process_id”:“1832”,
“object_hash”:“558392438”
},
“time”:“1439172173920”
}
上記データフローログにおいて、srcフィールドのprocess_idフィールドが送信側Javaプログラム1AのプロセスIDを、dstフィールドのprocess_idフィールドが受信側Javaプログラム1BのプロセスIDを表している。これにより、送信側のJavaプログラム1Aと受信側Javaプログラム1Bを弁別することができる。
The following is an example of a data flow log between Java programs 1 of the third embodiment.
{
“Src”: {
“Type”: “java_internal”,
“Process_id”: “3233”,
“Object_hash”: “1786281489”
},
“Dst”: {
“Type”: “java_internal”,
“Process_id”: “1832”,
“Object_hash”: “558392438”
},
“Time”: “1439172173920”
}
In the data flow log, the process_id field of the src field represents the process ID of the sending Java program 1A, and the process_id field of the dst field represents the process ID of the receiving Java program 1B. Thereby, the Java program 1A on the transmission side and the Java program 1B on the reception side can be distinguished.
このように、受信側のオブジェクト受信部111Bは、データフローの始点を示す情報として、Javaオブジェクト102Aのオブジェクト識別子およびJavaプログラム1AのプロセスIDを取得する。また、受信側のLoggerオブジェクト104は、データフローの終点を示す情報として、Systemクラス103BからデシリアライズされたJavaオブジェクト101Bのオブジェクト識別子を、プロセスID管理部112BからJavaプログラム1BのプロセスIDを取得する。そして、Loggerオブジェクト104Bは、始点および終点を示す情報が記録されたデータフローログを生成する。これにより、生成されたデータフローログに基づき、Javaプログラム1同士間のデータフローを監視することができる。 As described above, the object receiving unit 111B on the receiving side acquires the object identifier of the Java object 102A and the process ID of the Java program 1A as information indicating the starting point of the data flow. Further, the Logger object 104 on the receiving side acquires the object identifier of the Java object 101B deserialized from the System class 103B as information indicating the end point of the data flow, and the process ID of the Java program 1B from the process ID management unit 112B. . The Logger object 104B generates a data flow log in which information indicating the start point and the end point is recorded. Thereby, the data flow between the Java programs 1 can be monitored based on the generated data flow log.
以上のように、本実施形態によれば、Javaオブジェクトをシリアライズして送信する際に、送信側Javaプログラム1におけるオブジェクト識別子と、送信側Javaプログラム1のプロセスIDをともに送信する。これらの情報を用いて受信側Javaプログラム1がデータフローログを生成することにより、Javaプログラム1同士が直接データを授受する場合におけるデータフローを詳細に記録することができる。また、Javaプログラム1内部のデータフローログの生成元のJavaプログラム1を、複数のJavaプログラム1が動作している場合においても、識別することができる。 As described above, according to the present embodiment, when a Java object is serialized and transmitted, both the object identifier in the transmission-side Java program 1 and the process ID of the transmission-side Java program 1 are transmitted. By using this information, the receiving Java program 1 generates a data flow log, whereby the data flow when the Java programs 1 directly exchange data can be recorded in detail. In addition, the Java program 1 that is the source of the data flow log in the Java program 1 can be identified even when a plurality of Java programs 1 are operating.
上記に説明した実施形態におけるデータフローログ生成装置は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用い、コンピュータ装置に搭載されたプロセッサに上記プログラムを実行させることにより実現することが可能である。 The data flow log generation device in the embodiment described above can be realized by, for example, using a general-purpose computer device as basic hardware and causing a processor mounted on the computer device to execute the program.
図16は、本発明の一実施形態におけるハードウェア構成の一例を示すブロック図である。データフローログ生成装置は、プロセッサ501、主記憶装置502、補助記憶装置503、ネットワークインタフェース504、デバイスインタフェース505、入力装置506、出力装置507を備え、これらがバス508を介して接続された、コンピュータ装置として実現できる。 FIG. 16 is a block diagram illustrating an example of a hardware configuration according to an embodiment of the present invention. The data flow log generation device includes a processor 501, a main storage device 502, an auxiliary storage device 503, a network interface 504, a device interface 505, an input device 506, and an output device 507, which are connected via a bus 508. It can be realized as a device.
プロセッサ501が、補助記憶装置503からJavaプログラム1を読み出して、主記憶装置502に展開して、実行することで、Javaプログラム1内部の各機能を実現することができる。 The processor 501 reads out the Java program 1 from the auxiliary storage device 503, expands it in the main storage device 502, and executes it, thereby realizing each function in the Java program 1.
本実施形態のデータフローログ生成装置は、当該データフローログ生成装置で実行されるプログラムをコンピュータ装置に予めインストールすることで実現してもよいし、プログラムをCD−ROMなどの記憶媒体に記憶して、あるいはネットワークを介して配布して、コンピュータ装置に適宜インストールすることで実現してもよい。 The data flow log generation device according to the present embodiment may be realized by previously installing a program executed by the data flow log generation device in a computer device, or may store the program in a storage medium such as a CD-ROM. Alternatively, it may be realized by being distributed through a network and appropriately installed in a computer device.
ネットワークインタフェース504は、通信ネットワークに接続するためのインタフェースである。RDB2、ログ受信部3、ファイルサービス4などと通信にて接続される場合は、このネットワークインタフェース504にて実現してもよい。ここではネットワークインタフェースを1つのみ示しているが、複数のネットワークインタフェースが搭載されていてもよい。 The network interface 504 is an interface for connecting to a communication network. When connected to the RDB 2, the log receiving unit 3, the file service 4, and the like by communication, this network interface 504 may be used. Although only one network interface is shown here, a plurality of network interfaces may be installed.
デバイスインタフェース505は、外部記憶媒体6などの機器に接続するインタフェースである。外部記憶媒体6は、HDD、CD−R、CD−RW、DVD−RAM、DVD−R、SAN(Storage area network)等の任意の記録媒体でよい。また、RDB2は、デバイスインタフェース505により接続されてもよい。 The device interface 505 is an interface connected to a device such as the external storage medium 6. The external storage medium 6 may be an arbitrary recording medium such as an HDD, a CD-R, a CD-RW, a DVD-RAM, a DVD-R, and a SAN (Storage area network). The RDB 2 may be connected by a device interface 505.
主記憶装置502は、プロセッサ501が実行する命令、および各種データ等を一時的に記憶するメモリ装置であり、DRAM等の揮発性メモリでも、MRAM等の不揮発性メモリでもよい。バインド一時保存部105、アクセス先ファイル名一時保存部109、プロセスID管理部などは、主記憶装置502により実現することができる。補助記憶装置503は、プログラムやデータ等を永続的に記憶する記憶装置であり、例えば、HDDまたはSSD等がある。 The main storage device 502 is a memory device that temporarily stores instructions executed by the processor 501, various data, and the like, and may be a volatile memory such as a DRAM or a non-volatile memory such as an MRAM. The temporary binding storage unit 105, the access destination file name temporary storage unit 109, the process ID management unit, and the like can be realized by the main storage device 502. The auxiliary storage device 503 is a storage device that permanently stores programs, data, and the like, such as an HDD or an SSD.
上記に、本発明の一実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。 Although one embodiment of the present invention has been described above, these embodiment are presented as examples and are not intended to limit the scope of the invention. These novel embodiments can be implemented in various other forms, and various omissions, replacements, and changes can be made without departing from the scope of the invention. These embodiments and modifications thereof are included in the scope and gist of the invention, and are included in the invention described in the claims and the equivalents thereof.
1 プロセス(Javaプログラム)
1A 第1Javaプログラム
1B 第2Javaプログラム
101、101A、101B、102、102A、102B Javaオブジェクト
103、103A、103B Systemクラス
104、104A、104B Loggerオブジェクト
105 バインド一時保存部
106 JDBCドライバ
107 Loggerフック
108 RandomAccessFileオブジェクト
109 アクセス先ファイル名一時保存部
110、110A、110B オブジェクト送信部
111、111A、111B オブジェクト受信部
112、112A、112B プロセスID管理部
2 リレーショナルデータベース(RDB)
201 データベースインタフェース(DB_I/F)
202 アクセス先テーブル
203 システムカタログ
204 一時ログテーブル
3 ログ受信部
4 ファイルサービス
401 アクセス先ファイル
402 ファイルサービスインタフェース(ファイルサービスI/F)
403 ファイルポインタ管理部
501 プロセッサ
502 主記憶装置
503 補助記憶装置
504 デバイスインタフェース
505 ネットワークインタフェース
506 バス
6 外部記憶媒体
1 process (Java program)
1A 1st Java program 1B 2nd Java program 101, 101A, 101B, 102, 102A, 102B Java object 103, 103A, 103B System class 104, 104A, 104B Logger object 105 Bind temporary storage unit 106 JDBC driver 107 Logger hook 108 RandomAccess object 109 Access destination file name temporary storage unit 110, 110A, 110B Object transmission unit 111, 111A, 111B Object reception unit 112, 112A, 112B Process ID management unit 2 Relational database (RDB)
201 Database interface (DB_I / F)
202 Access destination table 203 System catalog 204 Temporary log table 3 Log receiving unit 4 File service 401 Access destination file 402 File service interface (file service I / F)
403 File pointer manager 501 Processor 502 Main storage 503 Auxiliary storage 504 Device interface 505 Network interface 506 Bus 6 External storage medium
Claims (17)
前記第2コンポーネントにおける、前記データフローの始点または終点を示す第2位置情報を取得する第2取得部と、
前記第1位置情報と前記第2位置情報とが記録されたデータフローログを生成するログ生成部と、
を備えるデータフローログ生成装置。 When a data flow occurs between a first object in a first component that is a process and a second component, first position information indicating a start point or an end point of the data flow in the first component is acquired. A first acquisition unit;
A second acquisition unit for acquiring second position information indicating a start point or an end point of the data flow in the second component;
A log generation unit that generates a data flow log in which the first position information and the second position information are recorded;
A data flow log generation device comprising:
請求項1に記載のデータフローログ生成装置。 The data flow log generation device according to claim 1, wherein the first acquisition unit, the second acquisition unit, and the log generation unit operate in the process of the first component.
をさらに備え、
前記第1取得部は、前記第1識別子管理部から前記第1オブジェクトの識別子を前記第1位置情報の一部または全部として取得する
請求項1または2に記載のデータフローログ生成装置。 A first identifier management unit for managing an identifier of an object in the first component;
The data flow log generation device according to claim 1 or 2, wherein the first acquisition unit acquires the identifier of the first object as a part or all of the first position information from the first identifier management unit.
前記データフローには、前記リレーショナルデータベースから前記第1オブジェクトへのデータ読み込みが含まれ、
前記第2取得部は、前記リレーショナルデータベースから、前記データ読み込みに係るデータが格納されていた位置を、前記第2位置情報として取得する
請求項1ないし3のいずれか一項に記載のデータフローログ生成装置。 The second component is a relational database;
The data flow includes reading data from the relational database into the first object,
The data flow log according to any one of claims 1 to 3, wherein the second acquisition unit acquires, as the second position information, a position where data related to the data reading is stored from the relational database. Generator.
前記データフローには、前記第1オブジェクトから前記リレーショナルデータベースへのデータ書き込みが含まれ、
前記データ書き込みに係るデータを格納する保存部をさらに備え、
前記第2取得部は、前記保存部に格納されたデータに基づき、前記リレーショナルデータベースから、前記データ書き込みに係るデータが格納された位置を、前記第2位置情報として取得する
請求項1ないし4のいずれか一項に記載のデータフローログ生成装置。 The second component is a relational database;
The data flow includes writing data from the first object to the relational database;
A storage unit for storing data relating to the data writing;
The second acquisition unit acquires, as the second position information, a position where data related to the data writing is stored from the relational database based on the data stored in the storage unit. The data flow log generation device according to any one of the above.
請求項4または5に記載のデータフローログ生成装置。 The data flow according to claim 4 or 5, wherein the second position information includes any one of a database name, a catalog name, a schema name, a table name, a column name, and a table primary key of the relational database. Log generator.
請求項4ないし6のいずれか一項に記載のデータフローログ生成装置。 The data flow log generation device according to any one of claims 4 to 6, wherein the second acquisition unit issues an instruction relating to validation or invalidation of an automatic commit setting to the relational database.
前記データフローには、前記ファイルサービスから前記第1オブジェクトへのデータ読み込みまたは前記第1オブジェクトから前記ファイルサービスへのデータ書き込みが含まれ、
前記第2取得部は、前記ファイルサービスから、前記データ読み込みまたは前記データ書き込みに係るファイルのパスと、前記ファイルにおける前記データ読み込みまたは前記データ書き込みに係るデータの位置を示すファイルポインタとの少なくとも一方を、前記第2位置情報の一部または全部として取得する
請求項1ないし3のいずれか一項に記載のデータフローログ生成装置。 The second component is a file service;
The data flow includes reading data from the file service to the first object or writing data from the first object to the file service,
The second acquisition unit receives, from the file service, at least one of a file path related to the data reading or data writing and a file pointer indicating a position of data related to the data reading or data writing in the file. The data flow log generation device according to any one of claims 1 to 3, which is acquired as a part or all of the second position information.
前記データフローには、前記第2コンポーネントにおける第2オブジェクトから前記第1オブジェクトへのデータフローが含まれ、
前記第2取得部は、前記第2オブジェクトの識別子と、前記第2コンポーネントのプロセスIDを前記第2位置情報の一部または全部として取得し、
前記第1取得部は、前記第1オブジェクトの識別子と、前記第1コンポーネントのプロセスIDとを、前記第1位置情報の一部または全部として取得する
請求項1ないし3のいずれか一項に記載のデータフローログ生成装置。 The second component is a process;
The data flow includes a data flow from the second object to the first object in the second component,
The second acquisition unit acquires an identifier of the second object and a process ID of the second component as part or all of the second position information,
4. The first acquisition unit acquires the identifier of the first object and the process ID of the first component as part or all of the first position information. 5. Data flow log generator.
前記第1取得部は、前記第1コンポーネントにてデシリアライズされた前記第2オブジェクトの識別子を、前記第1オブジェクトの識別子として取得する
請求項9に記載のデータフローログ生成装置。 The second acquisition unit acquires an identifier of the second object serialized by the second component,
The data flow log generation device according to claim 9, wherein the first acquisition unit acquires the identifier of the second object deserialized by the first component as the identifier of the first object.
前記第1取得部は、前記第1オブジェクトの識別子を前記第1位置情報の一部または全部として取得し、前記第2オブジェクトの識別子を前記第2位置情報の一部または全部として取得する
請求項1ないし10のいずれか一項に記載のデータフローログ生成装置。 When a data flow occurs between the first object and a different second object in the first component,
The first acquisition unit acquires an identifier of the first object as part or all of the first position information, and acquires an identifier of the second object as part or all of the second position information. The data flow log generation device according to any one of 1 to 10.
請求項9または10に従属する請求項11に記載のデータフローログ生成装置。 The data flow log generation device according to claim 11, wherein the first acquisition unit further acquires a process ID of the first component as a part of the first position information.
請求項4ないし7のいずれか一項に記載のデータフローログ生成装置に対し、前記第2位置情報を送信する送信部と、
を備えたリレーショナルデータベース。 A second position information storage unit for storing the second position information;
A transmission unit that transmits the second position information to the data flow log generation device according to any one of claims 4 to 7,
Relational database with
データの書き込み先位置情報を一時的に格納する一時的データ格納部と、
前記第1コンポーネントからデータが書き込まれたときに、書き込まれたデータの書き込み先位置情報を一時的データ格納部に複製するトリガー
を備えた請求項13に記載のリレーショナルデータベース。 The relational database is
A temporary data storage unit for temporarily storing data write destination position information;
The relational database according to claim 13, further comprising: a trigger for copying write destination position information of the written data to the temporary data storage unit when data is written from the first component.
前記第2コンポーネントにおける、前記データフローの始点または終点を示す第2位置情報を取得する第2取得ステップと、
前記第1位置情報と前記第2位置情報とが記録されたデータフローログを生成するログ生成ステップと、
をコンピュータが実行するデータフローログ生成方法。 When a data flow occurs between a first object in a first component that is a process and a second component, first position information indicating a start point or an end point of the data flow in the first component is acquired. A first acquisition step;
A second acquisition step of acquiring second position information indicating a start point or an end point of the data flow in the second component;
A log generation step of generating a data flow log in which the first position information and the second position information are recorded;
A data flow log generation method in which a computer executes.
前記第2コンポーネントにおける、前記データフローの始点または終点を示す第2位置情報を取得する第2取得ステップと、
前記第1位置情報と前記第2位置情報とが記録されたデータフローログを生成するログ生成ステップと、
をコンピュータに実行させるためのプログラム。 When a data flow occurs between a first object in a first component that is a process and a second component, first position information indicating a start point or an end point of the data flow in the first component is acquired. A first acquisition step;
A second acquisition step of acquiring second position information indicating a start point or an end point of the data flow in the second component;
A log generation step of generating a data flow log in which the first position information and the second position information are recorded;
A program that causes a computer to execute.
前記第2コンポーネントは、
前記第2コンポーネントにおける、前記データフローの始点または終点を示す第2位置情報を送る送出部
を備え、
前記第1コンポーネントは、
前記第1コンポーネントにおける、前記データフローの始点または終点を示す第1位置情報を取得する第1取得部と、
前記第2位置情報を、前記送出部から取得する第2取得部と、
前記第1位置情報と前記第2位置情報とが記録されたデータフローログを生成するログ生成部と、
を備える監視システム。 A monitoring system comprising: a first component that is a process; a second component; and a log receiving unit that receives a log relating to a data flow performed between the first component and the second component,
The second component is:
A sending unit for sending second position information indicating a start point or an end point of the data flow in the second component;
The first component is:
A first acquisition unit for acquiring first position information indicating a start point or an end point of the data flow in the first component;
A second acquisition unit for acquiring the second position information from the sending unit;
A log generation unit that generates a data flow log in which the first position information and the second position information are recorded;
A monitoring system comprising:
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016010003A JP2017130111A (en) | 2016-01-21 | 2016-01-21 | Dataflow log generation device, relational database, dataflow log generation method, program, and monitoring system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016010003A JP2017130111A (en) | 2016-01-21 | 2016-01-21 | Dataflow log generation device, relational database, dataflow log generation method, program, and monitoring system |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2017130111A true JP2017130111A (en) | 2017-07-27 |
Family
ID=59394867
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016010003A Pending JP2017130111A (en) | 2016-01-21 | 2016-01-21 | Dataflow log generation device, relational database, dataflow log generation method, program, and monitoring system |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2017130111A (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083582A (en) * | 2019-03-22 | 2019-08-02 | 平安普惠企业管理有限公司 | Method, apparatus, computer equipment and the storage medium of output journal |
-
2016
- 2016-01-21 JP JP2016010003A patent/JP2017130111A/en active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083582A (en) * | 2019-03-22 | 2019-08-02 | 平安普惠企业管理有限公司 | Method, apparatus, computer equipment and the storage medium of output journal |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107122355B (en) | Data migration system and method | |
CN107122360B (en) | Data migration system and method | |
US8290994B2 (en) | Obtaining file system view in block-level data storage systems | |
CN112131237B (en) | Data synchronization method, device, equipment and computer readable medium | |
US9037677B2 (en) | Update protocol for client-side routing information | |
US8108343B2 (en) | De-duplication and completeness in multi-log based replication | |
CN107122361B (en) | Data migration system and method | |
CN109086388B (en) | Block chain data storage method, device, equipment and medium | |
US8793288B2 (en) | Online access to database snapshots | |
JPWO2011108695A1 (en) | Parallel data processing system, parallel data processing method and program | |
WO2020024903A1 (en) | Method and device for searching for blockchain data, and computer readable storage medium | |
JP2016021232A (en) | Checking freshness of data for data integration system (dis) | |
CN107786527B (en) | Method and equipment for realizing service discovery | |
US11544229B1 (en) | Enhanced tracking of data flows | |
JP4672518B2 (en) | Information processing apparatus, information processing apparatus control method, and program | |
CN106155832A (en) | Method, device and the Android device that a kind of data are recovered | |
JP2020057416A (en) | Method and device for processing data blocks in distributed database | |
RU2711348C1 (en) | Method and system for processing requests in a distributed database | |
CN110990365A (en) | Data synchronization method, device, server and storage medium | |
CN113760845A (en) | Log processing method, system, device, client and storage medium | |
CN111723245B (en) | Method for establishing association relation of different types of storage objects in data storage system | |
CN116501700B (en) | APP formatted file offline storage method, device, equipment and storage medium | |
JP2017130111A (en) | Dataflow log generation device, relational database, dataflow log generation method, program, and monitoring system | |
US10521328B1 (en) | Application data flow mapping | |
CN114238244B (en) | Result set generation method, device, equipment and storage medium |