首页 > 解决方案 > Grok中复杂的logstash模式

问题描述

我在日志中有以下 3 行,需要通过 logstash 为 ElasticSearch 进行 grok'd。

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

我尝试了各种 grok 模式,但无法找到任何具体的模式。

根据要求编辑

在特定日志条目的上下文中,我需要 ES 中的以下内容

第一行

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 模式,请告诉我。

标签: logstashlogstash-grok

解决方案


第一行:

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

第二行:

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

第三行:

^%{TIMESTAMP_ISO8601:time}\s*%{LOGLEVEL:loglevel}.* - (?<ID>[\w]*).*Touch Points: (?<touch_points>[\d]*).*Best Match Time (?<best_match_time>[\d]*)$

有很多方法可以解析这个,这只是一种方法。我建议将我使用的字段名称调整为新的 ECS。https://www.elastic.co/guide/en/ecs/current/index.html


推荐阅读