Grok中的一个复杂的logstash模式

Grok中的一个复杂的logstash模式,logstash,logstash-grok,Logstash,Logstash Grok,我在日志中有以下三行,需要通过日志库进行弹性搜索 2020-01-27 13:30:43,536 INFO com.test.bestmatch.streamer.function.BestMatchProcessor - Best match for ID: COi0620200110450BAD5CB723457A9B4747F1727 Total Batch Processing time: 3942 2020-01-27 13:30:43,581 INFO HTTPConnecti

我在日志中有以下三行,需要通过日志库进行弹性搜索

2020-01-27 13:30:43,536 INFO  com.test.bestmatch.streamer.function.BestMatchProcessor  - Best match for ID: COi0620200110450BAD5CB723457A9B4747F1727 Total Batch Processing time: 3942
2020-01-27 13:30:43,581 INFO  HTTPConnection                                              - COi0620200110450BAD5CB723457A9B4747F1727 | People: 51 | Addresses: 5935 | HTTP Query Time: 24
2020-01-27 13:30:43,698 INFO  bestRoute                                                    - COi0620200110450BAD5CB723457A9B4747F1727 | Touch Points: 117 | Best Match Time 3943
我尝试了各种各样的格洛克模式,但没有找到任何具体的模式

按要求编辑 在特定日志条目的上下文中,我需要以下内容

一线

ID: COi0620200110450BAD5CB723457A9B4747F1727 
Total Batch Processing time: 3942 
二线

ID: COi0620200110450BAD5CB723457A9B4747F1727 
People: 51 
Addresses: 5935 
HTTP Query Time: 24
第三线

Touch Points 117 
Best Match Time: 3943.
输出来自Flink日志。如果有flink图案,请告诉我

第1行:

^%{TIMESTAMP_ISO8601:time}\s*%{LOGLEVEL:loglevel}.*ID: (?<ID>[\w\d]*).*time: (?<total_time>[\d]*)$
^%{TIMESTAMP\u ISO8601:time}\s*%{LOGLEVEL:LOGLEVEL}.*ID:(?[\w\d]*)time:(?[\d]*)$
第二行:

^%{TIMESTAMP_ISO8601:time}\s*%{LOGLEVEL:loglevel}.* - (?<ID>[\w]*).*People: (?<people>[\w]*).*Addresses: (?<addresses>[\d]*).*HTTP Query Time: (?<query_time>[\d]*)$

^%{TIMESTAMP\u ISO8601:time}\s*{LOGLEVEL:LOGLEVEL}.-(?[\w]*).*人:(?[\w]*).*地址:(?

您需要什么字段?我的意思是,这可以通过许多不同的输出(字段)以非常不同的方式解析.你能提供一个你想要的最终结果的例子,这样我们就可以为你提供grok过滤器来实现这一点吗?我在我的原始postOk中添加了一个编辑。对于第一行,你能检查一下这是否符合你的需要吗?(我添加了几个字段只是因为)。如果这样做有效,我可以制作另外两个。此外,如果您愿意/需要,我可以对它们进行测试。^%{TIMESTAMP_ISO8601:time}\s*{LOGLEVEL:LOGLEVEL}.*ID:(?[\w\d]*).*时间:(?[\d]*)$谢谢你的解决方案。我想远离regex,因为我会摄入大量日志。我不知道这会对性能造成什么样的影响…但这是一个解决方案,似乎这是唯一可行的。既然这些行会重复一次又一次,我该如何应用这些行呢?你的意思是什么“我该如何应用这些…”您是否担心性能问题?因为如果您担心,这将是另一个问题的主题。或者您是在询问如何在logstash(或elasticsearch摄入管道)过滤器中实现这些过滤器?(这也是另一个问题):)我知道如何在logstash筛选器中实现它们。我想知道的是如何决定应用哪种grok模式?这些行可以在日志文件中以任何顺序出现。对于标准HTTP输出,grok模式贯穿每一行。我在这里没有自由:)。我同意性能是另一个问题我在尝试第一个l行:2020-01-27 13:30:43536 INFO com.test.bestmatch.streamer.function.BestMatchProcessor-ID的最佳匹配:COi0620200110450BAD5CB723457A9B4747F1727总批处理时间:3942模式:^%{TIMESTAMP_ISO8601:time}\s*{LOGLEVEL}.*ID:(?[\w\d]*)time:(?)?[\d]*)$确实有效。Chrome和grok调试器出现问题。我使用了其他浏览器。
^%{TIMESTAMP_ISO8601:time}\s*%{LOGLEVEL:loglevel}.* - (?<ID>[\w]*).*Touch Points: (?<touch_points>[\d]*).*Best Match Time (?<best_match_time>[\d]*)$