Ниже — практическая инструкция по установке и настройке 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.