我设法通过将sincedb_path
指向NUL
(Windows环境)并在开头设置start_position
来强制Logstash重新加载整个文件。这是我的file input
配置:
input {
file {
path => "myfile.csv"
start_position => beginning
ignore_older => 0
type => "my_document_type"
sincedb_path => "NUL"
stat_interval => 1
}
}
每次重新启动Logstash并且每次修改文件时都会重新加载该文件,但我希望每次重新加载该文件,如stat_interval
中所述。
即使没有修改也没有重新启动logstash,我也需要重新加载它,因为我在过滤器中添加了一个基于日期的字段,我每天都需要相同的数据并使用更新的date_field
:
filter {
csv {
columns => ["MyFirstColumn", "MySecondColumn"]
separator => ";"
add_field => {
"date_field" => "%{+ddMMyyy}"
}
}
}
以下是预期行为的示例:
文件内容:
Column A;Column B
Value X;Value Y
发送到弹性搜索索引的数据:
Column A : Value X, Column B : Value Y, date_field : 05122016
第二天,即使没有修改文件,我也希望将以下数据添加到Elasticsearch中的相同索引中:
Column A : Value X, Column B : Value Y, date_field : 06122016
答案 0 :(得分:0)
我最后使用exec
输入而不是file
并启动cat
命令每2秒读取一次文件。 cat命令检索整个文件内容,因此我使用第一个split
过滤器分别检索每一行,然后使用csv
过滤器分隔列。这是我的配置文件内容:
input {
exec {
command => "cat myfile.csv"
interval => 2
add_field => {
"tag" => "mytag"
}
}
}
filter {
if [tag] == "mytag" {
split {
terminator => "\n"
}
csv {
columns => ["myFirstColumn", "mySecondColumn", "mythirdColumn"]
separator => ";"
}
}
output {
if [tag] == "mytag" {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "myIndex"
}
}
}
原始答案可在elastic discuss platform
中找到