MAATRIX / Блог / OpenSearch на Ubuntu 24.04: пошаговая установка

OpenSearch на Ubuntu 24.04: пошаговая установка

MAATRIX

Когда логов и данных становится больше, чем grep способен переварить за разумное время, а искать по ним нужно с фильтрами, агрегациями и почти мгновенным откликом — приходит время полнотекстового поискового движка. OpenSearch закрывает эту задачу без лицензионных вопросов, которые в 2021 году возникли у Elasticsearch. Ниже — установка нативным пакетом на чистый Ubuntu 24.04, настройка памяти под ваш сервер и подключение Dashboards с SSL, без Docker и лишних слоёв абстракции.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое OpenSearch и зачем он на своём сервере

OpenSearch — это форк Elasticsearch версии 7.10.2, сделанный AWS в начале 2021 года после того, как Elastic сменила лицензию Elasticsearch и Kibana с Apache 2.0 на SSPL. Форк остался под Apache 2.0, сохранил API-совместимость с ранним Elasticsearch и развивается дальше отдельным сообществом — сейчас это самостоятельный продукт с собственной веткой релизов, а не просто «старый Elasticsearch под другим именем».

Задачи, под которые его обычно ставят: полнотекстовый поиск по каталогу или документам, централизованный сбор и анализ логов (аналог связки ELK, только буква E теперь означает OpenSearch), метрики и дашборды поверх больших объёмов структурированных данных. Если у вас уже стоит Grafana с Prometheus — OpenSearch закрывает соседнюю нишу, логи и полнотекстовый поиск, а не заменяет мониторинг.

Это не лёгкий инструмент: JVM, минимум пара гигабайт памяти только под процесс, отдельная настройка security plugin. Если задача проще — поиск по каталогу товаров на сайте — возможно, хватит Meilisearch, который ставится за пять минут. OpenSearch оправдан, когда данных много, запросы сложные (агрегации, фасеты, геопоиск) или нужна ELK-подобная аналитика логов.

Требования к серверу и подготовка Ubuntu

OpenSearch — не самый лёгкий сервис на диете. Реалистичный минимум для теста — 2 ядра и 4 ГБ RAM, для рабочей нагрузки с логами нескольких проектов — от 8 ГБ. Диск лучше брать SSD/NVMe: индексация и поиск упираются в IOPS быстрее, чем в CPU.

RAM сервераJVM heap (Xms=Xmx)Комментарий
4 ГБ2 ГБТолько для теста, Dashboards на этом же сервере будет тесно
8 ГБ4 ГБКомфортный старт: OpenSearch + Dashboards на одной машине
16 ГБ8 ГБРабочая нагрузка среднего проекта
32 ГБ и больше16 ГБ, но не выше ~31 ГБJVM теряет оптимизацию compressed oops за этим порогом — смысла задирать heap выше нет

Правило «половина RAM под heap, вторая половина под файловый кэш ОС» — общий ориентир, а не жёсткая формула: смотрите на реальное потребление после недели работы и корректируйте. Локацию сервера выбирайте по источнику данных — если логи льются с серверов в России, RU-площадка даст меньшую задержку; для зарубежной аудитории разумнее US или UK. У MAATRIX доступны все три локации, оплата принимается картой из России, через СБП или криптовалютой.

Обновите систему и подготовьте пару параметров ядра, которые Elasticsearch-совместимые движки требуют для работы:

apt update && apt upgrade -y
apt install -y curl gnupg apt-transport-https ca-certificates

OpenSearch, как и Elasticsearch, использует mmap для индексов и на старте проверяет лимит vm.max_map_count — без увеличения сервис откажется запускаться:

sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" >> /etc/sysctl.conf

Swap лучше отключить или свести к минимуму — своп под JVM-heap работает плохо и может привести к долгим паузам сборщика мусора. Общий подход к настройке swap на VPS разобран в статье про swap на Ubuntu 24.04, для OpenSearch правило проще — если памяти хватает под heap с запасом, своп можно выключить совсем:

swapoff -a

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка OpenSearch из APT-репозитория

