私のサーバーでnginxエラーログを確認していたところ、次のような形式の日付で始まっていることがわかりました。
2015/08/30 05:55:20
つまり、YYYY/MM/DD HH:mm:ss
。私はこれを迅速に解析するのに役立つかもしれない既存のグロク日付パターンを見つけようとしましたが、残念ながらそのような日付形式を見つけることができませんでした。最終的に、パターンを次のように記述する必要がありました。
%{YEAR}/%{MONTHNUM}/%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
同じものの短いパターンがあるかどうか私はまだ望んでいますか?
いいえ。githubで 含まれているパターン を見つけます。 datestamp
へのコメントはYYYY/MM/DDに合うようですが、DATE_US
およびDATE_EU
異なっています。
Grokオプション patterns_dir を使用してDATE
パターンをオーバーロードし、DATESTAMP
を使用することをお勧めします。
DATE_YMD %{YEAR}/%{MONTHNUM}/%{MONTHDAY}
DATE %{DATE_US}|%{DATE_EU}|%{DATE_YMD}
または、単にパターンをパターンファイルに追加し、grokのpatterns_dirオプションを使用します。
3つの要素で構成される成功したタイムスタンプキャプチャ戦略
使用する $msec
ミリ秒をキャプチャします。そうしないと、正確に並べ替えることができません。
log_format custom '[$msec] [$remote_addr] [$remote_user] '
'"$request" $status '
'"$http_referer" "$http_user_agent"';
GREEDYDATAを使用します。
grok {
match => { "message" => "\[%{GREEDYDATA:raw_timestamp}\] %{GREEDYDATA:message}" }
overwrite => [ "message" ]
}
date
フィルターを使用して生のタイムスタンプを解析します。date {
match => [ "timestamp", "yyyy/MM/dd HH:mm:ss.S z" ]
target => "@timestamp"
}
2015/08/30 05:55:20に一致させるには、次を使用します。
%{DATESTAMP:mytimestamp}
Logstash 6.5でテスト済み
ソース: https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
また、単純で短いjoda.timeパターンを含めることもできます。
date {
match => [ "timestamp", "yyyy/MM/dd HH:mm:ss" ]
target => "@timestamp"
}
参考リンク: https://docs.Oracle.com/javase/8/docs/api/Java/time/format/DateTimeFormatter.html