Режимы подсчёта и обновления статистики
В Webim актуальность данных в отчётах зависит от версии модуля статистики (версия 1 или версия 2) и выбранного режима подсчёта/обновления. В данном разделе рассматриваются режимы подчсета и обновления статистики.
Статистика версии 1
В Статистике версии 1 часть данных кэшируется. В зависимости от настроек возможны разные сценарии обновления.
1) Быстрая статистика: только отображение рассчитанного кэша
В редакторе настроек аккаунта (account config) установлены параметры настроек сервера:
-
new_stats_mode = true -
stats_display_only = true
Что происходит:
-
при открытии страницы статистики пересчёт не запускается;
-
показываются данные, рассчитанные заранее фоновым заданием (как правило — за прошлые сутки).
Данные в таком случае обновляются по расписанию (обычно 1 раз в сутки).
2) Быстрая статистика: кэш + расчёт при запросе
В редакторе настроек аккаунта (account config) установлены параметры настроек сервера:
-
new_stats_mode = true -
stats_display_only = false
Что происходит:
-
при открытии статистики система достраивает (дополняет) кэш
chatstatsдля выбранного периода и фильтров; -
данные могут быть актуальнее, но запрос может выполняться дольше и создавать дополнительную нагрузку на Chat Backend.
Данные в таком случае обновляются при обращении к отчётам (в интерфейсе или через API статистики).
3) Полный пересчёт при запросе
В редакторе настроек аккаунта (account config) установлен параметр настройки сервера:
new_stats_mode = false
Что происходит:
-
статистика пересчитывается целиком за выбранный период при каждом запросе;
-
максимальная актуальность, но самый тяжёлый режим по времени и нагрузке.
N.B.
В режимах 1–2 данные за текущий день могут обновляться не сразу: часть показателей появится после фонового расчёта или после рассчёта при открытии страницы статистики. Для прошедших дней значения обычно стабилизируются после расчёта кэша.
Статистика версии 2 (ClickHouse)
В Статистике версии 2 отчёты строятся на данных в ClickHouse. Используются два подхода к наполнению ClickHouse.
1) Наполнение со стороны Chat Backend
Данные попадают в ClickHouse со стороны Chat Backend. Обновление может идти (почти) в реальном времени или с небольшой задержкой/периодичностью — в зависимости от настроек.
Параметры в редакторе настроек аккаунта (account config):
-
clickhouse_stats— включает использование ClickHouse для статистики версии 2; -
chat_backend_stats_population— включает заполнение статистики версии 2 данными со стороны Chat Backend; -
chat_backend_realtime_population— включает наполнение realtime-данными; -
analytics_v2_chat_backend_realtime_population_period— период обновления realtime-данных (в секундах).
N.B.
Обычные данные — это общие записи по чатам, оценкам, опросам, операторам и т. п., которые пополняются по мере изменений в системе и включают все чаты.
Realtime-данные — это актуальный «срез» данных об онлайне системы и активных на данный момент операторах/чатах; как правило, они содержат только активные чаты и обновляются с заданной периодичностью.
2) Периодическое заполнение фоновой задачей
Для дозаполнения ClickHouse и устранения «пробелов» по данным используется фоновая задача. Ее можно запускать вручную или по расписанию. Подробнее: Перенос данных в ClickHouse.
Нововведение в 10.8
Начиная с версии 10.8 в Webim появится отдельный микросервис Storager (компонент es-storager). Он станет 3-м и основным способом обновления данных в Статистике версии 2.
Как он работает:
-
получает «триггеры» на обработку через брокер сообщений (Kafka). Триггер — это сообщение-задание с названием аккаунта (выполнение очередного шага обновления данных для этого аккаунта);
-
вычитывает изменения из основной базы данных Webim (MySQL/MariaDB/PostgreSQL — в зависимости от инсталляции). Storager получает не сами данные, а только триггер, после чего самостоятельно читает нужные записи из БД;
-
записывает данные:
-
в Elasticsearch (индексы, используемые для поиска чатов),
-
в ClickHouse (данные для отчётов Статистики версии 2).
-
Для инкрементального переноса используются маркеры (хранятся в Redis) — служебные значения прогресса, которые фиксируют, «до какого места» данные уже обработаны. Поэтому при повторных запусках Storager переносит только новые/изменённые данные.
Если маркеров ещё нет (первый запуск), Storager начинает наполнение с ограниченной глубины переноса, которая задаётся в конфигурации (по стандарту — последние 30 дней).
Важно
Storager получает триггеры через Kafka и вычитывает данные из основной БД Webim. Внутренние детали реализации в этом разделе не рассматриваются.
