Как настроить Filebeat для отправки многострочных записей в логах?

Как изменить конфигурацию Filebeat таким образом, чтобы он отправлял весь блок логов между "START ---" и "--- END" как одно событие в Logstash, учитывая текущую конфигурацию, которая приводит к отправке каждой строки как отдельного события?
  • 4 декабря 2023 г. 13:13
Ответы на вопрос 2
Чтобы настроить Filebeat для отправки многострочных записей в Logstash, нужно воспользоваться функцией многострочной обработки, которая позволяет группировать строки лога в одно событие на основе заданных паттернов.

Конфигурация зависит от версии Filebeat, но для большинства версий сделать это можно внутри файла `filebeat.yml`. Ниже я представлю пример конфигурационного блока `filebeat.inputs`, который будет правильно обрабатывать многострочные события между "START ---" и "--- END":

```yaml
filebeat.inputs:
- type: log
  paths:
    - /path/to/your/logs/*.log
  multiline.pattern: '^START\ \-\-\-'
  multiline.negate: true
  multiline.match: after
  multiline.flush_pattern: '^\-\-\-\ END'
```

Давайте разберем эту конфигурацию:

- `paths`: содержит пути к файлам логов, которые Filebeat должен собирать.
- `multiline.pattern`: содержит регулярное выражение, которое указывает на начало нового многострочного события. В этом случае мы ищем строки, которые начинаются с "START ---".
- `multiline.negate`: если установлено в `true`, событие начнется при обнаружении строки, которая не соответствует шаблону; `false`, наоборот, если строка совпадает с шаблоном.
- `multiline.match`: указывает, как должны быть объединены последующие строки после обнаружения начала события. Вариант `after` говорит, что строки должны быть добавлены к событию после шаблона `multiline.pattern`.
- `multiline.flush_pattern`: это паттерн, который указывает на окончание события, строки до этого паттерна будут считаться частью текущего многострочного события.

Обратите внимание, что в регулярных выражениях некоторые символы должны быть экранированы, как дефисы. В данном случае перед пробелами ставятся двойные обратные слеши, но это может меняться в зависимости от обрабатываемого текста (обычно одного обратного слеша достаточно для экранировки).

Если вы только конфигурируете Filebeat, не забудьте также настроить выход Logstash в `filebeat.yml`, чтобы данные были отправлены туда:

```yaml
output.logstash:
  hosts: ["your-logstash-host:5044"]
```

Убедитесь, что Logstash слушает соответствующий порт и принимает события от Filebeat. Для этого Logstash должен иметь соответствующий input-конфиг.

После изменений конфигурации не забудьте перезапустить Filebeat, чтобы изменения вступили в силу.

В дополнение к указанному выше, обратите внимание, что работа с многострочными событиями может быть сильно зависимой от специфики ваших логов и требовать точной настройки регулярных выражений и параметров Filebeat, поэтому всегда стоит тестировать вашу конфигурацию в контролируемом окружении перед применением в продакшн.
Попробуйте данный кодmultiline.type: pattern
multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after
Похожие вопросы