使用logstash-logback-encoder写入Kibana的JSON被扁平化,如何输出嵌套对象
问题根因
你遇到的嵌套Map被扁平化问题,是logstash-logback-encoder默认开启了Map值的扁平化配置,会把嵌套结构自动转为http.url、http.headers.X-Auth-Token这类点分隔的扁平字段。
解决方法
修改你的logback.xml配置,在LogstashEncoder节点下添加关闭Map扁平化的配置即可:
<appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>${logstashHost}:${logstashPort}</destination> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <!-- 关闭Map值扁平化,保留原始嵌套结构 --> <flattenMapValues>false</flattenMapValues> <provider class="net.logstash.logback.composite.loggingevent.ArgumentsJsonProvider" /> </encoder> </appender>
额外注意事项
- 检查你的Logstash服务侧的处理配置,确保json解析过滤器没有开启
flatten => true参数,否则会再次把嵌套结构压平。 - 如果之前已经写入过扁平化的
http.*字段到Elasticsearch索引中,需要先删除旧索引或者调整索引mapping,避免字段类型冲突导致嵌套结构写入失败。
内容的提问来源于stack exchange,提问作者All_Safe
相关产品推荐
相关产品推荐

