Regex logstash grok-如何进行条件模式匹配?

Regex logstash grok-如何进行条件模式匹配?,regex,logstash,logstash-grok,Regex,Logstash,Logstash Grok,我在同一个日志文件中有以下三行日志: INFO [2015-08-27 18:46:14,279] ({qtp243745864-44} NotebookServer.java[onMessage]:101) - RECEIVE << RUN_PARAGRAPH INFO [2015-08-27 18:46:14,322] ({qtp243745864-44} NotebookServer.java[broadcast]:253) - SEND >> NOTE INFO

我在同一个日志文件中有以下三行日志:

INFO [2015-08-27 18:46:14,279] ({qtp243745864-44} NotebookServer.java[onMessage]:101) - RECEIVE << RUN_PARAGRAPH
INFO [2015-08-27 18:46:14,322] ({qtp243745864-44} NotebookServer.java[broadcast]:253) - SEND >> NOTE
INFO [2015-08-27 18:46:16,809] ({pool-1-thread-2} RemoteInterpreter.java[init]:144) - Create remote interpreter org.apache.zeppelin.markdown.Markdown
INFO[2015-08-27 18:46:14279]({qtp243745864-44}NotebookServer.java[onMessage]:101)-RECEIVE>NOTE
信息[2015-08-27 18:46:16809]({pool-1-thread-2}remote解释器.java[init]:144)-创建远程解释器org.apache.zeppelin.markdown.markdown
我想使用grok对其进行pars,但未能获得正确的字段: 1) 如何在括号内划分数据? 2) 日志行的最后一部分是(CMD direction CMD_data)或(CMD info) 在示例中:

cmd=Receive or SEND
cmd_direction=<< or >>
cmd_data=RUN_PARAGRAPH or NOTE
cmd=接收或发送
cmd_方向=>
cmd\u data=运行\u段落或注释
但最后一行是CMD info,它不符合相同的格式

我正试图找到一条正确的规则来匹配第一条和第二条,而不是第三条。 最终结果应为或(cmd+cmd_数据)或(cmd_信息)字段
有什么帮助吗?

Logstash在配置文件中有条件,因此您可以有条件地匹配内容

例如:

if ([mesage] =~ /(RECEIVE|SEND)/) {
   grok {
      // do your grok here
   }
} else if ([message] =~ /RemoteInterpreter/) {
   grok {
      // do some other grok here
   }
}

如果您需要这些
grok
s的帮助,请尝试使用我遇到了类似的问题

它帮助了我:

if ("SEND" in [message]) {
   grok {
      // do your grok here
   }
}

这可以在正则表达式上完成吗?e、 如果([mesage]=~/(^\S+>^\S+)您可以将正则表达式与if一起使用…但是
^
的位置是错误的--它是消息开头的锚。因此您可能需要类似
(\S+()\S+)
的东西谢谢!很快就会测试它