Manage audit logs within StarRocks via Audit Loader
Audit Loaderを使用してStarRocks内での監査ログを管理する
このトピックでは、Audit Loaderプラグインを使用してStarRocks内のテーブル内で監査ログを管理する方法について説明します。
StarRocksは内部データベースではなく、ローカルファイルのfe/log/fe.audit.log
に監査ログを保存します。Audit Loaderプラグインを使用すると、クラスタ内で直接監査ログを管理できます。Audit Loaderはログをファイルから読み込み、HTTP PUTを介してStarRocksにロードします。
監査ログを格納するためのテーブルを作成する
StarRocksクラスタで、監査ログを格納するためのデータベースとテーブルを作成します。詳細な手順については、CREATE DATABASEとCREATE TABLEを参照してください。
監査ログのフィールドは、StarRocksのバージョンによって異なるため、StarRocksに互換性のあるテーブルを作成するために、次の例のいずれかを選択する必要があります。
注意
以下の例でテーブルのスキーマを変更しないでください。スキーマを変更すると、ログのロードに失敗します。
- StarRocks v2.4、v2.5、v3.0、v3.1、およびそれ以降のマイナーバージョンの場合:
CREATE DATABASE starrocks_audit_db__;
CREATE TABLE starrocks_audit_db__.starrocks_audit_tbl__ (
`queryId` VARCHAR(48) COMMENT "固有のクエリID",
`timestamp` DATETIME NOT NULL COMMENT "クエリの開始時間",
`queryType` VARCHAR(12) COMMENT "クエリのタイプ(クエリ、遅いクエリ)",
`clientIp` VARCHAR(32) COMMENT "クライアントのIPアドレス",
`user` VARCHAR(64) COMMENT "クエリを開始したユーザー",
`authorizedUser` VARCHAR(64) COMMENT "user_identity",
`resourceGroup` VARCHAR(64) COMMENT "リソースグループ名",
`catalog` VARCHAR(32) COMMENT "カタログ名",
`db` VARCHAR(96) COMMENT "クエリがスキャンするデータベース",
`state` VARCHAR(8) COMMENT "クエリの状態(EOF、ERR、OK)",
`errorCode` VARCHAR(96) COMMENT "エラーコード",
`queryTime` BIGINT COMMENT "クエリのレイテンシ(ミリ秒単位)",
`scanBytes` BIGINT COMMENT "スキャンされたデータのサイズ(バイト)",
`scanRows` BIGINT COMMENT "スキャンされたデータの行数",
`returnRows` BIGINT COMMENT "結果の行数",
`cpuCostNs` BIGINT COMMENT "クエリのCPUリソースの消費時間(ナノ秒単位)",
`memCostBytes` BIGINT COMMENT "クエリのメモリコスト(バイト)",
`stmtId` INT COMMENT "SQLステートメントのID(インクリメンタル)",
`isQuery` TINYINT COMMENT "SQLがクエリであるかどうか(0および1)",
`feIp` VARCHAR(32) COMMENT "SQLを実行するFEのIPアドレス",
`stmt` STRING COMMENT "SQLステートメント",
`digest` VARCHAR(32) COMMENT "SQLのフィンガープリント",
`planCpuCosts` DOUBLE COMMENT "計画時のCPUリソースの消費時間(ナノ秒単位)",
`planMemCosts` DOUBLE COMMENT "計画時のメモリコスト(バイト)"
) ENGINE = OLAP
DUPLICATE KEY (`queryId`, `timestamp`, `queryType`)
COMMENT "監査ログテーブル"
PARTITION BY RANGE (`timestamp`) ()
DISTRIBUTED BY HASH (`queryId`) BUCKETS 3
PROPERTIES (
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-30",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "3",
"dynamic_partition.enable" = "true",
"replication_num" = "3"
);
- StarRocks v2.3.0とそれ以降のマイナーバージョンの場合:
CREATE DATABASE starrocks_audit_db__;
CREATE TABLE starrocks_audit_db__.starrocks_audit_tbl__ (
`queryId` VARCHAR(48) COMMENT "固有のクエリID",
`timestamp` DATETIME NOT NULL COMMENT "クエリの開始時間",
`clientIp` VARCHAR(32) COMMENT "クライアントのIPアドレス",
`user` VARCHAR(64) COMMENT "クエリを開始したユーザー",
`resourceGroup` VARCHAR(64) COMMENT "リソースグループ名",
`db` VARCHAR(96) COMMENT "クエリがスキャンするデータベース",
`state` VARCHAR(8) COMMENT "クエリの状態(EOF、ERR、OK)",
`errorCode` VARCHAR(96) COMMENT "エラーコード",
`queryTime` BIGINT COMMENT "クエリのレイテンシ(ミリ秒単位)",
`scanBytes` BIGINT COMMENT "スキャンされたデータのサイズ(バイト)",
`scanRows` BIGINT COMMENT "スキャンされたデータの行数",
`returnRows` BIGINT COMMENT "結果の行数",
`cpuCostNs` BIGINT COMMENT "クエリのCPUリソースの消費時間(ナノ秒単位)",
`memCostBytes` BIGINT COMMENT "クエリのメモリコスト(バイト)",
`stmtId` INT COMMENT "SQLステートメントのID(インクリメンタル)",
`isQuery` TINYINT COMMENT "SQLがクエリであるかどうか(0および1)",
`feIp` VARCHAR(32) COMMENT "SQLを実行するFEのIPアドレス",
`stmt` STRING COMMENT "SQLステートメント",
`digest` VARCHAR(32) COMMENT "SQLのフィンガープリント",
`planCpuCosts` DOUBLE COMMENT "計画時のCPUリソースの消費時間(ナノ秒単位)",
`planMemCosts` DOUBLE COMMENT "計画時のメモリコスト(バイト)"
) ENGINE = OLAP
DUPLICATE KEY (`queryId`, `timestamp`, `clientIp`)
COMMENT "監査ログテーブル"
PARTITION BY RANGE (`timestamp`) ()
DISTRIBUTED BY HASH (`queryId`) BUCKETS 3
PROPERTIES (
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-30",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.enable" = "true",
"replication_num" = "3"
);
- StarRocks v2.2.1とそれ以降のマイナーバージョンの場合:
CREATE DATABASE starrocks_audit_db__;
CREATE TABLE starrocks_audit_db__.starrocks_audit_tbl__
(
query_id VARCHAR(48) COMMENT "固有のクエリID",
time DATETIME NOT NULL COMMENT "クエリの開始時間",
client_ip VARCHAR(32) COMMENT "クライアントのIPアドレス",
user VARCHAR(64) COMMENT "クエリを開始したユーザー",
db VARCHAR(96) COMMENT "クエリがスキャンするデータベース",
state VARCHAR(8) COMMENT "クエリの状態(EOF、ERR、OK)",
query_time BIGINT COMMENT "クエリのレイテンシ(ミリ秒単位)",
scan_bytes BIGINT COMMENT "スキャンされたデータのサイズ(バイト)",
scan_rows BIGINT COMMENT "スキャンされたデータの行数",
return_rows BIGINT COMMENT "結果の行数",
cpu_cost_ns BIGINT COMMENT "クエリのCPUリソースの消費時間(ナノ秒単位)",
mem_cost_bytes BIGINT COMMENT "クエリのメモリコスト(バイト)",
stmt_id INT COMMENT "SQLステートメントのID(インクリメンタル)",
is_query TINYINT COMMENT "SQLがクエリであるかどうか(0および1)",
frontend_ip VARCHAR(32) COMMENT "SQLを実行するFEのIPアドレス",
stmt STRING COMMENT "SQLステートメント",
digest VARCHAR(32) COMMENT "SQLのフィンガープリント"
) engine=OLAP
duplicate key(query_id, time, client_ip)
partition by range(time) ()
distributed by hash(query_id) BUCKETS 3
properties(
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-30",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.enable" = "true",
"replication_num" = "3"
);
- StarRocks v2.2.0、v2.1.0とそれ以降のマイナーバージョンの場合:
CREATE DATABASE starrocks_audit_db__;
CREATE TABLE starrocks_audit_db__.starrocks_audit_tbl__
(
query_id VARCHAR(48) COMMENT "固有のクエリID",
time DATETIME NOT NULL COMMENT "クエリの開始時間",
client_ip VARCHAR(32) COMMENT "クライアントのIPアドレス",
user VARCHAR(64) COMMENT "クエリを 開始したユーザー",
db VARCHAR(96) COMMENT "クエリがスキャンするデータベース",
state VARCHAR(8) COMMENT "クエリの状態(EOF、ERR、OK)",
query_time BIGINT COMMENT "クエリのレイテンシ(ミリ秒単位)",
scan_bytes BIGINT COMMENT "スキャンされたデータのサイズ(バイト)",
scan_rows BIGINT COMMENT "スキャンされたデータの行数",
return_rows BIGINT COMMENT "結果の行数",
stmt_id INT COMMENT "SQLステートメントのID(インクリメンタル)",
is_query TINYINT COMMENT "SQLがクエリであるかどうか(0および1)",
frontend_ip VARCHAR(32) COMMENT "SQLを実行するFEのIPアドレス",
stmt STRING COMMENT "SQLステートメント",
digest VARCHAR(32) COMMENT "SQLのフィンガープリント"
) engine=OLAP
DUPLICATE KEY(query_id, time, client_ip)
PARTITION BY RANGE(time) ()
DISTRIBUTED BY HASH(query_id) BUCKETS 3
PROPERTIES(
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-30",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.enable" = "true",
"replication_num" = "3"
);
- StarRocks v2.0.0およびそれ以降のマイナーバージョン、StarRocks v1.19.0およびそれ以降のマイナーバージョンの場合:
CREATE DATABASE starrocks_audit_db__;
CREATE TABLE starrocks_audit_db__.starrocks_audit_tbl__
(
query_id VARCHAR(48) COMMENT "固有のクエリID",
time DATETIME NOT NULL COMMENT "クエリの開始時間",
client_ip VARCHAR(32) COMMENT "クライアントのIPアドレス",
user VARCHAR(64) COMMENT "クエリを開始したユーザー",
db VARCHAR(96) COMMENT "クエリがスキャンするデータベース",
state VARCHAR(8) COMMENT "クエリの状態(EOFE、RR、OK)",
query_time BIGINT COMMENT "クエリのレイテンシ(ミリ秒単位)",
scan_bytes BIGINT COMMENT "スキャンされたデータのサイズ(バイト)",
scan_rows BIGINT COMMENT "スキャンされたデータの行数",
return_rows BIGINT COMMENT "結果の行数",
stmt_id INT COMMENT "SQLステートメントのID(インクリメンタル)",
is_query TINYINT COMMENT "SQLがクエリであるかどうか(0および1)",
frontend_ip VARCHAR(32) COMMENT "SQLを実行するFEのIPアドレス",
stmt STRING COMMENT "SQLステートメント"
) engine=OLAP
DUPLICATE KEY(query_id, time, client_ip)
PARTITION BY RANGE(time) ()
DISTRIBUTED BY HASH(query_id) BUCKETS 3
PROPERTIES(
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-30",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.enable" = "true",
"replication_num" = "3"
);
starrocks_audit_tbl__
は、動的パーティションを使用して作成されます。デフォルトでは、テーブルが作成されてから10分後に最初の動的パーティションが作成されます。その後、監査ログをテーブルにロードできます。次のステートメントを使用して、テーブルでパーティションを確認できます。
SHOW PARTITIONS FROM starrocks_audit_db__.starrocks_audit_tbl__;
パーティションが作成されたら、次のステップに進むことができます。
Audit Loaderのダウンロードと設定
-
Audit Loaderインストールパッケージをダウンロードします。パッケージには、異なるStarRocksバージョン用の複数のディレクトリが含まれています。StarRocksと互換性のあるパッケージと対応するディレクトリに移動し、パッケージをインストールします。
- 2.4: StarRocks v2.4.0およびそれ以降のマイナーバージョン
- 2.3: StarRocks v2.3.0およびそれ以降のマイナーバージョン
- 2.2.1+: StarRocks v2.2.1およびそれ以降のマイナーバージョン
- 2.1-2.2.0: StarRocks v2.2.0、StarRocks v2.1.0およびそれ以降のマイナーバージョン
- 1.18.2-2.0: StarRocks v2.0.0および それ以降のマイナーバージョン、StarRocks v1.19.0およびそれ以降のマイナーバージョン
-
インストールパッケージを解凍します。
unzip auditloader.zip
次のファイルが展開されます。
- auditloader.jar: Audit LoaderのJARファイルです。
- plugin.properties: Audit Loaderのプロパティファイルです。
- plugin.conf: Audit Loaderの設定ファイルです。
-
plugin.confを編集してAudit Loaderを設定します。以下の項目を設定する必要があります。
frontend_host_port
: FEのIPアドレスとHTTPポートを<fe_ip>:<fe_http_port>
の形式で設定します。デフォルト値は127.0.0.1:8030
です。database
: 監査ログを格納するために作成したデータベースの名前です。table
: 監査ログを格納するために作成したテーブルの名前です。user
: クラスタのユーザー名です。テーブルにデータをロードする権限(LOAD_PRIV)を持っている必要があります。password
: ユーザーのパスワードです。
-
ファイルをパッケージに戻します。
zip -q -m -r auditloader.zip auditloader.jar plugin.conf plugin.properties
-
パッケージをFEノードをホストしているすべてのマシンに配布します。パッケージが同一のパスに保存されていることを確認してください。そうでない場合、インストールに失敗します。パッケージを配布した後、パッケージの絶対パスをコピーしてください。
Audit Loaderのインストール
Audit Loaderをインストールするには、以下のステートメントを絶対パスと共に実行します。絶対パスには、コピーしたパッケージのパスを指定します。
INSTALL PLUGIN FROM "<absolute_path_to_package>";