Как использовать включает в logstash conf файлы? - PullRequest
0 голосов
/ 19 октября 2019

Можно ли использовать в файлах конфигурации logstash?

Пример минимального, полного и проверяемого результата

Можно ли заменить это ...

файл: beats.conf

input {
  beats {
    port => 5044
  }
}
filter {
    date {
        match => ["myTimestamp", "yyyyMMdd_HH:mm:ss.SSS"]
        target => "date_time"
    }
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}

... с этим?

файл: date.inc

date {
    match => ["myTimestamp", "yyyyMMdd_HH:mm:ss.SSS"]
    target => "date_time"
}

файл: beats.conf

input {
  beats {
    port => 5044
  }
}
filter {
    #include <date.inc>  // <- THIS THIS THIS THIS THIS
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}

1 Ответ

1 голос
/ 19 октября 2019

На самом деле поддержка «include» отсутствует, и Logstash не может загрузить конвейер, разделенный на разные файлы, для повторного использования общих частей. РЕДАКТИРОВАТЬ: Единственный способ составить конвейер из другого файла - указать папку или подстановочный знак "*" в настройке path.config, чтобы файлы конфигурации читались в алфавитном порядке (благодаря @Badger).

Если вы не хотите определять свою собственную систему составления / компиляции конвейера, вы можете взглянуть на связь «конвейер-к-конвейеру», которую можно использовать, например, чтобы разбить ваши сложные конвейеры иповторно используйте ваши фильтры в разных потоках: https://www.elastic.co/guide/en/logstash/current/pipeline-to-pipeline.html. Обратите внимание, что при таком подходе вы будете оплачивать накладные расходы при запуске нескольких конвейеров.

Например:

pipelines.yml

- pipeline.id: input
  path.config: "<path-to-file>/beats.conf"
- pipeline.id: date-filters
  # This common pipeline allow to reuse the same logic for complex filters
  path.config: "<path-to-file>/date.conf"
- pipeline.id: output
  path.config: "<path-to-file>/elasticsearch.conf"

beats.conf

input {
  beats {
    port => 5044
  }
}
output { pipeline { send_to => [commonFilters] } }

date.conf

input { pipeline { address => commonFilters } }
filter {
  date {
    match => ["myTimestamp", "yyyyMMdd_HH:mm:ss.SSS"]
    target => "date_time"
  }
}
output { pipeline { send_to => [output] } }

asticsearch.conf

input { pipeline { address => output } }
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}
...