Logsta sh повторяющихся событий - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть два файла конфигурации для Logsta sh: test1.conf и test2.conf.
Каждый из них имеет свой собственный поток input -> filter -> ouput.

Оба они имеют одинаковый фильтр и elasticsearch выводят запись в один и тот же индекс.

Моя проблема в том, что Logsta sh записывает повторяющиеся события в индекс ElasticSearch, независимо от того, какой вход я выбираю для тестирования (каждое событие становится двумя одинаковыми событиями вместо одного).

Как я могу это исправить?

1 Ответ

0 голосов
/ 09 апреля 2020

По умолчанию Logsta sh имеет один конвейер с именем main, который автоматически обнаруживает все файлы .conf в папке conf.d ; эта конфигурация установлена ​​в pipelines.yml file:

- pipeline.id: main
  path.config: "/etc/logstash/conf.d/*.conf"  

Если у вас есть несколько файлов .conf в одном конвейере, Logsta sh объединит их вместе вызывая выполнение всех фильтров и выходов на всех входах, поэтому в этом случае, независимо от того, какой вход получает события, он будет go проходить через два пути фильтра / вывода, вызывая дублирующую запись в ElasticSearch (идентичные события, если фильтры / выходы одинаковы для обоих файлов .conf ).


Решения

1. Переместить фильтр / вывод в отдельный файл

Если ваши фильтры / выходы одинаковы во всех файлах конфигурации, переместите фильтр / вывод в отдельный файл. Итак, теперь у вас есть два .conf файла, один для каждого входа и третий .conf файл для фильтра / вывода. С этой настройкой каждый вход будет go только через один путь обработки.

Например:

input1.conf

input {
  # input 1
} 

input2.conf

input {
  # input 2
}

filter_output.conf

filter {
  # common filter
}  

output {
  # common output
}

Вы можете проверить этот ответ для другого примера, когда следует выбрать это решение.

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


2. Разделите файлы .conf на разные конвейеры

Если вам нужно, чтобы каждый файл .conf был независимым, разбейте .conf . файлы в разные конвейеры.

Для этого просто отредактируйте файл pipelines.yml.
Например:

pipelines.yml

- pipeline.id: test1
path.config: "/etc/logstash/conf.d/test1.conf"

- pipeline.id: test2
path.config: "/etc/logstash/conf.d/test2.conf"  

Читать Подробнее о Несколько трубопроводов


3. Разделите по типам
Пометьте каждый вход различным типом и проверьте его позже на фильтрах / выходах с помощью оператора if.

Подробнее об этом можно прочитать в этом ответе .

...