我有两个要与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 {}
}
此配置文件正确吗?
答案 0 :(得分:0)
假设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将其删除。