Как организовать журнал событий в распределённой системе правильно?

Обстановка:

Приложение, которое в автоматическом режиме совершает обзвон пользователей (миллионы абонентов в сутки), состоит из разных сервисов (интерфейсы настроек, всякие приблуды для телефонии, черные списки, управление юзерами и тд).
Появилась потребность в пользовательском интерфейсе (где всё настраивается пользователями, можно просматривать дашборды, отчёты и тд) - возможность смотреть "журнал событий" - раздел, где можно посмотреть, когда кто и где что-то сделал в системе. В том числе когда действия сделаны системой (например сервис определения автоответчиков определил автоответчик во время звонка) и пользователем (поменял настройки, добавил другого пользователя, сменил имя и тд).

Всё это живет в кубере. Вопрос - как бы реализовать такую функциональность лучшим образом? Пока что основная идея - добавить Кафку, туда кидать сообщения по каждому событию из каждого сервиса в едином формате (что-то своё придумать), и привязать к этому делу сервис-слушатель, который бы читал эту Кафку и писал в допустим, Кликхаус, эти самые сообщения в согласованном виде типа:
сервис / юзер / ip (где применимо) / тип операции (read/update/write/delete) / данные операции (json) / дата+время

Ну и потом из сервиса, который отвечает за фронт, получать эти данные по фильтрам какие нужны. Вроде бы звучит ок, но есть сомнения.
  • Вопрос задан
  • 245 просмотров
Пригласить эксперта
Ответы на вопрос 2
newross
@newross
Product owner
Звучит как задача для Elastic (хранение логов) + Kibana для визуализации.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
В данном задании непонятно насколько остро стоит необходимость именно в MQ системе.

Можно начать просто с централизованного сбора логов. Мне кажется это проще
чем строить кафку. Кроме того логгирование работает всегда, пока есть файловая
система. А Кафка может быть недоступна какое-то количество минут или секунд в году.
И вам надо будет думать что делать с событиями которые не ушли в Кафку. Блокировать.
Дропать события. Или искать резервное мето куда форварднуть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы