Logstash处理合法JSON时出现_jsonparsefailure报错求助
问题分析与解决方案
错误原因
报错信息里的raw值是[{"ip"=>"15.156.227.207"}],这已经是Ruby数组结构,而非JSON格式的字符串。生产环境中[data][requestMetadata][clientAddress]字段在到达Logstash前,可能已被FluentBit或上游组件解析成Ruby对象,此时用json过滤器解析非字符串类型的字段,就会触发ClassCastException类型转换异常。
修复方案
修改Logstash过滤规则,先判断目标字段的类型,仅当字段为字符串类型时才执行JSON解析:
修改后的过滤配置
filter { # 仅当字段存在且为字符串类型时执行JSON解析 if [data][requestMetadata][clientAddress] and typeof([data][requestMetadata][clientAddress]) == "string" { json { source => "[data][requestMetadata][clientAddress]" } } }
额外调试建议
如果需要确认字段实际类型,可在过滤规则中添加ruby过滤器打印类型信息:
filter { ruby { code => 'puts "[data][requestMetadata][clientAddress] type: #{event.get("[data][requestMetadata][clientAddress]").class}"' } }
内容的提问来源于stack exchange,提问作者Luc Desaulniers
相关产品推荐
相关产品推荐

