ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # logstash 多行合并 (multiline) ![](https://img.kancloud.cn/fb/b6/fbb6ddad48d3289bdf0595f0c19beecf_874x133.png) logstash处理多行日志数据,可以在input插件中添加codec => multiline,如下file插件: ``` input { file { path => "/home/elastic/docview.log" start_position => "beginning" sincedb_path => "/dev/null" #从头读 codec => multiline { pattern => "^%{YEAR}%{MONTHNUM}%{MONTHDAY}[ ]%{TIME}" negate => true what => "previous" } } } ``` # file插件,导致日志数据最后一行无法读取 如果是使用file插件,不仅会导致日志数据最后一行无法读取,还会丢失最后一行日志的所有字段。 使用logstash-filter-multiline插件可以解决此问题 logstash5.0 默认没有安装此插件,需要自行安装 ``` ./bin/logstash-plugin install logstash-filter-multiline ``` 如果安装失败或者需要离线安装,可以到已安装的机器上复制gem文件 目录 ./logstash/vendor/bundle/jruby/1.9/cache/logstash-filter-multiline-3.0.2.gem ``` ./bin/logstash-plugin install ./vendor/bundle/jruby/1.9/cache/logstash-filter-multiline-3.0.2.gem ``` logstash-filter-multiline插件使用示例 ``` filter{ multiline { pattern => "^%{YEAR}%{MONTHNUM}%{MONTHDAY}[ ]%{TIME}" negate => true what => "previous" } } ``` # beats输入插件,使用logstash-filter-multiline插件仍然会导致日志数据最后一行无法读取 但是针对beats输入插件,使用logstash-filter-multiline插件仍然会导致日志数据最后一行无法读取,解决方案是在filebeat采集时进行多行合并。filebeat配置如下: ``` multiline.pattern: '^\d{8} \d{2}:\d{2}:\d{2}.\d{3}' multiline.negate: true multiline.match: after ``` 注:filebeat配置项multiline.match,after表示匹配项放在上一行后面,before表示匹配项放在下一行前面,意思和logstash相反。