Управление журналами аудита в Selena через AuditLoader
В этой теме описывается, как управлять журналами аудита Selena в таблице с помощью плагина AuditLoader.
Selena хранит свои журналы аудита в локальном файле fe/log/fe.audit.log, а не во внутренней базе данных. Плагин AuditLoader позволяет управлять журн алами аудита непосредственно в вашем кластере. После установки AuditLoader читает логи из файла и загружает их в Selena через HTTP PUT. Затем вы можете запрашивать журналы аудита в Selena с помощью SQL-запросов.
Создание таблицы для хранения журналов аудита
Создайте базу данных и таблицу в вашем кластере Selena для хранения журналов аудита. Подробные инструкции см. в разделах CREATE DATABASE и CREATE TABLE.
Поскольку поля журналов аудита различаются в разных версиях Selena, вы должны выбрать один из следующих примеров для создания таблицы, совместимой с вашей версией Selena.
ВНИМАНИЕ
- НЕ изменяйте схему таблицы в примерах, иначе загрузка логов завершится неудачей.
- Поскольку поля журналов аудита различаются в разных версиях Selena, новая версия AuditLoader собирает общие поля из всех доступных версий Selena.
CREATE DATABASE starrocks_audit_db__;
CREATE TABLE starrocks_audit_db__.starrocks_audit_tbl__ (
`queryId` VARCHAR(64) COMMENT "Unique ID of the query",
`timestamp` DATETIME NOT NULL COMMENT "Query start time",
`queryType` VARCHAR(12) COMMENT "Query type (query, slow_query, connection)",
`clientIp` VARCHAR(32) COMMENT "Client IP",
`user` VARCHAR(64) COMMENT "Query username",
`authorizedUser` VARCHAR(64) COMMENT "Unique identifier of the user, i.e., user_identity",
`resourceGroup` VARCHAR(64) COMMENT "Resource group name",
`catalog` VARCHAR(32) COMMENT "Catalog name",
`db` VARCHAR(96) COMMENT "Database where the query runs",
`state` VARCHAR(8) COMMENT "Query state (EOF, ERR, OK)",
`errorCode` VARCHAR(512) COMMENT "Error code",
`queryTime` BIGINT COMMENT "Query execution time (milliseconds)",
`scanBytes` BIGINT COMMENT "Number of bytes scanned by the query",
`scanRows` BIGINT COMMENT "Number of rows scanned by the query",
`returnRows` BIGINT COMMENT "Number of rows returned by the query",
`cpuCostNs` BIGINT COMMENT "CPU time consumed by the query (nanoseconds)",
`memCostBytes` BIGINT COMMENT "Memory consumed by the query (bytes)",
`stmtId` INT COMMENT "Incremental ID of the SQL statement",
`isQuery` TINYINT COMMENT "Whether the SQL is a query (1 or 0)",
`feIp` VARCHAR(128) COMMENT "FE IP that executed the statement",
`stmt` VARCHAR(1048576) COMMENT "Original SQL statement",
`digest` VARCHAR(32) COMMENT "Fingerprint of slow SQL",
`planCpuCosts` DOUBLE COMMENT "CPU usage during query planning (nanoseconds)",
`planMemCosts` DOUBLE COMMENT "Memory usage during query planning (bytes)",
`pendingTimeMs` BIGINT COMMENT "Time the query waited in the queue (milliseconds)",
`candidateMVs` VARCHAR(65533) NULL COMMENT "List of candidate materialized views",
`hitMvs` VARCHAR(65533) NULL COMMENT "List of matched materialized views",
`warehouse` VARCHAR(32) NULL COMMENT "Warehouse name"
) 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", -- Keep the audit logs from the latest 30 days. You can adjust this value based on you business demand.
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "3",
"dynamic_partition.enable" = "true",
"replication_num" = "3" -- Keep three replicas of audit logs. It is recommended to keep three replicas in a production environment.
);
Таблица starrocks_audit_tbl__ создается с динамическими разделами. По умолчанию первый динамический раздел создается через 10 минут после создания таблицы. После этого журналы аудита могут быть загружены в таблицу. Вы можете проверить разделы в таблице с помощью следующего запроса:
SHOW PARTITIONS FROM starrocks_audit_db__.starrocks_audit_tbl__;
После создания раздела вы можете переходить к следующему шагу.
Загрузка и настройка AuditLoader
-
Загрузите установочный пакет AuditLoader. Пакет совместим со всеми доступными версиями Selena.
-
Распакуйте установочный пакет.
unzip auditloader.zipИзвлекаются следующие файлы:
- auditloader.jar: JAR-файл AuditLoader.
- plugin.properties: файл свойств AuditLoader. Вам не нужно изменять этот файл.
- plugin.conf: файл конфигурации AuditLoader. В большинстве случаев вам нужно изменить только поля
userиpasswordв файле.
-
Измените plugin.conf для настройки AuditLoader. Вы должны настроить следующие элементы, чтобы убедиться, что AuditLoader работает правильно:
frontend_host_port: IP-адрес FE и HTTP-порт в формате<fe_ip>:<fe_http_port>. Рекомендуется установить значение по умолчанию127.0.0.1:8030. Каждый FE в Selena управляет своим собственным журналом аудита независимо, и после установки плагина каждый FE запустит свой собственный фоновый поток для получения и сохранения журналов аудита и записи их через Stream Load. Параметр конфигурацииfrontend_host_portиспользуется для предоставления IP и порта HTTP-протокола для фоновой задачи Stream Load плагина, и этот параметр не поддерживает несколько значений. IP-часть параметра может использовать IP любого FE в кластере, но это не рекомендуется, поскольку если соответствующий 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. Зашифрованный пароль можно сгенерировать в Selena с помощью функцииAES_ENCRYPT:SELECT TO_BASE64(AES_ENCRYPT('password','secret_key'));.filter: условия фильтрации для загрузки журнала аудита. Этот параметр основан на параметре WHERE в Stream Load, т.е.-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 в HTTP-сервис, доступный для всех FE (например,
httpdилиnginx) и установить его через сеть. Обратите внимание, что в обоих случаях auditloader.zip должен сохраняться в пути после выполнения установки, и исходные файлы не должны удаляться после установки.
Установка AuditLoader
Выполните следующий запрос вместе с скопированным путем для установки AuditLoader в качестве плагина в Selena:
INSTALL PLUGIN FROM "<absolute_path_to_package>";
Пример установки из локального пакета:
INSTALL PLUGIN FROM "<absolute_path_to_package>";
Если вы хотите установить плагин через сетевой путь, вам нужно предоставить md5 пакета в свойствах оператора INSTALL.
Пример:
INSTALL PLUGIN FROM "http://xx.xx.xxx.xxx/extra/auditloader.zip" PROPERTIES("md5sum" = "3975F7B880C9490FE95F42E2B2A28E2D");
Подробные инструкции см. в разделе INSTALL PLUGIN.
Проверка установки и запрос журналов аудита
-
Вы можете проверить успешность установки с помощью SHOW PLUGINS.
В следующем примере
StatusплагинаAuditLoaderравен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-запросов для генерации журналов аудита и подождите 60 секунд (или время, которое вы указали в элементе
max_batch_interval_secпри настройке AuditLoader), чтобы позволить AuditLoader загрузить журналы аудита в Selena. -
Проверьте журналы аудита, запросив таблицу.
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: 908
planMemCosts: 0
pendingTimeMs: -1
candidateMvs: null
hitMVs: null
…………
Устранение неполадок
Если журналы аудита не загружаются в таблицу после создания динамического раздела и установки плагина, вы можете проверить, правильно ли настроен plugin.conf. Для его изменения сначала необходимо удалить плагин:
UNINSTALL PLUGIN AuditLoader;
Логи AuditLoader выводятся в fe.log, вы можете найти их, выполнив поиск по ключевому слову audit в fe.log. После правильной настройки всех конфигураций вы можете следовать приведенным выше шагам для по вторной установки AuditLoader.