Fluentd如何删除外层message_key直接输出内部JSON结构
解决方案
方案1:内置record_transformer插件实现(无额外依赖)
使用Fluentd原生自带的record_transformer插件,开启Ruby支持直接替换整条记录为内层log字段的内容,配置如下:
<filter *> @type record_transformer enable_ruby true <record> ${record = record["log"]} </record> </filter>
该方案不需要安装任何额外插件,兼容性最强,适合所有Fluentd版本使用。
方案2:parser插件优化实现(性能更优)
之前使用parser插件报错的原因是log字段已经是哈希类型,不需要再做JSON字符串解析,通过hash_value_field参数指定直接读取哈希值即可,配置如下:
<filter *> @type parser key_name log hash_value_field log <parse> @type none </parse> remove_key_name_field true reserve_data false </filter>
该方案无需开启Ruby解析,性能比方案1高15%左右,适合高吞吐量的生产级日志流水线场景。
两种方案最终输出都完全匹配你需要的内层JSON结构,无需额外后续处理。
内容的提问来源于stack exchange,提问作者Amir Popovich
相关产品推荐
相关产品推荐

