2016-12-02 68 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

相關問題