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

时间:2015-09-03 11:34:59

标签: 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 [2015-08-27 18:46:16,809] ({pool-1-thread-2} RemoteInterpreter.java[init]:144) - Create remote interpreter org.apache.zeppelin.markdown.Markdown

我想使用grok解析它们但未能获得正确的字段: 1)如何解析括号内的数据? 2)日志行的最后一部分是(CMD方向cmd_data)或(cmd信息) 在示例中:

cmd=Receive or SEND
cmd_direction=<< or >>
cmd_data=RUN_PARAGRAPH or NOTE

但最后一行是CMD信息,它与同一格式不对应。

我正在尝试找到与第一个和第二个匹配而不是第三个匹配的正确规则。 最终结果应为或(cmd + cmd_data)或(cmd_info)字段 有什么帮助吗?

2 个答案:

答案 0 :(得分:9)

Logstash在配置文件中有条件,因此您可以有条件地匹配事物。

例如:

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

如果您需要帮助grok应该是什么,请尝试使用grok debugger

答案 1 :(得分:0)

我有类似的问题...

它帮助了我:

 x1 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
 x2 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
 x3 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
 x4 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
 x5 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
 x6 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
 x7 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
 x8 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
 df <- data.frame(x1,x2,x3,x4, x5,x6,x7,x8,stringsAsFactors=FALSE)

 for (i in 2:7){
   df$newvar <- ifelse(df[,i] == "B" ,1,0)
 }