Logstash grok匹配2种模式

Logstash grok匹配2种模式,logstash,logstash-grok,logstash-configuration,Logstash,Logstash Grok,Logstash Configuration,日志行的示例: 2017-05-04 10:37:22,972 INFO [My.Super.JAVA.CLASS] Outbound Message bla bla 2017-05-04 10:38:22,972 INFO [My.Super.JAVA.CLASS] Inbound Message bla bla 2017-05-04 10:39:22,972 INFO [My.Super.JAVA.CLASS] some other bla bla 我想做的是做3个图案,每种类型一个。以

日志行的示例:

2017-05-04 10:37:22,972 INFO [My.Super.JAVA.CLASS] Outbound Message bla bla
2017-05-04 10:38:22,972 INFO [My.Super.JAVA.CLASS] Inbound Message bla bla
2017-05-04 10:39:22,972 INFO [My.Super.JAVA.CLASS] some other bla bla 
我想做的是做3个图案,每种类型一个。以下是我所做的:

"message", '(?m)%{DATE_TIME:timestamp}\s*%{LOGLEVEL:level}\s*\[%{JAVACLASS:class}\]\s*Outbound Message%{GREEDYDATA:stuff}']
"message", '(?m)%{DATE_TIME:timestamp}\s*%{LOGLEVEL:level}\s*\[%{JAVACLASS:class}\]\s*Inbound Message%{GREEDYDATA:otherstuff}']
"message", '(?m)%{DATE_TIME:timestamp}\s*%{LOGLEVEL:level}\s*\[%{JAVACLASS:class}\]\s*%{GREEDYDATA:messageInfo}'
以第一条日志消息为例,它将与第一个和第三个模式匹配,这显然是因为GREEDYDATA部分。 我的问题是,如何使前两条消息只与前两种模式匹配(例如,将它们从第三种模式中排除)

更新(已解决): 我在grok中用了if。每当我匹配一个模式时,我都会向它添加一个标记'grokked',然后,我测试标记中是否有'grokked',如果没有,我会匹配第二个模式,依此类推。。。
更多详细信息:

我会使用fluentd来代替logstash。但是 回到主题:寻找你的共同点并避免它。另一个选项是添加标记:

filter {
   grok {
     add_tag => [ "foo_%{somefield}" ]
        }
       }
或:

filter {
 grok {
  match => { "message" => "%{SYSLOGBASE} %{DATA:message}" }
   overwrite => [ "message" ]
       }
     }