По умолчанию 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.
Подробнее об этом можно прочитать в этом ответе .