Как стать автором
Обновить

OpenSearch как сервис: обзор и тривиальный пример использования на Python

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров9K
Всего голосов 46: ↑45 и ↓1+54
Комментарии5

Комментарии 5

Ребят, кто работал с OpenSearch и Camunda (camunda использует opensearch как основную БД), кто-нибудь сталкивался с проблемой, что ID запущенного процесса нестабильно ищется в OpenSearh? Я наблюдаю странные эффекты: по каким-то processInstanceKey ищутся все логи, по каким-то 20%, по каким-то пустой ответ. Причём от чего это зависит, непонятно, - сегодня по всем id опенсеч возращает результаты, завтра только по половине.

Простите, если вы ожидали другой тип вопросов в комментарии :)

Возможно, вы ищете по полю типа text, то есть используете полнотекстовый поиск. В этом случае поиск будет работать разбивая исходную строку на токены. Вам скорее нужно выполнять поиск по полному сопоставлению, в этом случае необходимо использовать тип поля keyword.

Почему иногда ищет, а иногда нет? В некоторых айдишниках могут например быть дефисы, и при полнотекстовом поиске айдишник по дефису будет разбиваться на отдельные токены.

Спасибо, но, к сожалению, там значение в int, то есть проблема точно не в формате. Ещё есть особенность, что ищет "хорошо", когда нагрузка (количество логов в единиц времени) меньше, чем в среднем. А когда нагрузка большая, то ищет плохо

Такая проблема может быть связана с множеством причин
OpenSearch не мгновенно индексирует новые документы. В зависимости от настроек индексации (refresh interval, replica count) данные могут быть временно недоступны.
Проверьте:

  1. Какой refresh_interval установлен для индекса? (GET index_name/_settings)

  2. Используется ли force refresh после записи (POST index_name/_refresh)?

  3. Настроена ли репликация (number_of_replicas) и нет ли задержек в согласовании?

Если ваш индекс распределён на несколько шардов, то запросы могут попадать в разные ноды с разным уровнем актуальности данных.
Проверьте:

  1. Какая у вас стратегия search.preference? (_primary, replica, primary_first)

  2. Все ли ноды "здоровы"? (GET cat/health?v и GET cat/nodes?v)

  3. Есть ли проблемы с шардами? (GET _cat/shards?v)

Camunda активно обновляет данные в OpenSearch, и если старые записи переписываются новыми, а запросы выполняются без track_total_hits, может возвращаться неполный результат.

Camunda может записывать данные без ожидания обновления индекса. Если у вас refresh_interval слишком высокий, поиск может возвращать устаревшие результаты. Можно попробовасть снизить его до 1 секунды.

Не стоит забывать и про банальную перегрузку кластера. Если некоторые узлы перегружены или недоступны, часть запросов может выполняться нестабильно.

  1. Есть ли ошибки в логах? (journalctl -u opensearch -f)

  2. Как загрузка нод? (GET _nodes/stats)

  3. Есть ли задержки записи? (GET cat/pendingtasks?v)

  4. Можно ли отресайзить эту инсталяцию по ресурсам? Или перенести на более современное железо?

  5. Попробовать воспроизвести проблему на другом окружении/инфраструктруе

Зарегистрируйтесь на Хабре, чтобы оставить комментарий