Настройка источника Clickhouse и сбор событий аудита БД
Информация, приведенная на данной странице, является разработкой команды pre-sales и/или community KUMA и НЕ является официальной рекомендацией вендора.
Для настройки базового аудита Clickhouse понадобится:
1. Для логирования обычных запросов (в том числе grant, create) включить логирование в основном файле
/etc/clickhouse-server/config.xml
в секции logger как минимум необходимо задать формат information
#########################################
<clickhouse>
<logger>
<level>information</level>
#########################################
2. Для логирования подключений, таких как:
вхСоздание пользователя- Назначение прав
ыхпользователю - Удаление пользователя
нНеуспешный вход в базу
потребуется создать отдельный файл
/etc/clickhouse-server/config.d/session_log.xml
с содержимым:
<clickhouse>
<session_log>
<database>system</database>
<table>session_log</table>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</session_log>
</clickhouse>
3. Перезапустить службу командой systemctl restart clickhouse-server
В базе system появится новая таблица со следующими колонками:
Создаём пользователя для подключения к БД для KUMA и выдаём ему необходимые права следующим командами:
###Создание пользователя для коллектора KUMA
CREATE USER kuma HOST IP '10.10.10.1/32' IDENTIFIED WITH sha256_password BY 'supersecretpassword';
####Создание VIEW для вывода нескольких запросов
CREATE VIEW combined_logs AS
SELECT
event_time,event_time user,AS query_kind,timestamp,
exception,query_kind client_hostname,AS client_name,deviceAction,
http_user_agent,user type,AS userName,
replace(toString(initial_address), '::ffff:', '') AS ipv4_address,sourceAddress,
exception AS msg,
query AS requestUrl
FROM
system.query_log ql
WHERE
match(toString(initial_address), '^::ffff:')
AND query_kind IN ('Grant', 'Create', 'Drop')
UNION ALL
SELECT
event_time,event_time user,AS timestamp,
type AS deviceAction,
user AS userName,
toString(client_address) AS sourceAddress, -- Приводим IPv6 к String
failure_reason AS msg,
NULL AS query_kind, -- Добавляем NULL для отсутствующего столбца `query_kind`
NULL AS exception, -- Добавляем NULL для отсутствующего столбца `exception`
NULL AS client_hostname, -- Добавляем NULL для отсутствующего столбца `client_hostname`
NULL AS client_name, -- Добавляем NULL для отсутствующего столбца `client_name`
NULL AS http_user_agent, -- Добавляем NULL для отсутствующего столбца `http_user_agent`
type,
replace(toString(client_address), '::ffff:', '') AS ipv4_address,
NULL AS query -- Добавляем NULL для отсутствующего столбца `query`requestUrl
FROM
system.session_log
WHERE
`type`type = '0'LoginFailure'; #При необходимости убираем условие, чтобы отселживать события входа\выхода в базу
####Назначение прав на VIEW
GRANT SELECT ON combined_logs TO kuma
Пример как выглядит вывод VIEW:
Настройка инстанса завершена, можно приступать к подключению логов в KUMA.
В KUMA необходимо создать коллектор с транспортом sql (плейсхолдер для Clickhouse - ?) и параметрами как на скриншоте:
Создаём нормализатор, мапим колонки БД в нужные нам поля KUMA и получаем лог.