Обработка нескольких входов с Logstash - PullRequest
0 голосов
/ 07 декабря 2018

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

Файл 1.txt

chicago:green:big
california:orange:big

Файл 2.txt

small:denver
medium:alaska

После прочтения этих двух файлов я хочу получить следующий формат с ElasticSearch: size place

Я искал, как настроить Logstash именно таким образом, но не нашел способа сделатьэто правильно.

input {
    file {
        path => "/houses/%{filename}.txt"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        type => "%{filename}"
    }
}
filter {
    if [type] == "1.txt" {
        csv {
            separator => ":"
            columns => ["place", "color", "size"]
        }
    }
    if [type] == "2.txt" {
        csv {
            separator => ":"
            columns => ["size", "place"]
        }
    }
}
output {
    elasticsearch {
        hosts => "http://localhost:9200"
    }
    stdout {}
}

Этот файл конфигурации правильный?

1 Ответ

0 голосов
/ 08 декабря 2018

Если предположить, что 1.txt и 2.txt в /houses/, ваш input->file->path, вероятно, должен быть /houses/*.txt.

Если я помню, имя файла находится в поле path, поэтомуВаше сравнение будет:

if [path] == "1.txt" {
     ...
}

В качестве оптимизации обратите внимание, что path не может быть одновременно "1.txt" и "2.txt", поэтому вы должны использовать вместо if / else вместоif / if.

В вашем примере документы из 1.txt будут иметь три поля, а документы из 2.txt - два.Если вас не интересует поле color, вы можете удалить его с помощью mutate .

...