# Доставка логов в OpenSearch через Filebeat (Rocky Linux 8) Ниже — практическая инструкция по установке и настройке **Filebeat** на удалённом хосте для отправки логов в ваш кластер OpenSearch (из нашей переписки: одноузловой OpenSearch 3.x + Dashboards). > Все команды выполняются от `root` (или добавляйте `sudo`). > Цель: получить индексы вида `filebeat-YYYY.MM.DD` и видеть их в **OpenSearch Dashboards → Discover**. --- ## 1) Подготовка на стороне OpenSearch (роли/пользователь) Создайте **отдельную роль** с правами записи только в индексы `filebeat-*`, пользователя и привязку роли: ```bash # Роль c доступом CRUD и созданием индексов curl -k -u admin:'' -X PUT \ "https://:9200/_plugins/_security/api/roles/filebeat_writer" \ -H 'Content-Type: application/json' -d '{ "index_permissions": [ { "index_patterns": ["filebeat-*"], "allowed_actions": ["crud","create_index"] } ] }' # Пользователь curl -k -u admin:'' -X PUT \ "https://:9200/_plugins/_security/api/user/filebeat_ingest" \ -H 'Content-Type: application/json' -d '{ "password": "", "attributes": {} }' # Привязка роли к пользователю curl -k -u admin:'' -X PUT \ "https://:9200/_plugins/_security/api/rolesmapping/filebeat_writer" \ -H 'Content-Type: application/json' -d '{ "users": ["filebeat_ingest"] }' ``` > На тестовом стенде можно использовать `admin`, но для прод-среды **обязательно** отдельного пользователя с минимально необходимыми правами. --- ## 2) Установка Filebeat (Rocky/Alma 8) Подключите репозиторий Elastic и установите пакет `filebeat`: ```bash rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch cat >/etc/yum.repos.d/elastic-8.x.repo <<'REPO' [elastic-8.x] name=Elastic 8.x baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md REPO dnf clean all dnf -y install filebeat ``` > Filebeat работает с OpenSearch через стандартный `output.elasticsearch` — просто указываем URL вашего OpenSearch, логин/пароль и TLS-параметры. --- ## 3) Базовая конфигурация Filebeat **Важное правило:** для OpenSearch **выключаем** ILM и предварительную установку шаблонов/дашбордов Filebeat. Мы будем писать в суточные индексы `filebeat-YYYY.MM.DD` и позволим кластеру создать их автоматически. Откройте `/etc/filebeat/filebeat.yml` и приведите к минимальному варианту ниже (оставьте только нужные секции). ### 3.1 Вариант A — читать системные логи через _system module_ (RHEL-пути) ```yaml filebeat.modules: - module: system syslog: enabled: true var.paths: - /var/log/messages auth: enabled: true var.paths: - /var/log/secure # Общие процессоры (по желанию) processors: - add_host_metadata: ~ - add_cloud_metadata: ~ # Выключаем ILM/установку шаблонов setup.ilm.enabled: false setup.template.enabled: false setup.dashboards.enabled: false # Пишем напрямую в OpenSearch output.elasticsearch: hosts: ["https://:9200"] username: "filebeat_ingest" password: "" protocol: "https" # Для самоподписанных сертификатов используйте или CA, или отключите проверку на тесте: ssl.verification_mode: none # Создаём суточные индексы index: "filebeat-%{+yyyy.MM.dd}" ``` ### 3.2 Вариант B — читать логи systemd через input `journald` ```yaml filebeat.inputs: - type: journald id: journald-system seek: cursor include_matches: [] # Примеры фильтрации: # unit: sshd.service # syslog_identifier: kernel processors: - add_host_metadata: ~ - add_cloud_metadata: ~ setup.ilm.enabled: false setup.template.enabled: false setup.dashboards.enabled: false output.elasticsearch: hosts: ["https://:9200"] username: "filebeat_ingest" password: "" protocol: "https" ssl.verification_mode: none index: "filebeat-%{+yyyy.MM.dd}" ``` > Выбирайте один из вариантов (A **или** B). Модуль `system` парсит стандартные файлы RHEL (`/var/log/messages`, `/var/log/secure`). Если вся система пишет только в `journald` и файлы не используются — берите вариант B. --- ## 4) Старт, автозапуск и проверка ```bash # Проверка синтаксиса и подключения filebeat test config -e filebeat test output -e # Включим автозапуск и запустим systemctl enable --now filebeat systemctl status filebeat --no-pager journalctl -u filebeat -n 100 --no-pager ``` Сгенерируйте тест-сообщение и проверьте индекс в OpenSearch: ```bash logger -t fbtest "hello from filebeat" curl -k -u admin:'' \ "https://:9200/filebeat-*/_search?q=fbtest&pretty" ``` --- ## 5) Настройка Data View в OpenSearch Dashboards 1. **Dashboards → Management → Data Views (Index Patterns)**. 2. Создайте Data View с шаблоном: `filebeat-*`. 3. Поле времени: `@timestamp`. 4. Откройте **Discover** — логи должны быть видны. --- ## 6) Полезные расширения - **Кастомные пути** для модулей: укажите `var.paths` на нужные файлы. - **Метки окружения/хоста**: ```yaml processors: - add_fields: target: labels fields: env: "prod" role: "web" ``` - **Разделение индексов по типам** (пример — разные индексы для auth/syslog): ```yaml output.elasticsearch: hosts: ["https://:9200"] username: "filebeat_ingest" password: "" protocol: "https" ssl.verification_mode: none indices: - index: "filebeat-auth-%{+yyyy.MM.dd}" when.contains: event.dataset: "system.auth" - index: "filebeat-syslog-%{+yyyy.MM.dd}" when.contains: event.dataset: "system.syslog" - index: "filebeat-%{+yyyy.MM.dd}" ``` --- ## 7) Частые проблемы и решения ### 7.1 `x509: certificate signed by unknown authority` - Либо укажите путь к вашему CA: ```yaml output.elasticsearch.ssl.certificate_authorities: ["/etc/pki/ca-trust/source/anchors/opensearch-ca.crt"] ssl.verification_mode: full ``` - Либо **временно** отключите проверку: `ssl.verification_mode: none` (только на тесте!). ### 7.2 Ошибки ILM / шаблонов / setup - Не запускайте `filebeat setup` против OpenSearch; оставьте `setup.*: false` в конфиге. - Мы создаём индексы по `index: "filebeat-%{+yyyy.MM.dd}"` — OpenSearch создаст их автоматически при первой записи. ### 7.3 `403 forbidden` или `action unauthorized` - Убедитесь, что у пользователя есть роль с `crud` и `create_index` на `filebeat-*`. - Проверьте правильность логина/пароля в `filebeat.yml`. ### 7.4 Индекс остаётся `yellow` на одном узле - Установите реплики по умолчанию в `0` для шаблона `filebeat-*` (или для всех дата-индейсов на стенде): ```bash curl -k -u admin:'' -X PUT https://:9200/_index_template/filebeat \ -H 'Content-Type: application/json' -d '{ "index_patterns": ["filebeat-*"], "template": { "settings": { "index.number_of_replicas": 0 } } }' ``` ### 7.5 Пропуски в логах при journald input - Поставьте `seek: cursor` (как в примере) и не меняйте `STATE`-файл Filebeat. - Убедитесь, что служба имеет права читать журнал: `filebeat` обычно запускается под `root` и проблем нет. --- ## 8) Что дальше (к прод-среде) - Валидные TLS-сертификаты, `ssl.verification_mode: full`. - Тонкая настройка ролей/метаданных и разграничение индексов. - Политики жизненного цикла — в OpenSearch это Index State Management (ISM), а не ILM из Elasticsearch. - Мониторинг дисков (watermark), heap, снэпшоты. --- **Готово.** Теперь Filebeat шипит логи в `filebeat-*`, и вы видите их в OpenSearch Dashboards.