新手弹性搜索 - 使用新的5.5安装。我有一个日志行看起来像这样:[2015/10/01@19:48:22.785-0400] P-4780 T-2208 I DBUTIL :(451) prostrct create session begin for timk519 on CON:.
我有以下正则表达式:
当我在Kibana Grok调试器中尝试它时,它不起作用,并出现以下错误:
GrokDebugger: [parse_exception] [pattern_definitions] property isn't a map, but of type [java.lang.String], with { header={ processor_type="grok" & property_name="pattern_definitions" } }
这似乎是由于该行开头的 \[ 导致的。如果我将前导的 \[ 替换为句点“.”,则会得到以下结果。
我已经在我的grok语句中实现了它,如下所示:
然后我使用日期过滤器将dbdatetime转换为@timestamp设置,现在正则表达式匹配传入的日志流,这正是我想要的。谢谢!
我有以下正则表达式:
\[%{DATE:date}@%{TIME:time}-(?<gmtoffset>\d{4})\]\s*(?<procid>P-[0-9]+)\s*(?<threadid>T-[0-9]+)\s*(?<msgtype>[ifIF])\s*(?<processtype>[a-zA-Z]+)\s*(?<usernumber>[0-9]+|[:])\s*\((?<msgnum>[0-9]+|[\-]+)\)\s*%{GREEDYDATA:message}
当我在Kibana Grok调试器中尝试它时,它不起作用,并出现以下错误:
GrokDebugger: [parse_exception] [pattern_definitions] property isn't a map, but of type [java.lang.String], with { header={ processor_type="grok" & property_name="pattern_definitions" } }
这似乎是由于该行开头的 \[ 导致的。如果我将前导的 \[ 替换为句点“.”,则会得到以下结果。
.%{DATE:date}@%{TIME:time}-(?<gmtoffset>\d{4})\]\s*(?<procid>P-[0-9]+)\s*(?<threadid>T-[0-9]+)\s*(?<msgtype>[ifIF])\s*(?<processtype>[a-zA-Z]+)\s*(?<usernumber>[0-9]+|[:])\s*\((?<msgnum>[0-9]+|[\-]+)\)\s*%{GREEDYDATA:message}
调试工具grok debugger和https://grokdebug.herokuapp.com/都适用于这个模式。
当我将这个正则表达式放入logstash中时,它无法识别行中的msgnum (451)部分,因为在msgnum字段周围有转义的圆括号\( 和 \),结果无法将该行识别为合法字符串。
我是否转义了某些内容?这是一个bug吗?
更新于2017-07-21
我通过将(和)放入[(]和[)]中来解决了转义问题。我还没有想出解决匹配前导[的方法。
更新于2017-07-24
下面的答案非常好,我已经用它创建了以下自定义模式:
DBTIME %{TIME}[-+]\d{4}
DBTIMESTAMP %{YEAR}/%{MONTHNUM}/%{MONTHDAY}@%{DBTIME}
我已经在我的grok语句中实现了它,如下所示:
\[%{DBTIMESTAMP:dbdatetime}\]\s*%{PROCESSID:processid}\s*%{DBTHREADID:threadid}\s*%{DBMSGTYPE:msgtype}\s*%{PROCESSTYPE:processtype}?\s*%{USERNUMBER:usernumber}?\s*:\s*[(]%{MSGNUMBER:msgnumber}[)].\s*%{GREEDYDATA:eventmessage}\s*\r
然后我使用日期过滤器将dbdatetime转换为@timestamp设置,现在正则表达式匹配传入的日志流,这正是我想要的。谢谢!