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
に設定することをお勧めします。StarRocks の各 FE は独立して監査ログを管理し、プラグインをインストールすると、各 FE は独自のバックグラウンドスレッドを開始して監査ログを取得して保存し、Stream Load を介して書き込みます。frontend_host_port
設定項目は、プラグインのバックグラウンド Stream Load タスクのために HTTP プロトコルの IP とポートを提供するために使用され、このパラメータは複数の値をサポートしていません。パラメータの IP 部分にはクラスター内の任意の FE の IP を使用できますが、対応する FE がクラッシュした場合、他の FE のバックグラウンドの監査ログ書き込みタスクも通信の失敗により失敗するため、お勧めしません。デフォルト値127.0.0.1:8030
に設定することをお勧めします。これにより、各 FE は独自の HTTP ポートを使用して通信し、他の FE の例外が発生した場合の通信への影響を回避します(すべての書き込みタスクは最終的に FE Leader ノードに転送されて実行されます)。database
: 監査ログをホストするために作成したデータベースの名前。table
: 監査ログをホストするために作成したテーブルの名前。user
: クラスターのユーザー名。テーブルにデータをロードする権限 (LOAD_PRIV) を持っている必要があります。password
: ユーザーパスワード。secret_key
: パスワードを暗号化するために使用されるキー(文字列、16 バイトを超えてはならない)。このパラメータが設定されていない場合、plugin.conf 内のパスワードは暗号化されず、password
に平文のパスワードを指定するだけで済みます。このパラメータが指定されている場合、パスワードはこのキーで暗号化されていることを示し、password
に暗号化された文字列を指定する必要があります。暗号化されたパスワードは、StarRocks でAES_ENCRYPT
関数を使用して生成できます:SELECT TO_BASE64(AES_ENCRYPT('password','secret_key'));
。enable_compute_all_query_digest
: すべてのクエリに対して Hash SQL フィンガープリントを生成するかどうか(StarRocks はデフォルトで遅いクエリに対してのみ SQL フィンガープリントを有効にしています)。プラグイン内のフィンガープリント計算は FE のものとは異なり、SQL ステートメントを正規化 しますが、プラグインはしません。この機能を有効にすると、フィンガープリント計算は追加の計算リソースを消費します。filter
: 監査ログロードのフィルター条件。このパラメータは、Stream Load の WHERE パラメータ に基づいており、デフォルトでは空の文字列です。例:filter=isQuery=1 and clientIp like '127.0.0.1%' and user='root'
。
-
ファイルを再びパッケージに圧縮します。
zip -q -m -r auditloader.zip auditloader.jar plugin.conf plugin.properties
-
パッケージを FE ノードをホストするすべてのマシンに配布します。すべてのパッケージが同一のパスに保存されていることを確認してください。そうでない場合、インストールは失敗します。パッケージを配布した後、絶対パスをコピーすることを忘れないでください。
注意
auditloader.zip をすべての FE がアクセス可能な HTTP サービス(たとえば、
httpd
やnginx
)に配布し、ネットワークを使用してインストールすることもできます。どちらの場合でも、インストールが実行された後、auditloader.zip はパスに永続化される必要があり、インストール後にソースファイルを削除しないでください。
AuditLoader のインストール
AuditLoader を StarRocks にプラグインとしてインストールするために、コピーしたパスと共に次のステートメントを実行します。
INSTALL PLUGIN FROM "<absolute_path_to_package>";
ローカルパッケージからのインストール例:
INSTALL PLUGIN FROM "<absolute_path_to_package>";
ネットワークパスを介してプラグインをインストールしたい場合、INSTALL ステートメントのプロパティにパッケージの md5 を提供する必要があります。
例:
INSTALL PLUGIN FROM "http://xx.xx.xxx.xxx/extra/auditloader.zip" PROPERTIES("md5sum" = "3975F7B880C9490FE95F42E2B2A28E2D");
詳細な手順については、 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.5+. Load audit log to starrocks, and user can view the statistic of queries
Version: 4.2.1
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 のログは各 FE の fe.log に出力されます。fe.log 内のキーワード audit
を検索して取得できます。すべての設定が正しく行われた後、上記の手順に従って再度 AuditLoader をインストールできます。