【发布时间】:2021-05-12 14:48:54
【问题描述】:
我在 Fluentd 输入上有以下 json 消息
{"foo":{"bar":{"abc":"[\n {\n \"ip\":\"192.168.1.1\",\n \"hostname\":\"pc\",\n \"mac\":\"01:02:03:04:05:06\"\n} \n]"}}}
又想得到输出消息
{"foo":{"bar":{"abc":[{"ip":"192.168.1.1", "hostname":"pc", "mac":"01:02:03:04:05:06}]"}}}
我正在尝试用过滤器解析它
<filter **>
@type parser
key_name foo
reserve_data true
remove_key_name_field false
<parse>
@type multi_format
<pattern>
format json
</pattern>
<pattern>
format none
</pattern>
</parse>
</filter>
但是没有任何效果。输出与输入相同。
当我尝试时
<filter **>
@type parser
key_name $['foo']['bar']['abc']
<parse>
@type none
</parse>
</filter>
<filter **>
@type parser
key_name message
<parse>
@type json
</parse>
</filter>
它“有效”,但我当然只得到
[{"ip":"192.168.1.1","hostname":"ps","mac":"01:02:03:04:05:06}]
感谢您的建议。
【问题讨论】:
-
我的理解是,您收到的消息包含转义字符,并且您想要清除它们,对吧?
source是什么?请edit 并添加source部分。 -
@Azeem 是的,你是对的“清理转义字符”
<sourse>在这种情况下无关紧要,可以是任何东西 - 虚拟、样本、转发等。 -
好吧,如果你得到硬编码的转义字符,如上例所示,清理/转换这些字符的一种方法是通过启用 Ruby 使用
record_transformer过滤器插件。你可以试试看。 -
@Azeem 但如何?你能推荐任何代码吗?
-
请参考文档:docs.fluentd.org/filter/record_transformer#enable_ruby。在块中,您可以使用 ruby 代码。例如,请参阅此线程:stackoverflow.com/questions/1634750/…。
标签: fluentd