2016-12-02 61 views
0

我设法通过将sincedb_path指向NUL(Windows环境)并在开始时设置start_position来强制Logstash重新加载整个文件。这里是我的file input配置:从头重新加载相同的文件,而不重新启动logstash

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

什么是文件的内容可用?它有很多或只有一行? – luk

+0

该文件包含许多行(每行中以分号分隔的值) – M3HD1

+0

如果涉及到文件,如果要添加新行,它应该起作用并触发Logstash读取新行。在你的情况下,你正在更新**现有**线?如果根据我的知识,Logstash必须重新启动。如果添加新行 - 似乎更自然 - 不需要重新启动Logstash或设置'sincedb_path' – luk

回答

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

相关问题