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 } # 建议开启调试,验证解析结果 }
关键改动说明
Multiline规则调整
新正则^(Timestamp|User|Type|Message|\-+)$会匹配所有字段起始行和分隔线,negate => true表示不匹配该规则的行(即Message的多行内容)会被合并到前一行,确保Message的所有多行内容都归属到同一个字段。KV过滤器优化
- 将
value_split设为:(冒号加空格),避免Message内容里的冒号(如Return code : EXCI_NO_ERROR 0)被误拆分为新字段 - 添加
trim => " "自动清理字段值前后的空格,让解析结果更规整
- 将
可选格式处理
通过mutate的gsub可以选择保留Message的原始换行格式,或转为单行空格分隔的形式,按需调整即可。
验证方法
开启stdout { codec => rubydebug },运行Logstash后查看控制台输出,确认Message字段已完整包含所有多行内容,未被拆分为独立字段。
内容的提问来源于stack exchange,提问作者EdiM
相关产品推荐
相关产品推荐