Официальный путь — подключить APT-репозиторий проекта, а не собирать deb-пакет руками. Сначала добавьте GPG-ключ:

curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | \
  gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring

Подключите репозиторий ветки 2.x (конкретную минорную версию репозиторий подставит сам — на конец августа 2026 актуальна линейка 2.x, но перед установкой стоит свериться с официальной документацией на случай выхода новой мажорной ветки):

echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] \
https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" \
  | tee /etc/apt/sources.list.d/opensearch-2.x.list

apt update
apt list -a opensearch

Последняя команда покажет доступные версии пакета — полезно свериться, если нужна конкретная минорная версия для совместимости с другими узлами кластера.

Начиная с версии 2.12 пакет требует задать пароль администратора ещё до установки — иначе security plugin не даст сервису подняться с дефолтными демо-сертификатами. Задайте переменную окружения и ставьте пакет через sudo -E, чтобы она передалась в скрипт постустановки:

export OPENSEARCH_INITIAL_ADMIN_PASSWORD='ВашСложныйПароль123!'
apt-get install -y opensearch

Пароль должен быть не короче 8 символов и содержать заглавные, строчные буквы, цифру и спецсимвол — иначе установка завершится ошибкой валидации. Работаете не под root — не забудьте флаг -E (sudo -E apt-get install opensearch), иначе переменная не долетит до постинсталляционного скрипта.

Настройка opensearch.yml и памяти JVM

Основной конфиг лежит в /etc/opensearch/opensearch.yml. Для одиночного сервера (single-node) минимальные правки такие:

cluster.name: opensearch-cluster
node.name: node-1
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
network.host: 127.0.0.1
discovery.type: single-node

network.host: 127.0.0.1 намеренно ограничивает доступ локальным интерфейсом — наружу сервис будет отдаваться через реверс-прокси, а не напрямую. discovery.type: single-node отключает механику выбора кластерного мастера — она не нужна, пока у вас один узел; для кластера из нескольких серверов этот параметр убирается и добавляется cluster.initial_cluster_manager_nodes со списком узлов.

Heap настраивается отдельным файлом, чтобы не трогать основной jvm.options при обновлениях:

mkdir -p /etc/opensearch/jvm.options.d
nano /etc/opensearch/jvm.options.d/heap.options

Содержимое — конкретные значения подставьте по таблице выше, для сервера с 8 ГБ RAM это будет:

-Xms4g
-Xmx4g

Xms и Xmx всегда должны совпадать — иначе JVM будет менять размер heap на лету, а это лишние паузы под нагрузкой. Запустите сервис и включите автозапуск:

systemctl daemon-reload
systemctl enable --now opensearch
systemctl status opensearch

Первый старт занимает от нескольких секунд до пары минут — движок инициализирует индексы security plugin и генерирует служебные сертификаты. Если статус не переходит в active (running), смотрите journalctl -u opensearch -f.

Firewall и доступ по HTTPS

Порт 9200 (REST API) наружу открывать не стоит — весь внешний доступ должен идти через реверс-прокси с TLS-терминацией и, желательно, дополнительной аутентификацией на уровне прокси. Базовая настройка UFW разобрана в статье про фаервол UFW на Ubuntu 24.04 — для OpenSearch правило простое: 9200 и 9600 (порт Performance Analyzer) не открываются вообще, доступ к ним только с localhost.

Если внешним потребителям (например, приложению на другом сервере) действительно нужен прямой доступ к REST API, разумнее поднять его через nginx с SSL, чем открывать 9200 напрямую в интернет:

