You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Logstash多行日志处理求助:Message字段多行内容合并异常

修复Logstash多行Message字段解析问题

问题背景

你的日志每条以长横线序列------------------------------------------作为分隔符,包含Timestamp、User、Type、Message四个字段,其中Message字段值可能包含多行内容。当前配置无法正确将Message后的多行内容合并为一个字段值,导致解析异常。

修复后的配置文件

input {
  file {
    path => "/etc/logstash/input.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"

    codec => multiline {
      # 匹配字段开头行(Timestamp/User/Type/Message)或分隔线
      pattern => "^(Timestamp|User|Type|Message|\-+)$"
      negate => true
      what => "previous"
    }
  }
}

filter {
  kv {
    field_split => "\n"
    value_split => ": "  # 避免Message内容中的冒号被误拆分
    trim => " "          # 自动去除字段值前后的多余空格
  }

  # 可选:保留Message的原始多行格式,如需转为单行可将"\n"替换为" "
  mutate {
    gsub => [
      "Message", "\n", "\n"
    ]
  }
}

output {
  file {
    path => "/etc/logstash/output.log"
  }

  stdout { codec => rubydebug }  # 建议开启调试,验证解析结果
}

关键改动说明

  1. Multiline规则调整
    新正则^(Timestamp|User|Type|Message|\-+)$会匹配所有字段起始行和分隔线,negate => true表示不匹配该规则的行(即Message的多行内容)会被合并到前一行,确保Message的所有多行内容都归属到同一个字段。

  2. KV过滤器优化

    • 将value_split设为: (冒号加空格),避免Message内容里的冒号(如Return code : EXCI_NO_ERROR 0)被误拆分为新字段
    • 添加trim => " "自动清理字段值前后的空格,让解析结果更规整
  3. 可选格式处理
    通过mutate的gsub可以选择保留Message的原始换行格式,或转为单行空格分隔的形式,按需调整即可。

验证方法

开启stdout { codec => rubydebug },运行Logstash后查看控制台输出,确认Message字段已完整包含所有多行内容,未被拆分为独立字段。

内容的提问来源于stack exchange,提问作者EdiM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:55:16