logstash - 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 模式,请告诉我。
解决方案
第一行:
^%{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
推荐阅读
- ios - 使用 React Native 前端和 Java Spring 后端创建推送通知系统?
- ios - Apple 帐户和地区问题
- r - 如何在R中修改如下数据框
- php - PHP 文件不接收来自 AJAX 帖子的数据
- ios - 在 Swift Messagekit 应用程序中未检测到点击事件?
- r - 为什么动画情节比静态情节小?
- c++ - std::list::splice() 和 std::forward_list::splice_after() 在 C++11 中声明为 noexcept 吗?
- jquery - 如何使自定义链接属性适用于一个元素?
- node.js - Node Js 回调/promise/return
- php - Magento 1.9 会话文件清除