Ruby 在Fluentd中解析包含JSON的日志

Ruby 在Fluentd中解析包含JSON的日志,ruby,kubernetes,fluentd,Ruby,Kubernetes,Fluentd,我正在使用Fluentd跟踪k8s中的容器日志。我使用in_tailinput插件跟踪容器日志,使用regexpparse插件解析相关日志。日志是一个json,必须提取并发送到输出插件。我使用filter\u解析器插件使用json解析器进行提取 <source> @type tail tag proxy.* ... read_from_head true <parse> @type rege

我正在使用Fluentd跟踪k8s中的容器日志。我使用
in_tail
input插件跟踪容器日志,使用
regexp
parse插件解析相关日志。日志是一个json,必须提取并发送到输出插件。我使用
filter\u解析器
插件使用
json
解析器进行提取

    <source>
      @type tail
      tag proxy.*
      ...
      read_from_head true
      <parse>
       @type regexp
       expression \[proxy\]\[(?<type>(record|replay))\](?<log>.*)
      </parse>
    </source>

    <filter proxy.**>
      @type parser
      key_name log
      <parse>
        @type json
      </parse>
    </filter>
这似乎产生了如下记录:

record={"type"=>"record", "log"=>"{\\\"test\\\":123}"}
当使用配置运行安装程序时,看起来好像正在转义
log
regex组中的值(两次?);因此,筛选器部分中的json解析器无法对其进行解析

我怀疑这与如何编写
regexp
插件和/或
in_tail
有关。它可能是将
日志
值选取为字符串,并在传递之前对其进行转义

还是我的正则表达式遗漏了什么


有人知道为什么会发生这种情况以及解决方案是什么吗

此问题已报告,它将在将来发布固定版本。@DaeinPark似乎是针对FluentBit而不是Fluentd的问题。您粘贴的输出在使用
regexp
解析
source
后看起来像是内部记录,它仍然没有通过
过滤器。一旦它通过了上面的
过滤器
,它应该解析
日志
字段以更正lyas json。我刚刚用final
match
to
stdout
测试了上面的配置,它很好地打印了json。在
过滤器
之后,您的最终
匹配
是什么?您认为它失败的原因是什么?是的,这是
源代码
解析后的记录。筛选器似乎给出了一个错误
dump错误事件:error\u class=Fluent::Plugin::Parser::ParserError=“模式与数据不匹配”{\\\\“test\\\”:123}\\n\,“stream\”:\“stderr\”,“time\”:\“2019-08-27T11:14:15.23908372Z\”
“。至于
match
部分,它使用
fluent plugin out http
进行http调用。我不认为这有什么问题。已经报告了这个问题,它将在将来发布固定版本。@DaeinPark看起来这个问题是针对FluentBit而不是Fluentd的。您粘贴的输出在使用
regexp
解析
source
后看起来像内部记录,它仍然没有通过您的
过滤器
。一旦它通过了上面的
过滤器
,它应该解析
日志
字段以更正lyas json。我刚刚用final
match
to
stdout
测试了上面的配置,它很好地打印了json。在
过滤器
之后,您的最终
匹配
是什么?您认为它失败的原因是什么?是的,这是
源代码
解析后的记录。筛选器似乎给出了一个错误
dump错误事件:error\u class=Fluent::Plugin::Parser::ParserError=“模式与数据不匹配”{\\\\“test\\\”:123}\\n\,“stream\”:\“stderr\”,“time\”:\“2019-08-27T11:14:15.23908372Z\”
“。至于
match
部分,它使用
fluent plugin out http
进行http调用。我不认为这有什么问题。
record={"type"=>"record", "log"=>"{\\\"test\\\":123}"}