2017-03-14 10 views
0

私はシンプルlogstashのGROKフィルターを持っている:logstash grok TIMESTAMP_ISO8601タイプ?

filter { 
    grok { 
    match => { "message" => "^%{TIMESTAMP_ISO8601:timestamp} %{NOTSPACE:name} %{WORD:level} %{SPACE} %{GREEDYDATA:message}$" } 
    overwrite => [ "message" ] 
    } 
} 

これは動作しますが、それは私のログを解析しますが、Kibanaによると、タイムスタンプの値は、データ型stringで出力されます。

logstash @timestampフィールドのデータ型はdateです。

GROKのドキュメントでは、サポートされているデータ型変換を指定するが、唯一のint型とフロートすることができます書かれています:

あなたはセマンティックのデータ型を変換したい場合は、例えば整数に 文字列を変更後、ターゲットデータ型を接尾辞として使用します。 の場合、num意味を 文字列から整数に変換する%{NUMBER:num:int}の例です。現時点でサポートされている唯一の変換は、 とfloatです。

これは、インデックスがdatetime値をサポートしている場合、私はそれを文字列として残すはずですが、どうしてdatetimeとして適切に格納されソート可能でないのでしょうか?

答えて

1

これは可能ですが、日付に変換するには別のフィルタが必要です。

filter { 
    date { 
    match => [ "timestamp", ISO8601 ] 
    } 
} 

通常、この方法では@timestampフィールドを設定します。しかし、あなたは別のフィールドにそれを行うと、一人で@timestampを残したい場合は:あなたが探しているElasticSearchデータ型を持つことになりますtarget_timestampという名前のフィールドを提供します

filter { 
    date { 
    match => [ "timestamp", ISO8601 ] 
    target => "target_timestamp" 
    } 
} 

を。

+0

ありがとうございます! @timestampを設定して新しいフィールドを作成しないで、通常の使用法を表示できますか?それが私が望むものです。 – clay

+1

@clayこれは私の最初の例です。 'target =>" @timestamp "は暗黙的です。 – sysadmin1138

+0

素晴らしい。ありがとう! – clay

関連する問題