当前位置: 代码迷 >> 综合 >> logstash 中multiline合并数据为一条
  详细解决方案

logstash 中multiline合并数据为一条

热度:18   发布时间:2023-12-16 01:46:04.0

在用logstash处理csv文件时,文件中有一行数据中有一个单元格内的数据是换行的,这样Logstash读取的时候会变成两行,也就是把原来完整的一行因为有值是换行的,所以就拆分成两条了,这种情况下我们需要将两条合并为一条。

我所处理的文件中正常是每一行都是以数字id作为开头的,另外第一行数据是以逗号开头的,所以目前的处理方法是认为数字和逗号开头的换行是正常换行,其他的换行属于需要合并的。这时就需要用到Logstash提供的 Multiline插件:

input {file {path => ......start_position => ......sincedb_path => ....//合并插件用法codec => multiline {pattern => "^[0-9,]"   //正则匹配,我这里匹配的是以0-9数字开头和逗号开头,  ^表示以。。。开头negate => true    //negate:否定,否认,使无效,这里设置为true,就说明是对上面匹配没有成功what => "previous"    //表示当上述正则没有匹配成功时将当前数据与上一条数据进行合并,这个值可以是previous和next,根据需要自己设置auto_flush_interval => 1        //如果是静态文件,他会一直监听着什么时候是最后一行所以永远无法合并最后一条,加上这个属性之后就可以读取到文件的最后一条数据了}}}===============================
如果是pattern想要匹配多个指定的字符串,只需要用|将每个字符串隔开:
codec => multiline {pattern => "hangzhou|shanghai"     //这样就可以匹配到hangzhou或者shanghainegate => true    what => "previous"    auto_flush_interval => 1       }

  相关解决方案