Logstash Grok パターン

Logstash Grok パターン

まず最初にお詫び申し上げます。私は正規表現が苦手で、次の形式のSVNログを解析するためにカスタムパターンを書こうとしています(既存のGrokパターンで何かを見つけることができないか、何かが足りないのかもしれません)。

r24|prashant|2015-02-26 12:38:04 -0800 (Thu, 26 Feb 2015)|33|Log: ABC-123 / Initial version||A   test/log_testing1 A   test/log_testing2 A   test/log_testing3 A   test/log_testing4 A   test/log_testing5 \n

つまり、

$REVISION:$USER ID:$DATE:$CHECKED IN MESSAGE:$FILE CHECKED IN 

そこでカスタムパターンをいくつか書きました

SVN [r0-9]
SVN_TIMESTAMP %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?  (%{DAY}, %{MONTHDAY} %{MONTH} %{YEAR})

そして、私のlogstash-confのフィルターセクションは次のようになります。

filter {
  grok {
  match => { "message" => "%{SVN:revision}|%{USERNAME:username}|%{SVN_TIMESTAMP:svntimestamp}|%{GREEDYDATA:syslog_message}||%{GREEDYDATA:syslog_message" }
}

}

正しいかどうかはわかりませんが、いつものように機能しません。どんな助けでも本当にありがたいです

答え1

以下に、始めるのに役立つかもしれないパターンのよりシンプルなバージョンを示します。

(?<SVN>[0-9]+)\|%{USERNAME:username}\|(?<SVN_TIMESTAMP>[^\|]+)\|%{GREEDYDATA:syslog_message}

簡単にするために、名前付きパターンは使用せず、タイムスタンプもまったく具体的ではありませんが、修正は簡単になるはずです。

重要な注意事項:

  • これらの式ではパイプ文字は論理和なので、エスケープする必要があります。
  • @tigranが指摘したように、SVNリビジョンの「1つ以上の」数字にはプラス記号が必要です
  • SVN_TIMESTAMP パターンは非常に複雑ですが、正しくないようです。少なくとも、一致させるには括弧をエスケープする必要があります。

私はあなたの意見と私のパターンを取り入れてhttps://grokdebug.herokuapp.com/-- そうすれば、本当に必要なものまで徐々に強化することができます。

関連情報