希望有人可以帮助我,因为这个问题困扰了我好几天......
我使用流利的语言来集中码头集装箱的日志。所以我设置了docker run选项:
log-driver=fluentd
log-opt=fluentd-address=fluentd.marathon.mesos:24224
log-opt=tag=server
log-opt=fluentd-async-connect=true
并收到像
这样的json对象{container_id:xxx, container_name:xxx, log:xxx, ...}
例如,java异常堆栈跟踪将如下所示:
{log:exampleException:error, ...}
{log:\tat java.xxx, ...}
{log:\tat java.xxx, ...}
现在我的问题是:如何将它们组合在一起?像logstash中的multline一样。
我期待的正确答案是:
{log:exampleException:error\n\tat java.xxx\n\tat java.xxx, ...}
我流利的输入是in_forward而不是in_tail,所以从文档我不能使用流畅的核心内置的多线插件。
然后我找到了这个插件https://github.com/quick-sort/fluent-plugin-multiline-parser
但是因为我从docker收到的日志中没有包含' \ n'在每一行的末尾,这个插件将我的所有日志组合成一行!
e.g。我使用" Exception"标记第一行,但我得到的答案是:
{log:Exception:error\tat java.xxx\tat java.xxx, ...}
它将我的泊坞窗日志视为一行,并按字和#34分开;异常"
我试图添加' / n'通过过滤器record_transformer对每个日志进行了过滤,但过滤器更改了我的' \ n'进入' \\ n'自动,所以它也失败
我还找到了一个插件https://github.com/okkez/fluent-plugin-concat,但在安装此插件时遇到问题
最近我找不到任何方法
答案 0 :(得分:1)
我的答案是安装multiline-parser插件并启用ruby来添加'\ n'
<filter server.**>
type record_transformer
enable_ruby
<record>
log ${record["log"]+"\n"}
</record>
</filter>