Logstash多模式多行日志合并输入及单行日志兼容问题咨询
Logstash多模式多行日志处理解决方案
多模式整合到单个输入的实现方法
你遇到的重复输出问题本质是同一个日志文件被多个file输入插件重复读取导致的,完全可以把所有多行合并规则整合到单个multiline codec中,不需要创建多个输入。multiline codec的pattern参数支持标准正则的|(或)语法,你可以把所有需要匹配的多行模式用|拼接即可,示例配置如下:
input { file { path => "/your/log/path/*.log" start_position => "beginning" sincedb_path => "/data/logstash/sincedb" # 测试场景可临时设为/dev/null跳过已读记录校验 codec => multiline { # 多个多行规则用|拼接,注意正则特殊字符需要转义 pattern => "pattern1|pattern2|pattern3" # 根据业务场景设置:previous表示匹配到pattern的行合并到上一行,next表示合并到下一行 what => "previous" # 根据需求设置是否反向匹配:true表示不匹配pattern的行触发合并,false表示匹配pattern的行触发合并 negate => false # 可选:设置合并超时时间,避免长时间等待未结束的多行事件 auto_flush_interval => 5 } } } filter { # 原有单行、多行的解析规则不用修改,直接复用即可 } output { # 原有输出配置不变 }
特殊场景说明:如果你的不同多行模式需要对应不同的合并规则(比如有的模式要合并到上一行,有的要合并到下一行),则不适合在codec层处理,可以先去掉multiline codec,把每行都作为独立事件采集,再在filter层用
multiline过滤器实现多规则合并,灵活性更高。
multiline codec对单行消息的支持
multiline codec完全可以正常处理单行消息:只有符合你配置的合并规则的行会被合并为一个事件,所有不符合合并规则的独立单行消息,会直接作为单独的事件原样输出,不会有任何格式修改,不需要单独配置单行消息的输入。
内容的提问来源于stack exchange,提问作者Sandesh
相关产品推荐
相关产品推荐

