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

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


отправка_логов_через_filebeat

Доставка логов в OpenSearch через Filebeat (Rocky Linux 8)

Ниже — практическая инструкция по установке и настройке Filebeat на удалённом хосте для отправки логов в ваш кластер OpenSearch (из нашей переписки: одноузловой OpenSearch 3.x + Dashboards).

Все команды выполняются от `root` (или добавляйте `sudo`). Цель: получить индексы вида `filebeat-YYYY.MM.DD` и видеть их в **OpenSearch Dashboards → Discover**.

1) Подготовка на стороне OpenSearch (роли/пользователь)

Создайте отдельную роль с правами записи только в индексы filebeat-*, пользователя и привязку роли:

snippet.bash
# Роль 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`, но для прод-среды **обязательно** отдельного пользователя с минимально необходимыми правами.

2) Установка Filebeat (Rocky/Alma 8)

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

snippet.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-пути)

snippet.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://<IP_OpenSearch>:9200"]
  username: "filebeat_ingest"
  password: "<STRONG_PASSWORD>"
  protocol: "https"
  # Для самоподписанных сертификатов используйте или CA, или отключите проверку на тесте:
  ssl.verification_mode: none
  # Создаём суточные индексы
  index: "filebeat-%{+yyyy.MM.dd}"

3.2 Вариант B — читать логи systemd через input `journald`

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

4) Старт, автозапуск и проверка

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

snippet.bash
logger -t fbtest "hello from filebeat"
 
curl -k -u admin:'<ADMIN_PASSWORD>' \
  "https://<IP_OpenSearch>: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://<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}"

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:'<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 } }
}'
```

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.

отправка_логов_через_filebeat.txt · Последнее изменение: 2025/09/13 21:35 — kirill

DokuWiki Appliance - Powered by TurnKey Linux