我在同一个日志文件中有这三个日志行:
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 direction cmd_data) 或 (cmd info)
在示例中:
cmd=Receive or SEND
cmd_direction=<< or >>
cmd_data=RUN_PARAGRAPH or NOTE
但最后一行是 CMD 信息,它不对应于相同的格式。
我试图找到匹配第一条和第二条但不匹配第三条的正确规则。
最终结果应该是 or (cmd + cmd_data) or (cmd_info) 字段
有什么帮助吗?
最佳答案
Logstash 在配置文件中有条件,因此您可以有条件地匹配事物。
例如:
if ([mesage] =~ /(RECEIVE|SEND)/) {
grok {
// do your grok here
}
} else if ([message] =~ /RemoteInterpreter/) {
grok {
// do some other grok here
}
}
如果您需要有关
grok
应该是什么的帮助,请尝试使用 grok debugger关于regex - logstash grok - 如何进行条件模式匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32374511/