Показаны различия между двумя версиями страницы.
| — |
отправка_логов_через_filebeat [2025/09/13 21:35] (текущий) kirill создано |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | # Доставка логов в OpenSearch через Filebeat (Rocky Linux 8) | ||
| + | Ниже — практическая инструкция по установке и настройке **Filebeat** на удалённом хосте для отправки логов в ваш кластер OpenSearch (из нашей переписки: | ||
| + | |||
| + | > Все команды выполняются от `root` (или добавляйте `sudo`). | ||
| + | > Цель: получить индексы вида `filebeat-YYYY.MM.DD` и видеть их в **OpenSearch Dashboards → Discover**. | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 1) Подготовка на стороне OpenSearch (роли/ | ||
| + | |||
| + | Создайте **отдельную роль** с правами записи только в индексы `filebeat-*`, | ||
| + | ```bash | ||
| + | # Роль c доступом CRUD и созданием индексов | ||
| + | curl -k -u admin:'< | ||
| + | " | ||
| + | -H ' | ||
| + | " | ||
| + | { " | ||
| + | ] | ||
| + | }' | ||
| + | |||
| + | # Пользователь | ||
| + | curl -k -u admin:'< | ||
| + | " | ||
| + | -H ' | ||
| + | " | ||
| + | " | ||
| + | }' | ||
| + | |||
| + | # Привязка роли к пользователю | ||
| + | curl -k -u admin:'< | ||
| + | " | ||
| + | -H ' | ||
| + | " | ||
| + | }' | ||
| + | ``` | ||
| + | |||
| + | > На тестовом стенде можно использовать `admin`, но для прод-среды **обязательно** отдельного пользователя с минимально необходимыми правами. | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 2) Установка Filebeat (Rocky/Alma 8) | ||
| + | |||
| + | Подключите репозиторий Elastic и установите пакет `filebeat`: | ||
| + | ```bash | ||
| + | rpm --import https:// | ||
| + | cat >/ | ||
| + | [elastic-8.x] | ||
| + | name=Elastic 8.x | ||
| + | baseurl=https:// | ||
| + | gpgcheck=1 | ||
| + | gpgkey=https:// | ||
| + | enabled=1 | ||
| + | autorefresh=1 | ||
| + | type=rpm-md | ||
| + | REPO | ||
| + | |||
| + | dnf clean all | ||
| + | dnf -y install filebeat | ||
| + | ``` | ||
| + | |||
| + | > Filebeat работает с OpenSearch через стандартный `output.elasticsearch` — просто указываем URL вашего OpenSearch, логин/ | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 3) Базовая конфигурация Filebeat | ||
| + | |||
| + | **Важное правило: | ||
| + | |||
| + | Откройте `/ | ||
| + | |||
| + | ### 3.1 Вариант A — читать системные логи через _system module_ (RHEL-пути) | ||
| + | |||
| + | ```yaml | ||
| + | filebeat.modules: | ||
| + | - module: system | ||
| + | syslog: | ||
| + | enabled: true | ||
| + | var.paths: | ||
| + | - / | ||
| + | auth: | ||
| + | enabled: true | ||
| + | var.paths: | ||
| + | - / | ||
| + | |||
| + | # Общие процессоры (по желанию) | ||
| + | processors: | ||
| + | - add_host_metadata: | ||
| + | - add_cloud_metadata: | ||
| + | |||
| + | # Выключаем ILM/ | ||
| + | setup.ilm.enabled: | ||
| + | setup.template.enabled: | ||
| + | setup.dashboards.enabled: | ||
| + | |||
| + | # Пишем напрямую в OpenSearch | ||
| + | output.elasticsearch: | ||
| + | hosts: [" | ||
| + | username: " | ||
| + | password: "< | ||
| + | protocol: " | ||
| + | # Для самоподписанных сертификатов используйте или CA, или отключите проверку на тесте: | ||
| + | ssl.verification_mode: | ||
| + | # Создаём суточные индексы | ||
| + | index: " | ||
| + | ``` | ||
| + | |||
| + | ### 3.2 Вариант B — читать логи systemd через input `journald` | ||
| + | |||
| + | ```yaml | ||
| + | filebeat.inputs: | ||
| + | - type: journald | ||
| + | id: journald-system | ||
| + | seek: cursor | ||
| + | include_matches: | ||
| + | # Примеры фильтрации: | ||
| + | # unit: sshd.service | ||
| + | # syslog_identifier: | ||
| + | |||
| + | processors: | ||
| + | - add_host_metadata: | ||
| + | - add_cloud_metadata: | ||
| + | |||
| + | setup.ilm.enabled: | ||
| + | setup.template.enabled: | ||
| + | setup.dashboards.enabled: | ||
| + | |||
| + | output.elasticsearch: | ||
| + | hosts: [" | ||
| + | username: " | ||
| + | password: "< | ||
| + | protocol: " | ||
| + | ssl.verification_mode: | ||
| + | index: " | ||
| + | ``` | ||
| + | |||
| + | > Выбирайте один из вариантов (A **или** B). Модуль `system` парсит стандартные файлы RHEL (`/ | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 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:'< | ||
| + | " | ||
| + | ``` | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 5) Настройка Data View в OpenSearch Dashboards | ||
| + | |||
| + | 1. **Dashboards → Management → Data Views (Index Patterns)**. | ||
| + | 2. Создайте Data View с шаблоном: | ||
| + | 3. Поле времени: | ||
| + | 4. Откройте **Discover** — логи должны быть видны. | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 6) Полезные расширения | ||
| + | |||
| + | - **Кастомные пути** для модулей: | ||
| + | - **Метки окружения/ | ||
| + | ```yaml | ||
| + | processors: | ||
| + | - add_fields: | ||
| + | target: labels | ||
| + | fields: | ||
| + | env: " | ||
| + | role: " | ||
| + | ``` | ||
| + | - **Разделение индексов по типам** (пример — разные индексы для auth/ | ||
| + | ```yaml | ||
| + | output.elasticsearch: | ||
| + | hosts: [" | ||
| + | username: " | ||
| + | password: "< | ||
| + | protocol: " | ||
| + | ssl.verification_mode: | ||
| + | indices: | ||
| + | - index: " | ||
| + | when.contains: | ||
| + | event.dataset: | ||
| + | - index: " | ||
| + | when.contains: | ||
| + | event.dataset: | ||
| + | - index: " | ||
| + | ``` | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 7) Частые проблемы и решения | ||
| + | |||
| + | ### 7.1 `x509: certificate signed by unknown authority` | ||
| + | - Либо укажите путь к вашему CA: | ||
| + | ```yaml | ||
| + | output.elasticsearch.ssl.certificate_authorities: | ||
| + | ssl.verification_mode: | ||
| + | ``` | ||
| + | - Либо **временно** отключите проверку: | ||
| + | |||
| + | ### 7.2 Ошибки ILM / шаблонов / setup | ||
| + | - Не запускайте `filebeat setup` против OpenSearch; оставьте `setup.*: false` в конфиге. | ||
| + | - Мы создаём индексы по `index: " | ||
| + | |||
| + | ### 7.3 `403 forbidden` или `action unauthorized` | ||
| + | - Убедитесь, | ||
| + | - Проверьте правильность логина/ | ||
| + | |||
| + | ### 7.4 Индекс остаётся `yellow` на одном узле | ||
| + | - Установите реплики по умолчанию в `0` для шаблона `filebeat-*` (или для всех дата-индейсов на стенде): | ||
| + | ```bash | ||
| + | curl -k -u admin:'< | ||
| + | -H ' | ||
| + | " | ||
| + | " | ||
| + | }' | ||
| + | ``` | ||
| + | |||
| + | ### 7.5 Пропуски в логах при journald input | ||
| + | - Поставьте `seek: cursor` (как в примере) и не меняйте `STATE`-файл Filebeat. | ||
| + | - Убедитесь, | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 8) Что дальше (к прод-среде) | ||
| + | |||
| + | - Валидные TLS-сертификаты, | ||
| + | - Тонкая настройка ролей/ | ||
| + | - Политики жизненного цикла — в OpenSearch это Index State Management (ISM), а не ILM из Elasticsearch. | ||
| + | - Мониторинг дисков (watermark), | ||
| + | |||
| + | --- | ||
| + | |||
| + | **Готово.** Теперь Filebeat шипит логи в `filebeat-*`, | ||