Инструменты пользователя

Инструменты сайта


установка_на_rocky_alma_rh8

Установка OpenSearch + OpenSearch Dashboards на Rocky Linux 8 и доставка логов с удалённого хоста (Fluent Bit)

  • Одноузловой OpenSearch (3.x) на Rocky Linux 8.
  • OpenSearch Dashboards.
  • Отправка логов со стороннего сервера через Fluent Bit.
  • Частые ошибки и их исправление (из практики выше).
Все команды ниже выполняются от `root` (или с `sudo`).

0) Подготовка ОС и сетевых портов

Обновите пакеты и задайте системный лимит VMA для OpenSearch:

snippet.bash
dnf -y update
 
# Без этого OpenSearch может не пройти bootstrap-checks
echo "vm.max_map_count=262144" > /etc/sysctl.d/99-opensearch.conf
sysctl --system

Откройте порты в firewalld:

snippet.bash
# 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.


1) Установка OpenSearch (3.x, RPM-репозиторий)

Подключите официальный репозиторий и установите пакет:

snippet.bash
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 для одного узла:

snippet.yaml
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-сертификаты, пользователи/роли):

snippet.bash
export OPENSEARCH_INITIAL_ADMIN_PASSWORD='S0lid-Admin-Password!'
bash /usr/share/opensearch/plugins/opensearch-security/tools/install_demo_configuration.sh -y

Альтернатива — задать пароль через override systemd, без demo-конфига:

snippet.bash
# создаст 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 Запуск и проверка

snippet.bash
systemctl enable --now opensearch
systemctl status opensearch --no-pager

Проверка API (самоподписанный TLS → -k):

snippet.bash
curl -k -u admin:'S0lid-Admin-Password!' https://127.0.0.1:9200

2) Установка OpenSearch Dashboards

Подключите репозиторий и установите:

snippet.bash
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:

snippet.yaml
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 — проверьте дубли и кавычки.

Запуск и проверка:

snippet.bash
systemctl enable --now opensearch-dashboards
systemctl status opensearch-dashboards --no-pager

Откройте в браузере: http://<IP_сервера>:5601/ и войдите admin / S0lid-Admin-Password! (или свой пароль).


3) Отправка логов со стороннего хоста (Fluent Bit → OpenSearch)

3.1 Установка Fluent Bit на удалённом хосте (Rocky/Alma)

snippet.bash
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

3.2 (Рекомендовано) Пользователь только для записи логов

На сервере OpenSearch создайте роль и пользователя с правами только на индексы fluentbit-*:

snippet.bash
# Роль
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"]
}'

3.3 Конфиг Fluent Bit (без inline-комментариев!)

Создайте/замените /etc/fluent-bit/fluent-bit.conf строго в формате ключ<пробелы>значение:

snippet.ini
[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`. Комментарии пишите **на отдельной строке**, начинающейся с `#`.

Перезапустите и проверьте:

snippet.bash
systemctl restart fluent-bit
journalctl -u fluent-bit -n 100 --no-pager

Сгенерируйте тестовую запись и убедитесь в доставке:

snippet.bash
# на отправляющем хосте:
logger -t fbtest "hello from fluent-bit"
 
# на узле OpenSearch (или удалённо):
curl -k -u admin:'S0lid-Admin-Password!' \
  "https://<IP_OpenSearch>:9200/fluentbit-*/_search?q=fbtest&pretty"

3.4 Настройка Data View в Dashboards

  1. Откройте Dashboards → Management → Data Views (Index Patterns).
    2. Создайте Data View с шаблоном fluentbit-*.
    3. В качестве поля времени выберите @timestamp.
    4. Откройте Discover — логи должны отображаться.
Для одноузловой установки можно обнулить реплики по умолчанию, чтобы уйти от `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 } }}'```

4) Частые проблемы и решения

4.1 OpenSearch: `start operation timed out` в systemd

Симптом: сервис убивается по таймауту. - Задайте пароль админа или примените 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.

4.2 Dashboards: `YAMLException: duplicated mapping key`

Симптом: падение при старте, указание на строку с opensearch.hosts. - Удалите дубли ключей в opensearch_dashboards.yml. - URL в кавычках:

```yaml
opensearch.hosts:
  - "https://localhost:9200"
```

- Не используйте табуляции.

4.3 Fluent Bit: `invalid value for boolean property` / падение при старте

Симптом: ошибка в логе о невалидном значении опции (например, Logstash_Format). - В конфиге нет знака = — только ключ<пробелы>значение. - Не ставьте комментарий в той же строке, что и значение. - Для OpenSearch 2.x/3.x включите Suppress_Type_Name On. - Проверьте HTTP_User/HTTP_Passwd и доступность 9200/TLS.


5) Минимальные команды проверки

snippet.bash
# Состояние сервисов
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"

6) Переход к прод-среде (кратко)

  • Замените demo-сертификаты на свои (CA/сервер/клиент), включите проверку TLS: yaml opensearch.ssl.verificationMode: full
  • Используйте отдельные роли/пользователей вместо admin.
  • Включите и настройте ISM (policy) для индексов логов (fluentbit-*).
  • Уберите discovery.type: single-node, настройте кластер discovery и несколько узлов.
  • Проверьте SELinux/контексты и ограничьте доступ к 5601/9200 сетевыми ACL/файрволом.
  • Мониторинг JVM heap, дисков (watermarks), отказоустойчивость снапшотами.

Готово. После выполнения шагов у вас будет одноузловой OpenSearch с веб-интерфейсом и приёмом логов с удалённого хоста через Fluent Bit. В случае ошибок — ориентируйтесь на раздел §4 и логи сервисов.

установка_на_rocky_alma_rh8.txt · Последнее изменение: 2025/09/13 21:31 — kirill

DokuWiki Appliance - Powered by TurnKey Linux