2017-05-15 11 views
0

elasticsearch 5.xとFilebeatを使用していて、ファイルビートで日付(タイムスタンプ)を直接解析する方法があるかどうかを知りたい(logstashを使用したくない) 。私はjson.keys_under_root: trueを使用していますが、うまくいきますが、問題はタイムスタンプ(私たちの上に)が文字列として認識されていることです。他のフィールドはすべて自動的に正しいタイプとして認識されました。 enter image description hereelasticsearch 5.xとFilebeatで日付を解析する方法

どのように日付としてマップできますか?

答えて

3

FilebeatをES Ingest Node機能で使用して、timestampフィールドを解析し、値を@timestampフィールドに適用できます。

着信イベントにdateを適用する、Elasticsearchで簡単なパイプラインをセットアップします。

PUT _ingest/pipeline/my-pipeline 
{ 
    "description" : "parse timestamp and update @timestamp", 
    "processors" : [ 
    { 
     "date" : { 
     "field" : "timestamp", 
     "target_field" : "@timestamp" 
     } 
    }, 
    { 
     "remove": { 
     "field": "timestamp" 
     } 
    } 
    ], 
    "on_failure": [ 
    { 
     "set": { 
     "field": "error.message", 
     "value": "{{ _ingest.on_failure_message }}" 
     } 
    } 
    ] 
} 

次にFilebeat configureにelasticsearch出力は、あなたの新しいパイプラインにデータをプッシュします。

output.elasticsearch: 
    hosts: ["http://localhost:9200"] 
    pipeline: my-pipeline 
+0

これは非常に洗練された解決策であり、試して回答を受け入れるようです。私はfilebeatテンプレートを変更することで可能ではないのだろうか? – alphiii

+0

インデックステンプレートを変更して、 'timestamp'フィールドを[date](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html)として解釈することができます。しかし、これは '@ timestamp'フィールドを新しい値に置き換えることはありません。 '@ timestamp'を使って他のデータを持っているなら、おそらく一貫していたいと思うでしょう。 –

+0

私が経験したことは、フィールドを日付として認識するためには、ログファイル(例: '" 2017-05-17T06:07:51.658998 + 00:00 "')に適切な形式で入力するだけです。これは解析されます日付として。しかし、私はもう少しグーグルグーグルで、私の解析日時をちょうど切り詰めた解決法がないことを知りました。 – alphiii

関連する問題