我正在创建一个带有过滤、转换和多个输出路由的日志管道。
我在输出原始日志时遇到问题(没有"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"} }
尝试使用
@type record_transformer
,但<record>
想要一个键值,我只想选择值。尝试用单个值格式化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>