Logstash聚合插件,任务id跨多行

Logstash聚合插件,任务id跨多行,logstash,logstash-grok,Logstash,Logstash Grok,我正在尝试根据进程id聚合事件。进程id没有顺序,跨越多行。以下是其中一个样本— 2019 Apr 23 14:01:44:870 GMT +0000 BW.EnterpriseFlifoFormatter-EnterpriseFlifoFormatter USER [BW-User] - Interface Name : EFF: Process ID :674526635 Main Process has started^M 2019 Apr 23 14:01:44:870 GMT +000

我正在尝试根据进程id聚合事件。进程id没有顺序,跨越多行。以下是其中一个样本—

2019 Apr 23 14:01:44:870 GMT +0000 BW.EnterpriseFlifoFormatter-EnterpriseFlifoFormatter USER [BW-User] - Interface Name : EFF: Process ID :674526635 Main Process has started^M
2019 Apr 23 14:01:44:870 GMT +0000 BW.EnterpriseFlifoFormatter-EnterpriseFlifoFormatter USER [BW-User] - Interface Name : EFF: Process ID :674526636 Main Process has started^M
2019 Apr 23 14:01:44:878 GMT +0000 BW.EnterpriseFlifoFormatter-EnterpriseFlifoFormatter USER [BW-User] - Interface Name : EFF: Process ID :674526636 Ending ODS query Process to create enterprise message^M
2019 Apr 23 14:01:44:882 GMT +0000 BW.EnterpriseFlifoFormatter-EnterpriseFlifoFormatter USER [BW-User] - Interface Name : EFF: Process ID :674526635 Send Message Process has finished at  :  1556028104882 for flight 1206 departing on 2019-04-24 from EWR to CLT of type Leg Level Message^M
2019 Apr 23 14:01:44:882 GMT +0000 BW.EnterpriseFlifoFormatter-EnterpriseFlifoFormatter USER [BW-User] - Interface Name : EFF: Process ID :674526635 Send Message Process has finished at  :  1556028104882 for flight 1206 departing on 2019-04-24 from EWR to CLT of type Flight Level Message^M
2019 Apr 23 14:01:44:882 GMT +0000 BW.EnterpriseFlifoFormatter-EnterpriseFlifoFormatter USER [BW-User] - Interface Name : EFF: Process ID :674526636 Send Message Process has begun at  :  1556028104882 for flight 1196 departing on 2019-04-24 from CUN to ORD of type Leg Level Message^M
2019 Apr 23 14:01:44:883 GMT +0000 BW.EnterpriseFlifoFormatter-EnterpriseFlifoFormatter USER [BW-User] - Interface Name : EFF: Process ID :674526636 Send Message Process has begun at  :  1556028104882 for flight 1196 departing on 2019-04-24 from CUN to ORD of type Flight Level Message^M
2019 Apr 23 14:01:44:882 GMT +0000 BW.EnterpriseFlifoFormatter-EnterpriseFlifoFormatter USER [BW-User] - Interface Name : EFF: Process ID :674526635 Main Process is ending for flight 1206 departing on 2019-04-24^M
2019 Apr 23 14:01:44:882 GMT +0000 BW.EnterpriseFlifoFormatter-EnterpriseFlifoFormatter USER [BW-User] - Interface Name : EFF: Process ID :674526636 Main Process is ending for flight 1206 departing on 2019-04-24^M
return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))

因此,进程id不是按顺序排列的,我们如何使用logstash聚合筛选器将属于同一进程id的所有消息关联并发送为单个事件,我建议您对此进行检查,以跟踪一对开始/结束事件,并使用其时间戳来计算它们之间的运行时间,因此根据您需要的id,它标识一个“开始”事件并等待其相关的“结束”事件。下面是一个简单的使用方法

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
调整这个插件以满足您的需要可能会很有用,因为它已经处理超时、等待基于特定字段的事件等

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
但您还需要注意以下几点:

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
  • 知道何时停止,直到何时需要累积事件
  • 在内存中潜在地积累大量事件可以吗
  • 什么时候暂停
如果你摄取了大量数据,Logstash在我看来并不适合这种需要。 考虑使用另一个工具聚合事件,可能是ApacheSpark每日作业,它使用elasticsearch作为后端聚合您的事件

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
编辑: 我很快检查了插件,我的建议基本上是将所有需要的信息添加到“统一事件”中

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
假设您需要从所有事件中获取“我的字段”的内容。 您可以更新第167行:

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
上次编辑: 这个插件应该适合你

我建议您检查这个选项,它跟踪一对开始/结束事件,并使用它们的时间戳来计算它们之间经过的时间,因此根据您需要的id,它会识别一个“开始”事件并等待相关的“结束”事件。下面是一个简单的使用方法

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
调整这个插件以满足您的需要可能会很有用,因为它已经处理超时、等待基于特定字段的事件等

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
但您还需要注意以下几点:

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
  • 知道何时停止,直到何时需要累积事件
  • 在内存中潜在地积累大量事件可以吗
  • 什么时候暂停
如果你摄取了大量数据,Logstash在我看来并不适合这种需要。 考虑使用另一个工具聚合事件,可能是ApacheSpark每日作业,它使用elasticsearch作为后端聚合您的事件

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
编辑: 我很快检查了插件,我的建议基本上是将所有需要的信息添加到“统一事件”中

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
假设您需要从所有事件中获取“我的字段”的内容。 您可以更新第167行:

return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))
上次编辑: 这个插件应该适合你

多亏了你的问题,我发现这个插件应该适合你!我在下面留下了我的答案并进行了编辑。多亏了你的问题,我发现这个插件应该适合你!我在下面留下我的答案并进行编辑。
return add_elapsed_info(event, elapsed, unique_id, start_event.get("@timestamp"), start_event.get("my_field"))