Все команды ниже выполняются от `root` (или с `sudo`).
—
Обновите пакеты и задайте системный лимит VMA для OpenSearch:
dnf -y update # Без этого OpenSearch может не пройти bootstrap-checks echo "vm.max_map_count=262144" > /etc/sysctl.d/99-opensearch.conf sysctl --system
Откройте порты в firewalld:
# API OpenSearch firewall-cmd --add-port=9200/tcp --permanent # Web-интерфейс Dashboards firewall-cmd --add-port=5601/tcp --permanent firewall-cmd --reload
Что такое vm.max_map_count
? — лимит на число областей виртуальной памяти для одного процесса (VMA). Lucene/OpenSearch используют много mmap()
, поэтому значение должно быть ≥ 262144
.
Подключите официальный репозиторий и установите пакет:
curl -SL https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/opensearch-3.x.repo \ -o /etc/yum.repos.d/opensearch-3.x.repo dnf clean all dnf -y install opensearch
Базовая конфигурация /etc/opensearch/opensearch.yml
для одного узла:
cluster.name: os-cluster node.name: node-1 path.data: /var/lib/opensearch path.logs: /var/log/opensearch network.host: 0.0.0.0 discovery.type: single-node
(Опционально) Настройте heap: создайте `/etc/opensearch/jvm.options.d/heap.options` с:``` - Xms2g-Xmx2g```Выберите значение по памяти сервера (обычно ~½ RAM, но не более 32 ГБ на JVM).
### 1.1 Безопасность и пароль администратора
Для OpenSearch ≥ 2.12/3.x требуется инициализация плагина безопасности. В лабораторной среде проще включить demo-конфигурацию (самоподписанные TLS-сертификаты, пользователи/роли):
export OPENSEARCH_INITIAL_ADMIN_PASSWORD='S0lid-Admin-Password!' bash /usr/share/opensearch/plugins/opensearch-security/tools/install_demo_configuration.sh -y
Альтернатива — задать пароль через override systemd, без demo-конфига:
# создаст drop-in файл /etc/systemd/system/opensearch.service.d/override.conf systemctl edit opensearch # вставьте в открывшийся файл: # [Service] # Environment="OPENSEARCH_INITIAL_ADMIN_PASSWORD=S0lid-Admin-Password!" # TimeoutStartSec=300s # сохраните, затем: systemctl daemon-reload
`TimeoutStartSec=300s` полезен на первом запуске: инициализация индексов безопасности может занять >90с.
### 1.2 Запуск и проверка
systemctl enable --now opensearch systemctl status opensearch --no-pager
Проверка API (самоподписанный TLS → -k
):
curl -k -u admin:'S0lid-Admin-Password!' https://127.0.0.1:9200
Подключите репозиторий и установите:
curl -SL https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.x/opensearch-dashboards-3.x.repo \ -o /etc/yum.repos.d/opensearch-dashboards-3.x.repo dnf clean all dnf -y install opensearch-dashboards
Минимальный корректный YAML /etc/opensearch-dashboards/opensearch_dashboards.yml
:
server.host: "0.0.0.0" # ВАЖНО: URL в кавычках! opensearch.hosts: - "https://localhost:9200" # Пока используем самоподписанные сертификаты opensearch.ssl.verificationMode: none # Для первичной проверки можно войти админом (из шага 1.1) opensearch.username: "admin" opensearch.password: "S0lid-Admin-Password!" # Доп. параметры безопасности (необязательно, но удобно) opensearch.requestHeadersWhitelist: - "authorization" - "securitytenant" opensearch_security.multitenancy.enabled: true opensearch_security.multitenancy.tenants.preferred: - "Private" - "Global" opensearch_security.readonly_mode.roles: - "kibana_read_only" # Dashboards по умолчанию использует http — куки без флага secure opensearch_security.cookie.secure: false
Частая ошибка: **дубли ключа** (`duplicated mapping key`) и **URL без кавычек** внутри квадратных скобок. Если видите YAMLException — проверьте дубли и кавычки.
Запуск и проверка:
systemctl enable --now opensearch-dashboards systemctl status opensearch-dashboards --no-pager
Откройте в браузере: http://<IP_сервера>:5601/
и войдите admin / S0lid-Admin-Password!
(или свой пароль).
cat >/etc/yum.repos.d/fluent-bit.repo <<'REPO' [fluent-bit] name=Fluent Bit baseurl=https://packages.fluentbit.io/rockylinux/$releasever/ gpgcheck=1 gpgkey=https://packages.fluentbit.io/fluentbit.key repo_gpgcheck=1 enabled=1 REPO dnf -y install fluent-bit
На сервере OpenSearch создайте роль и пользователя с правами только на индексы fluentbit-*
:
# Роль curl -k -u admin:'S0lid-Admin-Password!' -X PUT \ "https://<IP_OpenSearch>:9200/_plugins/_security/api/roles/fluentbit_writer" \ -H 'Content-Type: application/json' -d '{ "index_permissions": [ { "index_patterns": ["fluentbit-*"], "allowed_actions": ["crud","create_index"] } ] }' # Пользователь curl -k -u admin:'S0lid-Admin-Password!' -X PUT \ "https://<IP_OpenSearch>:9200/_plugins/_security/api/user/fluentbit_ingest" \ -H 'Content-Type: application/json' -d '{ "password": "Str0ng-Ingest-Password!", "attributes": {} }' # Привязка роли curl -k -u admin:'S0lid-Admin-Password!' -X PUT \ "https://<IP_OpenSearch>:9200/_plugins/_security/api/rolesmapping/fluentbit_writer" \ -H 'Content-Type: application/json' -d '{ "users": ["fluentbit_ingest"] }'
Создайте/замените /etc/fluent-bit/fluent-bit.conf
строго в формате ключ<пробелы>значение
:
[SERVICE] Flush 1 Daemon Off Log_Level info [INPUT] Name systemd Tag host.* Read_From_Tail On [FILTER] Name modify Match host.* Add host ${HOSTNAME} [OUTPUT] Name opensearch Match host.* Host <IP_OpenSearch> Port 9200 HTTP_User fluentbit_ingest HTTP_Passwd Str0ng-Ingest-Password! tls On tls.verify Off Logstash_Format On Logstash_Prefix fluentbit Suppress_Type_Name On Generate_ID On
Частая ошибка парсинга: **комментарий в конце строки** или знак `=` в конфиге Fluent Bit → `invalid value for boolean property`. Комментарии пишите **на отдельной строке**, начинающейся с `#`.
Перезапустите и проверьте:
systemctl restart fluent-bit journalctl -u fluent-bit -n 100 --no-pager
Сгенерируйте тестовую запись и убедитесь в доставке:
# на отправляющем хосте: logger -t fbtest "hello from fluent-bit" # на узле OpenSearch (или удалённо): curl -k -u admin:'S0lid-Admin-Password!' \ "https://<IP_OpenSearch>:9200/fluentbit-*/_search?q=fbtest&pretty"
fluentbit-*
.@timestamp
.Для одноузловой установки можно обнулить реплики по умолчанию, чтобы уйти от `yellow`-статуса индексов:```bashcurl -k -u admin:'S0lid-Admin-Password!' -X PUT https://<IP_OpenSearch>:9200/_index_template/fluentbit \ -H 'Content-Type: application/json' -d '{ "index_patterns": ["fluentbit-*"], "template": { "settings": { "index.number_of_replicas": 0 } }}'```
—
Симптом: сервис убивается по таймауту. - Задайте пароль админа или примените demo-конфиг (см. §1.1). - Увеличьте таймаут старта через drop-in:
```ini [Service] TimeoutStartSec=300s ``` и `systemctl daemon-reload`.
- Проверьте права на каталоги:
```bash chown -R opensearch:opensearch /var/lib/opensearch /var/log/opensearch chmod 750 /var/lib/opensearch /var/log/opensearch ```
- Убедитесь, что vm.max_map_count >= 262144
.
- Проверьте, не занят ли порт 9200: ss -ltnp | grep :9200
.
- Посмотрите логи:
journalctl -u opensearch -n 300 --no-pager
и tail -n 200 /var/log/opensearch/opensearch.log
.
Симптом: падение при старте, указание на строку с opensearch.hosts
.
- Удалите дубли ключей в opensearch_dashboards.yml
.
- URL в кавычках:
```yaml opensearch.hosts: - "https://localhost:9200" ```
- Не используйте табуляции.
Симптом: ошибка в логе о невалидном значении опции (например, Logstash_Format
).
- В конфиге нет знака =
— только ключ<пробелы>значение
.
- Не ставьте комментарий в той же строке, что и значение.
- Для OpenSearch 2.x/3.x включите Suppress_Type_Name On
.
- Проверьте HTTP_User
/HTTP_Passwd
и доступность 9200/TLS.
# Состояние сервисов systemctl status opensearch --no-pager systemctl status opensearch-dashboards --no-pager systemctl status fluent-bit --no-pager # Быстрая проверка OpenSearch curl -k -u admin:'S0lid-Admin-Password!' https://127.0.0.1:9200 # Поиск тестовой записи из Fluent Bit curl -k -u admin:'S0lid-Admin-Password!' \ "https://<IP_OpenSearch>:9200/fluentbit-*/_search?q=fbtest&pretty"
yaml
opensearch.ssl.verificationMode: full
admin
.fluentbit-*
).discovery.type: single-node
, настройте кластер discovery и несколько узлов.Готово. После выполнения шагов у вас будет одноузловой OpenSearch с веб-интерфейсом и приёмом логов с удалённого хоста через Fluent Bit. В случае ошибок — ориентируйтесь на раздел §4 и логи сервисов.