首先我为此道歉,我在正则表达式方面很糟糕,并尝试编写自定义模式(因为我无法在现有的 grok 模式中找到一些东西,或者我可能遗漏了一些东西)来解析 svn 日志的格式
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" }
}
}
我不确定它是否正确,但像往常一样它不起作用。非常感谢任何帮助
这是一个更简单的模式版本,可以帮助您入门:
为简单起见,我没有使用命名模式,时间戳也不是很具体,但这应该更容易修复。
需要注意的重要事项:
我建议你把你的输入和我的模式放到https://grokdebug.herokuapp.com/中——这样你就可以逐渐将它增强到你真正需要的东西。