Перейти к содержанию

Режимы подсчёта и обновления статистики

В 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. Внутренние детали реализации в этом разделе не рассматриваются.