
まず最初にお詫び申し上げます。私は正規表現が苦手で、次の形式の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/-- そうすれば、本当に必要なものまで徐々に強化することができます。