2016-12-02 58 views
0

sincedb_pathNUL(Windows環境)に設定し、最初にstart_positionに設定して、ログファイルを強制的にリロードすることができました。ここに私の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で述べたように、それは秒ごとにリロードすることにしたいたびにリロードされます。
私もそこには変更はありません、私はフィルタに日付ベースのフィールドを追加していると私が更新date_fieldで毎日同じデータを必要とするのでlogstashを再起動せずにしても再ロードする必要があります。

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

で利用できますか?それは多くの、またはただ1つのラインを持っていますか? – luk

+0

ファイルには多くの行が含まれています(各行にセミコロンで区切られた値) – M3HD1

+0

新しい行を追加する場合、ファイルになると、新しい行を読み込むためにLogstashが起動します。あなたの場合**既存の**ラインを更新していますか?もしそうなら、Logstashは私の知識に従って再起動する必要があります。新しい行を追加した場合 - より自然なこと - Logstashを再起動する必要はなく、 'sincedb_path'を設定する – luk

答えて

0

は、私は最終的に代わりfileexec入力を使用して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

関連する問題