# Настройка источника Clickhouse и сбор событий аудита БД

Информация, приведенная на данной странице, является разработкой команды pre-sales и/или community KUMA и **НЕ** является официальной рекомендацией вендора.

Для настройки базового аудита Clickhouse понадобится: 1\. Для логирования обычных запросов (в том числе grant, create, drop) включить логирование в основном файле (по умолчанию включено): ```bash /etc/clickhouse-server/config.xml ``` в секции logger как минимум необходимо задать формат information ```xml ######################################### information ######################################### ``` 2\. Для логирования подключений, таких как: - Login пользователя - Failure logon - Logout пользователя потребуется создать отдельный файл ```bash /etc/clickhouse-server/config.d/session_log.xml ``` с содержимым: ```xml system session_log
7500
``` 3\. Перезапустить службу командой systemctl restart clickhouse-server В базе system появится новая таблица со следующими колонками: [![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/s17image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/s17image.png) Создаём пользователя для подключения к БД для KUMA и выдаём ему необходимые права следующим командами (с использованием ранее настроенного аудита): ```sql ###Шаг 1. Создание пользователя для коллектора KUMA CREATE USER kuma HOST IP '10.10.10.1/32' IDENTIFIED WITH sha256_password BY 'supersecretpassword'; ####Шаг 2. Создание VIEW для вывода нескольких запросов CREATE VIEW combined_logs AS SELECT event_time AS timestamp, query_kind AS deviceAction, user AS userName, toString(initial_address) AS sourceAddress, exception AS msg, query AS requestUrl, query_duration_ms AS dcs1, memory_usage AS dcs2 FROM system.query_log WHERE query_kind IN ('Grant', 'Create', 'Drop') OR query_duration_ms > '600000' OR memory_usage > '1000000000' ORDER BY timestamp DESC UNION ALL SELECT event_time AS timestamp, type AS deviceAction, user AS userName, toString(client_address) AS sourceAddress, failure_reason AS msg, NULL AS request_url, NULL AS dcs1, NULL AS dcs2 FROM system.session_log WHERE type = 'LoginFailure' ####Шаг 3. Назначение прав на VIEW GRANT SELECT ON combined_logs TO kuma ``` Пример как выглядит вывод VIEW: [![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-02/scaled-1680-/wd5image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2025-02/wd5image.png) Настройка инстанса завершена, можно приступать к подключению логов в KUMA. Итого данной View мы выводим следующие события: - Login пользователя - Failure logon - Logout пользователя - Длительный запрос в базу (более 10 минут, как пример)(условие query\_duration\_ms > '600000' в запросе ) - Большое потребление памяти при запросе (более 1 Гб, как пример)(условие memory\_usage > '1000000000') - Создание пользователя - Назначение прав пользователю - Удаление пользователя В KUMA необходимо создать коллектор с транспортом sql (плейсхолдер для Clickhouse - ?) и параметрами как на скриншоте: [![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-02/scaled-1680-/7Ygimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2025-02/7Ygimage.png) Выбираем нормализатор Clickhouse ([доступен в Community pack](https://kas.pr/kuma-ppack)), добавляем необходимые точки назначения и инсталлируем службу коллектора. Либо, если нам **не нужны события входа в БД** можем использовать запрос только в таблицу по умолчанию: ```sql ###Шаг 1. Создание пользователя для коллектора KUMA CREATE USER kuma HOST IP '10.10.10.1/32' IDENTIFIED WITH sha256_password BY 'supersecretpassword'; ####Шаг 2. Назначение прав на выполнение SELECT к system.query_log GRANT SELECT ON system.query_log TO kuma ####Шаг 3. Используем запрос для KUMA коллектора SELECT event_time AS timestamp, query_kind AS deviceAction, user AS userName, toString(initial_address) AS sourceAddress, exception AS msg, query AS requestUrl, query_duration_ms AS dcs1, memory_usage AS dcs2 FROM system.query_log WHERE query_kind IN ('Grant', 'Create', 'Drop') OR query_duration_ms > '600000' OR memory_usage > '1000000000' AND timestamp > ? ORDER BY timestamp DESC ```