目的
下記フォーマットの日付文字列を、Date型に変換したかった。
Sat Aug 10 17:15:31 JST 2019
実施内容
次のフィルターで変換を試してみたが、String型のままでDate型に変換されず...
logstash.conf
date {
match => ["SampleTimeStamp", "EEE MMM dd HH:mm:ss ZZZ yyyy"]
target => "SampleTimeStamp"
}
うーん、Date filter pluginの公式ドキュメントを読んでも、コードの書き方間違ってない気がするんだけどなぁ~。
Date filter plugin公式ドキュメント:https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html
ここで「JST」の文字列が、タイムゾーンの標準的な形式では無いのでは?と疑い始めた。
僕の直観は当たっていた!疑問通りで、Joda-Timeのタイムゾーン一覧を確認すると「JST」が存在してないじゃないか...
Joda-Time タイムゾーン一覧:http://joda-time.sourceforge.net/timezones.html
更にJoda-Timeのドキュメントを読み進めると、以下の記述を発見した。
' escape for text delimiter
なるほど、テキストとして扱ってシングルコートでエスケープしてあげれば良いのか。早速、試してみた。
logstash.conf
date {
match => ["SampleTimeStamp", "EEE MMM dd HH:mm:ss 'JST' yyyy"]
target => "SampleTimeStamp"
}
見事にString型からDate型に変換成功!!!