Skip to main content

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

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

Для настройки базового аудита Clickhouse понадобится:

1. Для логирования обычных запросов (в том числе grant, create) включить логирование в основном файле

/etc/clickhouse-server/config.xml

 в секции logger как минимум необходимо задать формат information

#########################################
<clickhouse>
    <logger>
        <level>information</level>
#########################################

2. Для логирования подключений, таких как:

  • Создание пользователя
  • Назначение прав пользователю
  • Удаление пользователя
  • Неуспешный вход в базу
  • Длительный запрос в базу (более 10 минут, как пример)(условие query_duration_ms > '600000' в запросе )
  • Большое потребление памяти (более 1 Гб, как пример)(условие memory_usage > '1000000000')

потребуется создать отдельный файл 

/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 появится новая таблица со следующими колонками:

image.pngimage.png

Создаём пользователя для подключения к БД для KUMA и выдаём ему необходимые права следующим командами (с использованием ранее настроенного аудита):

###С###Шаг 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,
       replace(toString(initial_address), '::ffff:', '') AS sourceAddress,
       exception AS msg,
       query AS requestUrlrequestUrl,
	   query_duration_ms AS dcs1,
	   memory_usage AS dcs2
FROM system.query_log
ql
WHERE 
    match(toString(initial_address), '^::ffff:') 
    AND 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,
    -- Приводим IPv6 к String
    failure_reason AS msg,
    NULL AS requestUrlrequest_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.pngimage.png

Настройка инстанса завершена, можно приступать к подключению логов в KUMA.

В KUMA необходимо создать коллектор с транспортом sql (плейсхолдер для Clickhouse - ?) и параметрами как на скриншоте:

image.png

СоздВыбираёем нормализатор Clickhouse (доступен в Community pack), добавляемап необходимые точки назначения и инсталлируем службу коллектонкра.

Либо, если БДнам вне нужны события входа в БД можем использовать запрос только в таблицу по умолчанию:

###Шаг 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