Logstash 从多条线路拾取数据的日志存储

Logstash 从多条线路拾取数据的日志存储,logstash,logstash-grok,logstash-configuration,Logstash,Logstash Grok,Logstash Configuration,我正在尝试编写logstash过滤器,以从多个日志行中提取一些数据 我想使用多行过滤器,但这似乎并不能解决我的问题: 如果我基于某个公共模式合并行,比如本例中的0x000005fa,那么还有100行以模式0x000005fa开头 我有如下的日志行 < p:0x000005fa P:STM t:0x00ba94f0 T:component M:file1.c F:func_1 L:2343 > module Helper library has reported: check on p

我正在尝试编写logstash过滤器,以从多个日志行中提取一些数据

我想使用
多行
过滤器,但这似乎并不能解决我的问题:

如果我基于某个公共模式合并行,比如本例中的
0x000005fa
,那么还有100行以模式
0x000005fa
开头

我有如下的日志行

< p:0x000005fa P:STM t:0x00ba94f0 T:component M:file1.c F:func_1 L:2343 > module Helper library has reported: check on partition /dev/point1 failed errno=13
< p:0x000005fa P:STM t:0x00ba94f0 T:component M:file2.c F:func_2 L:1899 > %%%%Erasing HDD%%%%
< p:0x000005fa P:STM t:0x00ba94f0 T:component M:file3.c F:func_3 L:1433 > ...partition /dev/point1 format complete
我尝试了以下方法,即使用一个python脚本,该脚本可以结合grep、sed和awk来获取所需的数据,并将该数据设置为一个名为process_result的新事件,然后我们可以使用grok来获取准确的数据。但我认为如果在大量数据上运行,这些命令的组合会减慢我的日志存储速度吗

ruby {
code => 'require "open3"
         file_path = event.get("C:\Users\sushiku2\Downloads\ELK\logstash-5.4.0\Logs\diag-logs\hdd-failure\DIAG_Sample_12345_00")
         #cmd =  "my_filter.py -f #{file_path}"
         cmd = "python my_filter.py"
         stdin, stdout, stderr = Open3.popen3(cmd)
         event.set("process_result", stdout.read)
         err = stderr.read
         if err.to_s.empty?
           filter_matched(event)
         else
           event.set("ext_script_err_msg", err)
         end'
  remove_field => ["file_path"]
}
ruby {
code => 'require "open3"
         file_path = event.get("C:\Users\sushiku2\Downloads\ELK\logstash-5.4.0\Logs\diag-logs\hdd-failure\DIAG_Sample_12345_00")
         #cmd =  "my_filter.py -f #{file_path}"
         cmd = "python my_filter.py"
         stdin, stdout, stderr = Open3.popen3(cmd)
         event.set("process_result", stdout.read)
         err = stderr.read
         if err.to_s.empty?
           filter_matched(event)
         else
           event.set("ext_script_err_msg", err)
         end'
  remove_field => ["file_path"]
}