logstashでログを取り込もうとしていて、以下のような日付フォーマットのものが date{match=>}できずに困っています。
Mon Dec 17 12:23:34 JST 2018
これを "datetime"=>"Mon Dec 17 12:23:34 JST 2018"
のように取り込んだのですが、 date{match}でマッチングさせる方法がわからないです。
"JST"表記は ZやZZZ に該当しないので、date{ match => ["datetime" , "EEE MMM d ZZZ h:m:s yyyy"] }
はできない
JSTの文字さえ抜ければ、date{ match => ["datetime" , "EEE MMM d h:m:s yyyy"] }
でいけそう
別のフィールドに「STを抜いた文字列」として格納して、それをmatchさせたほうが良いのでしょうか。
tsgkdt
(tsgkdt)
December 25, 2018, 4:35am
2
こんにちわ
こんな形でできるかと思います。
(頂いたmatchの中身とは少し変えてます h -> HHとか)
match => [ "logdate", "EEE MMM dd HH:mm:ss 'JST' yyyy"]
文字列の中には、JSTしか入らないという決め打ちの前提が許されるのであればですが・・・
Logstashのマニュアルからリンクされている Joda-Time – Java date and time API - Formatting で、
' escape for text delimiter
と書いてある部分を参考にして、 'JST'と文字列を入れることにしています。
今回試したlogstashの設定ファイルです。
logdateで示された形式の文字列をいれ、logdate_2に変換して入れています。
input {
stdin {
# テスト用の文字列
add_field => { "logdate" => "Mon Dec 17 12:23:34 JST 2018" }
}
}
filter {
date {
# 文字列 -> date
match => [ "logdate", "EEE MMM dd HH:mm:ss 'JST' yyyy"]
target => "logdate_2"
}
}
output {
stdout { codec => rubydebug }
}
stdoutのデバッグで、logdate_2の方は、 ” ” で囲まれていない(=文字列になっていない) ことが分かります。
文字列ではなく日付の型になっていることが確認できました。
ありがとうございます!
'
で除外できるのですね。テストまでして頂き、ありがとうございます。
あと、hh -> HH等、一部ミスしていたものも指摘頂き、すみません。
system
(system)
Closed
January 22, 2019, 6:13am
4
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.