web-dev-qa-db-ja.com

エポックタイムスタンプを変換するLogstash

いくつかのエポックタイムスタンプを解析して、より読みやすいものにしようとしています。

私はそれらを通常の時間に解析する方法を探しました、そして私が理解していることから私がしなければならないすべてはこのようなものです:

mutate
{
    remove_field => [ "..."]
}

grok
{
    match => { 'message' => '%{NUMBER:time}%{SPACE}%{NUMBER:time2}...' }
}

date
{
    match => [ "time","UNIX" ]
}

メッセージの例は次のとおりです。1410811884.84 1406931111.00 ....最初の2つの値はUNIX時間の値である必要があります。

すべてのフィールドが期待値とともにKibanaに表示され、削除したすべての値フィールドがそこにないため、mutateも機能するため、私のgrokは機能します。日付セクションは何もしないようです。

私が理解していることからmatch => [ "time","UNIX" ]私がやりたいことを実行する必要があります(時間の値を適切な日付形式に変更し、フィールドとしてkibanaに表示するようにします)。どうやら私はそれを理解していません。

7
Swikrit Khanal

Date {}フィルターは、@ timestampの値を提供されたデータに置き換えるため、[time]フィールドと同じ値の@timestampが表示されます。これは、ログの伝播、処理、および保存に多少の遅延があるため、通常は便利です。したがって、イベント自体の時間を使用することをお勧めします。

複数の日付フィールドがあるため、日付フィルターの「target」パラメーターを使用して、解析された日付の宛先を指定する必要があります。例:

date {
    match => [ "time","UNIX" ]
    target => "myTime"
}

これにより、[time]という名前の文字列フィールドが[myTime]という名前の日付フィールドに変換されます。 Kibanaは日付フィールドの表示方法を知っており、kibanaの設定でそれをカスタマイズできます。

同じデータの日付バージョンの文字列の両方はおそらく必要ないので、変換の一部として文字列バージョンを削除できます。

date {
    match => [ "time","UNIX" ]
    target => "myTime"
    remove_field => [ "time" ]
}
11
Alain Collins

UNIX_MSをミリ秒単位で試すことも検討してください。

date {
    timezone => "UTC"
    match => ["timestamp", "UNIX_MS"]
    target => "@timestamp"
}
6
rcf