2016-08-22 13 views
0

Logstashの "2016-08-22T09:09:55.487Z"形式からUNIX時刻に変換することはできますか?私は反対の操作を見てきましたが、それについては何もしていません。Logstashで日付をUNIX時刻に変換する

+0

あなたはUNIX時間を依頼するときは、EXPを示している可能性があり間違った出力?数字や文字列を期待していますか? – baudsp

+0

@baudsp、私は次のような数字を期待しています:1431607046 – Anatoly

答えて

1

まず、あなたは日付フィルタで、日付オブジェクトに"2016-08-22T09:09:55.487Z"を変換する必要があります:
は この時点で

date { 
    match => ["date", "ISO8601"] 
    target => "date_object" 
} 

(フィールドdateが有効ISO8601タイムスタンプを表す文字列が含まれていることを想定します)ログスタッシュのタイムスタンプを含むフィールドdate_objectが表示されます。 このタイムスタンプは、to_iメソッドを使用して、対応するエポックに変換できます。
これを行うには、ルビーコードをフィルタとして実行できるようにするルビフィルタを使用する必要があります。

ruby {  
    code => "event['date_epoch'] = event['date_object'].to_i" 
}   

次に、date_epochというフィールドがあります。これは、UNIXの時刻を表す数字になります。

2

今日も同様の問題が発生しました。

ルビ{
コード=>「イベント[ 『date_epochを』] =イベント[ 『date_object』]:残念ながら、上記設定の平和は、整数変換時のタイムスタンプからミリ秒を失うという制限を有しています.to_i」
}

私は戻って、文字列に、その後、フロートする日付オブジェクトを変換する1000年を掛けるとを含むいくつかのオプションを試してみました。要するに、精度はまったく同じではありませんでした。

最後に、私はこれ以下のビットハックのサンプルを思いついた。これはlogstashバージョン2.4.1で動作しました。 、Rubyコードの平和は、標準的なルビーDateTime書式に文字列をキャストする

mutate{ 
add_field => ["tmpTimestamp","%{@timestamp}"] 
} 

(エポック形式に変換: だから最初に私は、プレーン文字列に解析されたタイムスタンプを変換するために、フィールドtmpTimestampを作成しますStringに当時のMSを含む)と:

ruby { code => "require 'date';event['epoch'] = DateTime.parse(event['tmpTimestamp']).strftime('%Q').to_s" } 

は、未使用のTMP変数を削除します。

mutate{ 
remove_field => ["tmpTimestamp"] 
} 
+0

一般的なRuby日付のエポックへの変換については、こちらを参照してください。 https://stackoverflow.com/a/14733261/2695332 日付入力はタイムスタンプ全体である必要はありません。 MM/DD/YYYYやMM-DD-YYYYなどの形式の日付でもかまいません。 – Vikas

関連する問題