2016-10-14 9 views
0

私はlogstashを使ってfilebeatからelasticsearchにデータをプッシュしています。私のデータの時間はhh:mm:ss a(05:21:34 AM)です。今日の日付を追加したいと思います。 これはlogstash設定のフィルタ私は2016-10-14T05:21:34.000Zにそれを変更するにはどうすればよい2016-01-01T05:21:34.000Z として変換logstash time to date時刻:

filter{ 
    grok{ some grok pattern to get time} 
    date { 
     locale => "en" 
     match => ["time", "hh:mm:ss a"] 
     target => "@timestamp" 
    } 
} 

しかし、データのですか?

答えて

1

私はlogstashが今年(あなたが見ているように)使うのに十分スマートだと思っていますが、他のフィールドはデフォルトではありません。

必要な完全な日時文字列で新しいフィールドを作成する必要があります。このような何かはあなたのGROKと日付の間で動作するはずです:

grok { } 
mutate { 
    add_field => { "datetime" => "%{+YYYY.MM.dd} %{time}" } 
} 
date { } 

はあなたの日付の新しい日時フィールドを使用するには、{}のパターンとその形式を変更してください。 date {}が呼び出された後にdatetimeフィールドを必要としない場合は、代わりにメタデータフィールドを使用するか、date {}の一部としてremove_fieldを使用できます。

+0

'add_field => {" datetime "=>"%{+ YYYY.MM.dd}%{time} "}'この文をgrokとmutateに追加する違いは何ですか? – warrior107

+1

add_field(およびremove_field)は、基になるフィルタが成功したときに機能します。あなたのケースでは、grok {}に追加することができます。grokが動作した場合にのみ、新しい[datetime]フィールドが作成されます。しかし、突然変異は非常にgrokで作成された[時間]フィールドを使用しているので、私は神経質になります(さまざまなフィルタによって変数が作成されるタイミングで噛まれてしまいました)。また、別のブロックではより明示的です。 –