web-dev-qa-db-ja.com

日付形式YYYY / MM / DD HH:mm:ssの既存のgrok {}パターンはありますか?

私のサーバーでnginxエラーログを確認していたところ、次のような形式の日付で始まっていることがわかりました。

2015/08/30 05:55:20

つまり、YYYY/MM/DD HH:mm:ss。私はこれを迅速に解析するのに役立つかもしれない既存のグロク日付パターンを見つけようとしましたが、残念ながらそのような日付形式を見つけることができませんでした。最終的に、パターンを次のように記述する必要がありました。

%{YEAR}/%{MONTHNUM}/%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? 

同じものの短いパターンがあるかどうか私はまだ望んでいますか?

8
Mandeep Singh

いいえ。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オプションを使用します。

7
dtrv

3つの要素で構成される成功したタイムスタンプキャプチャ戦略

  1. 元のログの精度とタイムゾーン。 nginxタイムスタンプログ形式を変更します。

使用する $msecミリ秒をキャプチャします。そうしないと、正確に並べ替えることができません。

log_format custom '[$msec] [$remote_addr] [$remote_user] '
                  '"$request" $status '
                  '"$http_referer" "$http_user_agent"';
  1. 生のタイムスタンプ。貪欲マッチングを使用して、生データをフィールドに取り込みます。

GREEDYDATAを使用します。

grok {
  match => { "message" => "\[%{GREEDYDATA:raw_timestamp}\] %{GREEDYDATA:message}" }
  overwrite => [ "message" ]
}
  1. 解析されたタイムスタンプ。 dateフィルターを使用して生のタイムスタンプを解析します。

参照

date {
  match => [ "timestamp", "yyyy/MM/dd HH:mm:ss.S z" ]
  target => "@timestamp"
}
5
Vanuan

2015/08/30 05:55:20に一致させるには、次を使用します。

%{DATESTAMP:mytimestamp}

Logstash 6.5でテスト済み

ソース: https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

2
Thiago Falcao

また、単純で短い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

1
Philip