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>";