我正在使用Fluentd跟踪k8s中的容器日志。我正在使用in_tail
输入插件来跟踪容器日志,使用regexp
parse插件进行解析以提取相关日志。日志是一个json,必须将其提取并发送到输出插件。我正在使用filter_parser
解析器使用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>
示例日志行:
[proxy][record]{"test":123}
这似乎产生一条记录:
record={"type"=>"record", "log"=>"{\\\"test\\\":123}"}
使用config运行安装程序时,看起来log
正则表达式组中的值已被转义(两次?);由于该原因,过滤器部分中的json解析器无法解析它。
我怀疑这与regexp
插件和/或in_tail
的编写方式有关。可能会选择log
作为字符串的值,并在将其传递之前将其转义。
还是我的正则表达式缺少了什么?
有人知道为什么会这样吗?可能的解决办法是什么?