使用Logstash处理多个输入

时间:2018-12-07 19:23:00

标签: elasticsearch logging logstash

我有两个要与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 :(得分:0)

假设1.txt2.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将其删除。