Ниже — практическая инструкция по установке и настройке Filebeat на удалённом хосте для отправки логов в ваш кластер OpenSearch (из нашей переписки: одноузловой OpenSearch 3.x + Dashboards).
Все команды выполняются от `root` (или добавляйте `sudo`). Цель: получить индексы вида `filebeat-YYYY.MM.DD` и видеть их в **OpenSearch Dashboards → Discover**.
—
Создайте отдельную роль с правами записи только в индексы filebeat-*, пользователя и привязку роли:
# Роль c доступом CRUD и созданием индексов curl -k -u admin:'<ADMIN_PASSWORD>' -X PUT \ "https://<IP_OpenSearch>: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:'<ADMIN_PASSWORD>' -X PUT \ "https://<IP_OpenSearch>:9200/_plugins/_security/api/user/filebeat_ingest" \ -H 'Content-Type: application/json' -d '{ "password": "<STRONG_PASSWORD>", "attributes": {} }' # Привязка роли к пользователю curl -k -u admin:'<ADMIN_PASSWORD>' -X PUT \ "https://<IP_OpenSearch>:9200/_plugins/_security/api/rolesmapping/filebeat_writer" \ -H 'Content-Type: application/json' -d '{ "users": ["filebeat_ingest"] }'
На тестовом стенде можно использовать `admin`, но для прод-среды **обязательно** отдельного пользователя с минимально необходимыми правами.
—
Подключите репозиторий Elastic и установите пакет filebeat:
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-параметры.
—
Важное правило: для OpenSearch выключаем ILM и предварительную установку шаблонов/дашбордов Filebeat. Мы будем писать в суточные индексы filebeat-YYYY.MM.DD и позволим кластеру создать их автоматически.
Откройте /etc/filebeat/filebeat.yml и приведите к минимальному варианту ниже (оставьте только нужные секции).
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://<IP_OpenSearch>:9200"] username: "filebeat_ingest" password: "<STRONG_PASSWORD>" protocol: "https" # Для самоподписанных сертификатов используйте или CA, или отключите проверку на тесте: ssl.verification_mode: none # Создаём суточные индексы index: "filebeat-%{+yyyy.MM.dd}"
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://<IP_OpenSearch>:9200"] username: "filebeat_ingest" password: "<STRONG_PASSWORD>" protocol: "https" ssl.verification_mode: none index: "filebeat-%{+yyyy.MM.dd}"
Выбирайте один из вариантов (A **или** B). Модуль `system` парсит стандартные файлы RHEL (`/var/log/messages`, `/var/log/secure`). Если вся система пишет только в `journald` и файлы не используются — берите вариант B.
—
# Проверка синтаксиса и подключения 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:
logger -t fbtest "hello from filebeat" curl -k -u admin:'<ADMIN_PASSWORD>' \ "https://<IP_OpenSearch>:9200/filebeat-*/_search?q=fbtest&pretty"
filebeat-*.@timestamp.var.paths на нужные файлы.yaml
processors:
- add_fields:
target: labels
fields:
env: "prod"
role: "web"
yaml
output.elasticsearch:
hosts: ["https://<IP_OpenSearch>:9200"]
username: "filebeat_ingest"
password: "<STRONG_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}"
- Либо укажите путь к вашему CA:
```yaml output.elasticsearch.ssl.certificate_authorities: ["/etc/pki/ca-trust/source/anchors/opensearch-ca.crt"] ssl.verification_mode: full ```
- Либо временно отключите проверку: ssl.verification_mode: none (только на тесте!).
- Не запускайте filebeat setup против OpenSearch; оставьте setup.*: false в конфиге.
- Мы создаём индексы по index: "filebeat-%{+yyyy.MM.dd}" — OpenSearch создаст их автоматически при первой записи.
- Убедитесь, что у пользователя есть роль с crud и create_index на filebeat-*.
- Проверьте правильность логина/пароля в filebeat.yml.
- Установите реплики по умолчанию в 0 для шаблона filebeat-* (или для всех дата-индейсов на стенде):
```bash
curl -k -u admin:'<ADMIN_PASSWORD>' -X PUT https://<IP_OpenSearch>:9200/_index_template/filebeat \
-H 'Content-Type: application/json' -d '{
"index_patterns": ["filebeat-*"],
"template": { "settings": { "index.number_of_replicas": 0 } }
}'
```
- Поставьте seek: cursor (как в примере) и не меняйте STATE-файл Filebeat.
- Убедитесь, что служба имеет права читать журнал: filebeat обычно запускается под root и проблем нет.
ssl.verification_mode: full.
Готово. Теперь Filebeat шипит логи в filebeat-*, и вы видите их в OpenSearch Dashboards.