server {
    listen 443 ssl;
    server_name search.example.com;

    location / {
        proxy_pass https://127.0.0.1:9200;
        proxy_ssl_verify off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Как поставить nginx как реверс-прокси и получить сертификат Let's Encrypt, разобрано в статье про nginx как реверс-прокси на Ubuntu 24.04 — тот же подход применяется здесь, меняется только proxy_pass на внутренний адрес OpenSearch. proxy_ssl_verify off нужен, потому что по умолчанию OpenSearch использует самоподписанный сертификат для внутреннего TLS между nginx и движком — это нормально, раз внешний трафик уже закрыт валидным сертификатом на уровне nginx.

OpenSearch Dashboards: установка и первые запросы

Dashboards — форк Kibana, веб-интерфейс для визуализации и работы с индексами. Ставится тем же способом, отдельным пакетом из своего репозитория:

echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] \
https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.x/apt stable main" \
  | tee /etc/apt/sources.list.d/opensearch-dashboards-2.x.list

apt update
apt-get install -y opensearch-dashboards

Настройте подключение к OpenSearch в /etc/opensearch-dashboards/opensearch_dashboards.yml:

server.host: "localhost"
server.port: 5601
opensearch.hosts: ["https://localhost:9200"]
opensearch.ssl.verificationMode: none
opensearch.username: "kibanaserver"
opensearch.password: "пароль_kibanaserver"

Учётная запись kibanaserver создаётся security plugin автоматически, но с дефолтным паролем — его нужно сменить через API, а не оставлять как есть в продакшене. Запустите сервис:

systemctl daemon-reload
systemctl enable --now opensearch-dashboards

Dashboards слушает на 5601 только локально — доступ наружу даётся тем же nginx с SSL, отдельным виртуальным хостом или отдельным location в том же конфиге, что и для REST API.

Проверить, что кластер живой, можно прямым запросом к API (используйте admin-пароль, заданный при установке):

curl -k -u admin:'ВашСложныйПароль123!' https://localhost:9200

Ответ с полем "tagline" : "The OpenSearch Project: https://opensearch.org/" подтверждает, что security plugin и сам движок работают. Создайте тестовый индекс и добавьте документ:

curl -k -u admin:'ВашСложныйПароль123!' -X PUT "https://localhost:9200/test-logs" \
  -H 'Content-Type: application/json' \
  -d '{"settings":{"number_of_shards":1,"number_of_replicas":0}}'

curl -k -u admin:'ВашСложныйПароль123!' -X POST "https://localhost:9200/test-logs/_doc" \
  -H 'Content-Type: application/json' \
  -d '{"message":"тестовая запись","level":"info"}'

curl -k -u admin:'ВашСложныйПароль123!' "https://localhost:9200/test-logs/_search?pretty"

Если в ответе виден добавленный документ — установка рабочая, дальше остаётся подключить реальные источники логов (Logstash, Fluent Bit или Data Prepper — родной инструмент OpenSearch для приёма потоков данных) и настроить индекс-паттерны в Dashboards.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Чем OpenSearch отличается от Elasticsearch на практике?

На уровне базовых операций — индексация, поиск, DSL-запросы — разница минимальна, оба выросли из одной кодовой базы. Расхождение растёт с каждым релизом: новые фичи появляются независимо, и через пару-тройку версий это уже два похожих, но не идентичных продукта.

Можно ли отключить security plugin, чтобы не возиться с паролями?

Технически да, через plugins.security.disabled: true, но это открывает REST API без какой-либо аутентификации — допустимо разве что на изолированном тестовом стенде без сети, никогда на сервере с внешним доступом.

Сколько шардов ставить для нового индекса?

Для одиночного сервера обычно достаточно 1 шарда и 0-1 реплики — избыточное шардирование на маленьком кластере только добавляет накладных расходов. Один шард комфортно держит до нескольких десятков гигабайт данных, дальше стоит пересматривать схему.

Совместим ли OpenSearch с инструментами экосистемы Elastic — Logstash, Beats?

Да, благодаря общему происхождению Logstash, Filebeat и Fluent Bit пишут в OpenSearch через тот же HTTP/Bulk API. У OpenSearch есть и свой Data Prepper, но переезжать на него не обязательно, если уже работает связка с Logstash.

Как обновить OpenSearch до новой минорной версии?

Через apt update && apt upgrade opensearch opensearch-dashboards, с остановкой сервиса и резервной копией path.data перед обновлением. Перед мажорным обновлением сверьтесь с release notes — формат хранения между мажорными версиями иногда меняется.

Что делать, если не хочется ставить нативный пакет?

Есть вариант через Docker Compose — он разобран в статье про установку OpenSearch на VPS, подойдёт при уже контейнеризированной инфраструктуре.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →