Комментарии 5
Ребят, кто работал с OpenSearch и Camunda (camunda использует opensearch как основную БД), кто-нибудь сталкивался с проблемой, что ID запущенного процесса нестабильно ищется в OpenSearh? Я наблюдаю странные эффекты: по каким-то processInstanceKey ищутся все логи, по каким-то 20%, по каким-то пустой ответ. Причём от чего это зависит, непонятно, - сегодня по всем id опенсеч возращает результаты, завтра только по половине.
Простите, если вы ожидали другой тип вопросов в комментарии :)
Возможно, вы ищете по полю типа text, то есть используете полнотекстовый поиск. В этом случае поиск будет работать разбивая исходную строку на токены. Вам скорее нужно выполнять поиск по полному сопоставлению, в этом случае необходимо использовать тип поля keyword.
Почему иногда ищет, а иногда нет? В некоторых айдишниках могут например быть дефисы, и при полнотекстовом поиске айдишник по дефису будет разбиваться на отдельные токены.
Спасибо, но, к сожалению, там значение в int, то есть проблема точно не в формате. Ещё есть особенность, что ищет "хорошо", когда нагрузка (количество логов в единиц времени) меньше, чем в среднем. А когда нагрузка большая, то ищет плохо
Такая проблема может быть связана с множеством причин
OpenSearch не мгновенно индексирует новые документы. В зависимости от настроек индексации (refresh interval, replica count) данные могут быть временно недоступны.
Проверьте:
Какой refresh_interval установлен для индекса? (GET index_name/_settings)
Используется ли force refresh после записи (POST index_name/_refresh)?
Настроена ли репликация (number_of_replicas) и нет ли задержек в согласовании?
Если ваш индекс распределён на несколько шардов, то запросы могут попадать в разные ноды с разным уровнем актуальности данных.
Проверьте:
Какая у вас стратегия search.preference? (_primary, replica, primary_first)
Все ли ноды "здоровы"? (GET cat/health?v и GET cat/nodes?v)
Есть ли проблемы с шардами? (GET _cat/shards?v)
Camunda активно обновляет данные в OpenSearch, и если старые записи переписываются новыми, а запросы выполняются без track_total_hits, может возвращаться неполный результат.
Camunda может записывать данные без ожидания обновления индекса. Если у вас refresh_interval слишком высокий, поиск может возвращать устаревшие результаты. Можно попробовасть снизить его до 1 секунды.
Не стоит забывать и про банальную перегрузку кластера. Если некоторые узлы перегружены или недоступны, часть запросов может выполняться нестабильно.
Есть ли ошибки в логах? (journalctl -u opensearch -f)
Как загрузка нод? (GET _nodes/stats)
Есть ли задержки записи? (GET cat/pendingtasks?v)
Можно ли отресайзить эту инсталяцию по ресурсам? Или перенести на более современное железо?
Попробовать воспроизвести проблему на другом окружении/инфраструктруе
OpenSearch как сервис: обзор и тривиальный пример использования на Python