在用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 }