Структура для таблиц событий (Event) в Clickhouse
Проблема
На текущий момент для хранения событий FM
(Event
) используется коллекция Mongo
и это влечёт за собой следующие расходы:
- При значительном потоке событий отбирает ресурсы на расчёт индекса
- Рост размера коллекции
- Замедление работы классификатора, поскольку требуется ожидание вставки данных
- Отдельный скрипт для очистки старых событий.
На текущий момент события имеют ценность в двух сценариях:
- Как источник аварий. В этом случае они поступаются в коррелятор минуя базу.
- Как возможность проведения аналитики по структурированным данным
В итоге может быть правильно отправлять их напрямую в аналитическую БД (Clickhouse
) миную основную базу системы.
Предложение
Для описания способа хренения событий есть несколько вопросов:
- В событиях есть поля с переменными (
vars
). УClickhouse
есть необходимые функции для работы сJSON
сохранённым как строка: Функции для работы с JSON. При необходимости развернуть Json в столбцы для удобства работы можно использоватьView
. - В событиях есть поле
repeat
, фиксирующее число срабатыванийRepeatSupression
. Есть 2 варианта его конвертации:- Добавление поля
RepeatHash
. При выборках можно проводить по нему группировку - Писать отправлять события без учёта повторов, при необходимости подсчёта повторов делать группировку по интересующим полям
- Добавление поля
- Сохранение структуры
EventLog
. На текущий момент это поле используется в двух местах:- Добавление комментариев из интерфейса
- Работа механизма
RepeatSupression
Видимо, сохранять его в Clickhouse
смысла нет.
Определить в Clickhouse
таблицу для отправки в неё событий следующей со следующей структурой:
-
date (
DateField
) -
ts (
DateTimeField
) - время регистрации события системой -
start_ts (
DateTimeField
) - время начало события -
event_id (
StringField
) - ID события -
event_class (
ReferenceField
) - класс события -
source (
StringField
) - источник события:syslog
,SNMP Trap
,system
,other
-
raw_vars (
MapField
) -json
поляraw_vars
в текстовом представлении -
repeat_hash (
StringField
) - подсчитанныйhash
повторов -
resolved_vars - (
StringField
) -json
поляresolved_vars
в текстовом представлении -
vars - (
MapField
) -json
поляresolved_vars
в текстовом представлении -
managed_object (
ReferenceField
) - ссылка на устройство (ManagedObject
) -
pool (
ReferenceField
) - Пул -
ip (
IPv4Field
) - IP адрес источника события -
profile (
ReferenceField
) - Профиль SA -
vendor (
ReferenceField
) - производитель -
platform (
ReferenceField
) - платформа -
version (
ReferenceField
) - версия