Data Storager
data-storager (репозиторий и имя сервиса) — микросервис, который переносит данные из основной реляционной БД Webim в поисковый кластер (Elasticsearch или OpenSearch) и аналитическую СУБД ClickHouse. Сервис работает по модели «чтение → преобразование → запись» и не изменяет исходные данные в основных базах Webim.
Функции
Сервис обладает следующими функциями:
-
Индексация истории чатов, статусов операторов и связанных объектов в Elasticsearch / OpenSearch (для быстрого поиска в Истории диалогов)
-
Перенос статистических данных в ClickHouse (для работы Статистики)
-
Инкрементальное обновление данных по мере поступления новых событий (через брокер сообщений Kafka)
-
Публикация технических метрик для мониторинга
-
Предоставление эндпоинтов для проверки состояния сервиса
Сетевые требования
Сервис предоставляет HTTP-эндпоинты для мониторинга и проверки состояния. Порт задаётся переменными окружения (значения по умолчанию следует уточнять по .env сервиса).
Метрики доступны по пути /metrics.
Проверка состояния доступна по пути /health (если включена в поставке/конфигурации сервиса).
Для hosted-клиентов необходимо открыть следующие порты и направления для узла с сервисом.
| Направление | Назначение | Порт/протокол | Примечание |
|---|---|---|---|
| Входящие | HTTP-эндпоинты сервиса | порт сервиса (по умолчанию 8000/tcp) | Для доступа к /metrics и /health. |
| Исходящие | Бэкенд Webim | 443/tcp | Для получения данных и служебных запросов. |
| Исходящие | Кэш | порт кэша | Если используется внешний кэш (рекомендуется при масштабировании). |
| Исходящие | Elasticsearch / OpenSearch | 9200/tcp (по умолчанию) | Для записи индексов истории чатов. |
| Исходящие | ClickHouse | 9000/tcp (по умолчанию) | Для записи статистических данных. |
| Исходящие | Apache Kafka | порт брокера | Получение триггеров на обработку данных. |
Переменные окружения
Сервис настраивается через файл .env. Полный перечень переменных и значения по умолчанию смотрите в репозитории сервиса: файл .env.template в корне (разработка) и deploy/.es-storager.env.example (типичный hosted-пример с другими именами для поиска: ELASTIC_URLS, ELASTIC_USER и т. д.). Ниже — имена из .env.template, которые чаще всего нужно согласовать при развёртывании:
| Переменная | Назначение |
|---|---|
KAFKA_BROKER |
Адрес брокера Apache Kafka. |
DISCOVER_AND_STORE_CHATS_TOPIC |
Имя топика с задачами на обработку (в шаблоне задано по умолчанию). |
SEARCH_ENGINE_URLS |
URL узлов Elasticsearch / OpenSearch (в примере deploy/.es-storager.env.example — ELASTIC_URLS). |
SEARCH_ENGINE_USER, SEARCH_ENGINE_PASSWORD |
Учётная запись кластера поиска (в hosted-примере часто ELASTIC_USER, ELASTIC_PASSWORD). |
SEARCH_ENGINE_INDEX_TEMPLATE |
Шаблон имён индексов, например {account}-{object}. |
SEARCH_ENGINE_TYPE |
elasticsearch или opensearch. |
STATS_DATABASE_DEFAULT_URLS |
Подключения к ClickHouse для статистики (несколько URL через запятую при необходимости). |
META_DATABASE_URL |
Подключение к meta-БД Webim. |
PRO_DATABASE_TEMPLATE, PRO_DATABASE_DEFAULT_URL |
Шаблон имени и URL баз pro по аккаунтам. |
REDIS_CACHE_LOCATION |
Строка подключения к Redis для кэша. |
STATS_WEB_PORT |
Порт HTTP-сервиса статистики (метрики и служебные эндпоинты; по умолчанию в коде — 8000). |
ES_KEY_VALUE |
Значение, с которым producer сопоставляет value для ключа es_storager_key в таблице accountkeyvalue (см. Подключение Elasticsearch или OpenSearch). |
SENTRY_DSN |
Опционально: отправка ошибок в Sentry. |
Масштабирование и отказоустойчивость
Сервис может быть развернут в нескольких экземплярах за балансировщиком (если это предусмотрено вашей схемой). При горизонтальном масштабировании рекомендуется использовать общий внешний кэш для согласованной работы экземпляров.
Логирование и мониторинг
Логи приложения пишутся в стандартный вывод процесса.
Технические метрики доступны на /metrics и могут быть собраны системой мониторинга. Для контроля доступности рекомендуется настроить проверку /health (если эндпоинт включён).
data-storager обеспечивает перенос данных из основной БД Webim в Elasticsearch / OpenSearch и ClickHouse, предоставляя эндпоинты для мониторинга и контроля состояния.