AuditLoader を使用して StarRocks 内で監査ログを管理する
このトピックでは、プラグイン - AuditLoader を使用して、テーブル内で StarRocks の監査ログを管理する方法について説明します。
StarRocks は監査ログを内部データベースではなく、ローカルファイル fe/log/fe.audit.log に保存します。プラグイン AuditLoader を使用すると、クラスタ内で監査ログを直接管理できます。インストール後、AuditLoader はファイルからログを読み取り、HTTP PUT を介して StarRocks にロードします。その後、SQL ステートメントを使用して StarRocks 内の監査ログをクエリできます。
監査ログを保存するテーブルを作成する
StarRocks クラスタ内にデータベースとテーブルを作成し、監査ログを保存します。詳細な手順については、 CREATE DATABASE と CREATE TABLE を参照してください。
監査ログのフィールドは異なる StarRocks バージョン間で異なるため、以下の例から選択して、使用している StarRocks に互換性のあるテーブルを作成する必要があります。
注意
- 例のテーブルスキーマを変更しないでください。そうしないと、ログのロードが失敗します。
- 監査ログのフィールドは異なる StarRocks バージョン間で異なるため、新しいバージョンの AuditLoader は、利用可能なすべての StarRocks バージョンから共通のフィールドを収集します。
CREATE DATABASE starrocks_audit_db__;
CREATE TABLE starrocks_audit_db__.starrocks_audit_tbl__ (
`queryId` VARCHAR(64) COMMENT "Unique query ID",
`timestamp` DATETIME NOT NULL COMMENT "Query start time",
`queryType` VARCHAR(12) COMMENT "Query type (query, slow_query, connection)",
`clientIp` VARCHAR(32) COMMENT "Client IP address",
`user` VARCHAR(64) COMMENT "User who initiates the query",
`authorizedUser` VARCHAR(64) COMMENT "user_identity",
`resourceGroup` VARCHAR(64) COMMENT "Resource group name",
`catalog` VARCHAR(32) COMMENT "Catalog name",
`db` VARCHAR(96) COMMENT "Database that the query scans",
`state` VARCHAR(8) COMMENT "Query state (EOF, ERR, OK)",
`errorCode` VARCHAR(512) COMMENT "Error code",
`queryTime` BIGINT COMMENT "Query latency in milliseconds",
`scanBytes` BIGINT COMMENT "Size of the scanned data in bytes",
`scanRows` BIGINT COMMENT "Row count of the scanned data",
`returnRows` BIGINT COMMENT "Row count of the result",
`cpuCostNs` BIGINT COMMENT "CPU resources consumption time for query in nanoseconds",
`memCostBytes` BIGINT COMMENT "Memory cost for query in bytes",
`stmtId` INT COMMENT "Incremental SQL statement ID",
`isQuery` TINYINT COMMENT "If the SQL is a query (0 and 1)",
`feIp` VARCHAR(128) COMMENT "IP address of FE that executes the SQL",
`stmt` VARCHAR(1048576) COMMENT "Original SQL statement",
`digest` VARCHAR(32) COMMENT "Slow SQL fingerprint",
`planCpuCosts` DOUBLE COMMENT "CPU resources consumption time for planning in nanoseconds",
`planMemCosts` DOUBLE COMMENT "Memory cost for planning in bytes"
) ENGINE = OLAP
DUPLICATE KEY (`queryId`, `timestamp`, `queryType`)
COMMENT "Audit log table"
PARTITION BY RANGE (`timestamp`) ()
DISTRIBUTED BY HASH (`queryId`) BUCKETS 3
PROPERTIES (
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-30", -- 最新の 30 日間の監査ログを保持します。ビジネスの需要に基づいてこの値を調整できます。
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "3",
"dynamic_partition.enable" = "true",
"replication_num" = "3" -- 監査ログの 3 つのレプリカを保持します。運用環境では 3 つのレプリカを保持することをお勧めします。
);
starrocks_audit_tbl__
は動的パーティションで作成されます。デフォルトでは、テーブルが作成されてから 10 分後に最初の動的パーティションが作成されます。その後、監査ログをテーブルにロードできます。以下のステートメントを使用してテーブル内のパーティションを確認できます。
SHOW PARTITIONS FROM starrocks_audit_db__.starrocks_audit_tbl__;
パーティションが作成されたら、次のステップに進むことができます。
AuditLoader をダウンロードして設定する
-
Download AuditLoader インストールパッケージをダウンロードします。このパッケージは、利用可能なすべての StarRocks バージョンと互換性があります。
-
インストールパッケージを解凍します。
unzip auditloader.zip
次のファイルが展開されます。
- auditloader.jar: AuditLoader の JAR ファイル。
- plugin.properties: AuditLoader のプロパティファイル。このファイルを変更する必要はありません。
- plugin.conf: AuditLoader の設定ファイル。通常は、このファイルの
user
とpassword
フィールドを変更するだけで済みます。
-
plugin.conf を変更して AuditLoader を設定します。AuditLoader が正常に動作するために、次の項目を設定する必要があります。
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 ノードをホストするすべてのマシンに配布します。すべてのパッケージが同一のパスに保存されていることを確認してください。そうでないと、インストールが失敗します。パッケージを配布した後、パッケージの絶対パスをコピーすることを忘れないでください。
AuditLoader をインストールする
AuditLoader を StarRocks のプラグインとしてインストールするには、コピーしたパスとともに次のステートメントを実行します。
INSTALL PLUGIN FROM "<absolute_path_to_package>";
詳細な手順については、 INSTALL PLUGIN を参照してください。
インストールを確認し、監査ログをクエリする
-
SHOW PLUGINS を使用して、インストールが成功したかどうかを確認できます。
次の例では、プラグイン
AuditLoader
のStatus
がINSTALLED
であることを示しており、インストールが成功したことを意味します。mysql> SHOW PLUGINS\G
*************************** 1. row ***************************
Name: __builtin_AuditLogBuilder
Type: AUDIT
Description: builtin audit logger
Version: 0.12.0
JavaVersion: 1.8.31
ClassName: com.starrocks.qe.AuditLogBuilder
SoName: NULL
Sources: Builtin
Status: INSTALLED
Properties: {}
*************************** 2. row ***************************
Name: AuditLoader
Type: AUDIT
Description: Available for versions 2.3+. Load audit log to starrocks, and user can view the statistic of queries.
Version: 4.0.0
JavaVersion: 1.8.0
ClassName: com.starrocks.plugin.audit.AuditLoaderPlugin
SoName: NULL
Sources: /x/xx/xxx/xxxxx/auditloader.zip
Status: INSTALLED
Properties: {}
2 rows in set (0.01 sec) -
いくつかのランダムな SQL を実行して監査ログを生成し、AuditLoader が監査ログを StarRocks にロードするのを許可するために 60 秒(または AuditLoader を設定する際に指定した
max_batch_interval_sec
の時間)待ちます。 -
テーブルをクエリして監査ログを確認します。
SELECT * FROM starrocks_audit_db__.starrocks_audit_tbl__;
次の例は、監査ログがテーブルに正常にロードされた場合を示しています。
mysql> SELECT * FROM starrocks_audit_db__.starrocks_audit_tbl__\G
*************************** 1. row ***************************
queryId: 84a69010-d47e-11ee-9647-024228044898
timestamp: 2024-02-26 16:10:35
queryType: query
clientIp: xxx.xx.xxx.xx:65283
user: root
authorizedUser: 'root'@'%'
resourceGroup: default_wg
catalog: default_catalog
db:
state: EOF
errorCode:
queryTime: 3
scanBytes: 0
scanRows: 0
returnRows: 1
cpuCostNs: 33711
memCostBytes: 4200
stmtId: 102
isQuery: 1
feIp: xxx.xx.xxx.xx
stmt: SELECT * FROM starrocks_audit_db__.starrocks_audit_tbl__
digest:
planCpuCosts: 0
planMemCosts: 0
1 row in set (0.01 sec)
トラブルシューティング
動的パーティションが作成され、プラグインがインストールされた後もテーブルに監査ログがロードされない場合は、plugin.conf が正しく設定されているかどうかを確認できます。これを変更するには、まずプラグインをアンインストールする必要があります。
UNINSTALL PLUGIN AuditLoader;
すべての設定が正しく行われたら、上記の手順に従って再度 AuditLoader をインストールできます。