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 "クエリの一意ID",
  `timestamp` DATETIME NOT NULL COMMENT "クエリ開始時間",
  `queryType` VARCHAR(12) COMMENT "クエリタイプ(query、slow_query、connection)",
  `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(512) 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がクエリかどうか(1または0)",
  `feIp` VARCHAR(128) COMMENT "この文を実行したFE IP",
  `stmt` VARCHAR(1048576) COMMENT "SQL元文",
  `digest` VARCHAR(32) COMMENT "スロークエリのフィンガープリント",
  `planCpuCosts` DOUBLE COMMENT "クエリ計画段階のCPU使用量(ナノ秒)",
  `planMemCosts` DOUBLE COMMENT "クエリ計画段階のメモリ使用量(バイト)",
  `pendingTimeMs` BIGINT COMMENT "クエリがキューで待機した時間(ミリ秒)",
  `candidateMVs` VARCHAR(65533) NULL COMMENT "候補マテリアライズドビューのリスト",
  `hitMvs` VARCHAR(65533) NULL COMMENT "ヒットしたマテリアライズドビューのリスト",
  `warehouse` VARCHAR(32) NULL COMMENT "Warehouse名"
) ENGINE = OLAP
DUPLICATE KEY (`queryId`, `timestamp`, `queryType`)
COMMENT "監査ログテーブル"
PARTITION BY date_trunc('day', `timestamp`)
PROPERTIES (
  "replication_num" = "1",
  "partition_live_number"="30"
);
starrocks_audit_tbl__ は動的パーティションで作成されます。デフォルトでは、テーブル作成後 10 分で最初の動的パーティションが作成されます。その後、監査ログをテーブルにロードできます。次のステートメントを使用してテーブル内のパーティションを確認できます。
SHOW PARTITIONS FROM starrocks_audit_db__.starrocks_audit_tbl__;
パーティションが作成されたら、次のステップに進むことができます。
AuditLoader のダウンロードと設定
- 
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'));。
- filter: 監査ログロードのフィルター条件。このパラメータは Stream Load の WHERE パラメータ に基づいており、- -H “where: <condition>”として指定され、デフォルトは空の文字列です。例:- 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 3.3.11+. Load audit log to starrocks, and user can view the statistic of queries
 Version: 5.0.0
 JavaVersion: 11
 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
 …………
トラブルシューティング
動的パーティションが作成され、プラグインがインストールされた後もテーブルに監査ログがロードされない場合、plugin.conf が正しく設定されているかどうかを確認できます。これを変更するには、まずプラグインをアンインストールする必要があります。
UNINSTALL PLUGIN AuditLoader;
AuditLoader のログは fe.log に出力されます。fe.log 内で audit というキーワードを検索することで取得できます。すべての設定が正しく行われた後、上記の手順に従って再度 AuditLoader をインストールできます。