fluentd输出json值为不带message_key的json



我正在创建一个带有过滤、转换和多个输出路由的日志管道。

我在输出原始日志时遇到问题(没有"message_key")。

当前,日志看起来像:

{"log": {"type": "debug", "log" :"This is the log message" , <More Entries>} }

我想去掉"log"Message_key和输出:

{"type": "debug", "log" :"This is the log message", <More Entries>}

我试过:

1。

<filter *>
@type parser
key_name log
<parse>
@type json
</parse> 
</filter>

并得到一个错误,可能是因为类型已经是json。

2。

<filter *>
@type parser
key_name log
<parse>
@type none
</parse> 
</filter>

得到了这个输出(message "message_key"而不是当前的"log"):

{"message": {"type": "debug", "log" :"This is the log message"} }
  1. 尝试使用@type record_transformer,但<record>想要一个键值,我只想选择值。

  2. 尝试用单个值格式化under,但输出为:

    {"type" => "debug", "log" => "This is the log message"}

这是怎么做到的?在输出日志之前删除message_key的最佳方法是什么?

在浏览了fluentd插件之后,我没有找到我想要的方法,所以我结束了自己编写插件的工作。

我不打算接受我的答案,因为我希望有人能提供一个更好的使用认证插件。

如果你迫切需要一个解决方案,这里是插件:

require "fluent/plugin/filter"
module Fluent
module Plugin
class JsonRecordByKeyFilter < Fluent::Plugin::Filter
Fluent::Plugin.register_filter("json_record_by_key", self)
config_param :key
def filter(tag, time, record)
record[@key]
end
end
end
end

用法:

<filter *>
@type json_record_by_key
key log
</filter>

遇到了同样的问题,但发现了一个解决方案,概述在Fluentd的网站上使用remove_key_name_field命令:https://docs.fluentd.org/filter/parser remove_key_name_field

<filter *>
@type parser
key_name log
reserve_data true
remove_key_name_field true
<parse>
@type json
</parse>
</filter>

相关内容

  • 没有找到相关文章

最新更新