Подключение Elasticsearch или OpenSearch
Elasticsearch и OpenSearch — поисковые движки, позволяющие в режиме, близком к реальному времени, хранить, искать и анализировать большие объёмы данных. В сервисе Webim такой движок используется как дополнительное хранилище истории чатов, чтобы сократить время ответа при большом числе диалогов. Ниже — подключение к Webim; шаги для Elasticsearch и OpenSearch совпадают по смыслу, отличаются только установка кластера и значение type в db.json.
Начиная с Webim Server 10.8 сервер подключается к поисковому кластеру через клиент OpenSearch (пакет opensearch-py): в конфигурации допускаются типы соединения elastic, elasticsearch и opensearch — укажите тот, который соответствует вашему продукту. Рекомендуемый ключ секции в dbs — history (поддерживается и прежний ключ elastic). Параметры учётной записи, хоста, порта и шаблона имён индексов те же, что и для Elasticsearch.
Инструкция по подключению
-
Установите Elasticsearch или OpenSearch на отдельный физический или виртуальный сервер. Для Elasticsearch ориентируйтесь на официальную инструкцию по установке:
Для OpenSearch используйте документацию по установке.
Требования к серверу поиска можно посмотреть в этих руководствах и в статье о хранилищах.
Кластер Elasticsearch можно масштабировать по официальной документации; для OpenSearch — по документации OpenSearch.
-
Обратитесь в техническую поддержку за компонентом
data-storager, который переносит данные из аналитической СУБД (MySQL, PostgreSQL) в поисковый кластер (Elasticsearch или OpenSearch), и за инструкциями по его установке. -
Дополните конфигурационный файл
/etc/webim/db.jsonблоком подключения к поисковому кластеру. Пример для Elasticsearch (type:elastic,elasticsearchилиopensearch— на Webim Server 10.8+ поддерживаются все три варианта):"dbs": { "elastic": { "default": { "type": "elastic", "host": "YOUR_IP_ADDRESS", "port": PORT, # default = 9200 "user": "elastic", "password": "ELASTIC_PASSWORD", "scheme": "http", "index_name_template": "{account}-{object}" } } }Для OpenSearch задайте, например,
"type": "opensearch"и учётные данные пользователя вашего кластера OpenSearch (имя пользователя может отличаться отelastic).В верхнем регистре указаны плейсхолдеры значений параметров, Вам необходимо заполнить их самостоятельно в соответствии с Вашей конфигурацией.
N.B.
Нужна учётная запись с полными правами на работу с индексами в выбранном поисковом кластере (как для Elasticsearch, так и для OpenSearch).
-
Перезагрузите Chat Backend.
-
Активируйте в account config необходимые Вам параметры:
-
elasticsearch_history: поиск в истории диалогов через поисковый кластер (Elasticsearch или OpenSearch). Процесс поиска ускоряется, но данные о новых диалогах в истории будут появляться с задержкой; -
elasticsearch_threadprocessor: экспорт протоколов чатов в тот же кластер. Для работы необходимо активироватьelasticsearch_history.
-
Kafka и data-storager
Если для интеграции с Elasticsearch или OpenSearch используется сервис data-storager (выгрузка истории диалогов и сопутствующих объектов), необходима установленная и доступная Apache Kafka.
data-storager публикует и читает сообщения из Kafka (режимы producer и consumer), поэтому необходимо обеспечить:
-
доступ к брокеру/кластеру Kafka (bootstrap servers) из инфраструктуры Webim;
-
наличие топиков и прав на запись/чтение для сервисной учетной записи;
-
при использовании защищенных профилей — корректные параметры авторизации/шифрования (SASL/SSL).
Маркер соответствия аккаунта для data-storager
Назначение
Маркер соответствия связывает аккаунт с конкретным инстансом data-storager. Producer data-storager создаёт задачи на перекачку данных только для тех аккаунтов, у которых значение es_storager_key в meta-БД совпадает со значением переменной окружения сервиса.
Где задаются значения
-
В окружении data-storager (файл
.envсервиса): переменнаяES_KEY_VALUE— строка, с которой producer сравнивает значение из meta-БД (см. репозиторий сервиса:.env.template,deploy/.es-storager.env.example). -
В meta-БД, таблица
accountkeyvalue: строка сkey = 'es_storager_key'иvalue, совпадающим сES_KEY_VALUEиз.envинстанса data-storager, который должен обрабатывать этот аккаунт.
N.B.
Имя ключа в meta-БД — историческое (es_storager_key); в переменных окружения актуальное имя — ES_KEY_VALUE (так его читает producer в коде сервиса). Значения в БД и в .env должны совпадать посимвольно.
Значение по умолчанию
Отсутствует. Значение необходимо задать явно. Пустые/несогласованные значения недопустимы.